我在Excel工作簿中有这样的表。此表引入Power Query(链接到图像:Table shown in Query Window)。
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.
任何建议都将不胜感激。
答案 0 :(得分:1)
我认为你想要的语法是这样的:
ToCols = Table.ToColumns(Source),
NewTable = Table.FromColumns(List.Transform(ToCols, each List.RemoveNulls(_)))