Power Query List.RemoveNulls в коллекции столбцов

У меня есть таблица как таковая в книге Excel. Эта таблица переносится в Power Query (ссылка на изображение: Таблица, отображаемая в окне запроса) .

tblTest:
+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 |
+------+------+------+------+
| 1    | 2    | null | null |
| null | null | 1    | null |
| null | 3    | null | null |
| null | null | null | 4    |
| 2    | 5    | null | null |
+------+------+------+------+

В Power Query я создаю новую таблицу, удаляя нули в каждом столбце как таковом:

let
    Source = Excel.CurrentWorkbook(){[Name="tblTest"]}[Content],    
    NewTable = Table.FromColumns({
    List.RemoveNulls(Source[Col1]),
    List.RemoveNulls(Source[Col2]),
    List.RemoveNulls(Source[Col3]),
    List.RemoveNulls(Source[Col4])
    },Table.ColumnNames(Source))
in
    NewTable

Мой вывод из Power Query (NewTable):

NewTable:
+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 |
+------+------+------+------+
| 1    |    2 | 1    | 4    |
| 2    |    3 | null | null |
| null |    5 | null | null |
+------+------+------+------+

NewTable - это мой ожидаемый результат.

Моя проблема в том, что во входной таблице (tblTest) неизвестное количество столбцов. Мне нужен код языка M, который будет перебирать все столбцы во входной таблице, независимо от их количества, и удалять нули в каждом столбце, что в конечном итоге приведет к NewTable.

Насколько я понимаю, реальный цикл (например, цикл for) - это не то, что на самом деле слишком часто делается в M, поэтому я предполагаю, что есть какой-то метод сбора, который сделает все это за один раз. Я хоть убей не могу понять, что это может быть.

Я ожидал, что код будет выглядеть примерно так:

    let
    Source = Excel.CurrentWorkbook(){[Name="tblTest"]}[Content],
    lstColumns = Table.ColumnNames(Source),    
    NewTable = Table.FromColumns(each List.RemoveNulls(each lstColumns),lstColumns)
in
    NewTable

Приведенный выше код не работает и приводит к следующей ошибке:

Expression.Error: We cannot convert a value of type Function to type List.

Любые предложения будут ценны.


person Aye_Aye_Frey    schedule 19.03.2018    source источник
comment
Ваша первая ошибка заключается в том, что на листе Excel нет значений Null.   -  person ashleedawg    schedule 19.03.2018
comment
Привет, ashleedawg. Я буквально просто скопировал и вставил то, что было показано в редакторе запросов.   -  person Aye_Aye_Frey    schedule 19.03.2018
comment
Какой у вас настоящий m-код? Я не понимаю, как вы удаляете нули? Замена я могла понять, но удаление может повлиять на структуру таблицы с точки зрения количества строк. Ожидаете ли вы новую выходную таблицу с фиксированным количеством строк во всех столбцах, то есть таблицу, в которой появляются новые нули для заполнения недостающих значений строк в некоторых столбцах?   -  person QHarr    schedule 19.03.2018
comment
QHarr: M-код, который создает NewTable, показан во 2-м абзаце кода, где я жестко запрограммировал 4 столбца. Я ожидаю NewTable в качестве вывода.   -  person Aye_Aye_Frey    schedule 19.03.2018
comment
QHarr: Я удаляю нули индивидуально в каждом столбце (как список столбцов). Эти новые списки (по одному для каждого столбца) заполняют NewTable.   -  person Aye_Aye_Frey    schedule 19.03.2018
comment
Извините, я прочитал это и забыл. Виноват.   -  person QHarr    schedule 19.03.2018


Ответы (1)


Я думаю, что вам нужен такой синтаксис:

ToCols = Table.ToColumns(Source),
NewTable = Table.FromColumns(List.Transform(ToCols, each List.RemoveNulls(_)))
person Alexis Olson    schedule 19.03.2018
comment
Это было именно то, что мне было нужно. Мне пришлось добавить Table.ColumnNames в конец, чтобы не потерять имена столбцов: NewTable = Table.FromColumns (List.Transform (ToCols, каждый List.RemoveNulls (_)), Table.ColumnNames (Source)) Большое спасибо за ваша помощь. - person Aye_Aye_Frey; 19.03.2018