我有一个问题让我对 power query excel 感到疯狂。 我有一个包含多列的表,我想找到每行的第一个非空值。没关系,我可以用通常的方式做到这一点: Table.AddColumn(#"Previous", "NotNull" 每个 List.First(List.RemoveNulls({ColA,ColB,ColC}))) 但我正在努力寻找出现在哪一列中。
我尝试了 Table.ColumnNames 和类似的组合,但没有结果。嵌套 if 逐列检查的原始解决方案让我不满意。
我可以在 R/Python 中毫不费力地做到这一点,但我想在 PQ excel 中做到这一点。
谁能给我一个线索?我缺少什么功能吗?
使用 Table.ColumnNames 函数获取表中列名的列表。
然后使用List.PositionOf函数在每一行中找到第一个非空值的索引。
添加列,自定义列,命名为Contents带公式
= List.RemoveNulls(Record.ToList(_)){0}
或
= List.First(List.RemoveNulls(Record.ToList(_)))
拿起每行的第一个项目
添加列,自定义列,带公式
= Table.ColumnNames(#"PriorStepNameHere){List.PositionOf(Record.ToList(_),[Contents])}
找到包含该内容的列名(第一个)
完整代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Contents", each List.First(List.RemoveNulls(Record.ToList(_)))),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "ColumnName", each Table.ColumnNames(Source){List.PositionOf(Record.ToList(_),[Contents])})
in #"Added Custom1"