You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Power Query中如何按文本参数指定的列名过滤空值行?

Power Query中如何按文本参数指定的列名过滤空值行?

我来帮你解决这个问题,你遇到的核心问题是没搞清楚文本参数列引用在Power Query M语言里的区别——你的ColToKeep是存储列名的文本字符串(比如"Col3"),但之前的写法要么把它当成了列名本身,要么直接用了字符串值,没有去取对应列的单元格内容。

问题根源拆解

先帮你复盘下之前三次尝试的问题:

  • 第一次用[ColToKeep]:Power Query会直接去找名为ColToKeep的列,但你的表根本没有这个列,所以报错。
  • 第二次用ColToKeep:这里取的是参数的文本值(比如"Col3"),这个字符串本身永远不会是null,所以过滤条件相当于永远为真,自然筛不掉空值行(比如Bob那行的Col3是空的,却被保留了)。
  • 第三次用Table.ColumnNames(...):你取的是列名的字符串,同样不是单元格里的实际值,判断字符串是否为空毫无意义,所以也达不到过滤效果。

正确的解决方法

要通过文本参数指定的列来过滤空值,你需要用Record.Field函数——在Table.SelectRowseach表达式里,当前行是一个Record(记录),Record.Field(_, 列名字符串)可以精准获取当前行中指定列的值。

修正后的完整M代码

let
    Source = Excel.CurrentWorkbook(){[Name="Source"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Col1", Int64.Type}, {"Col2", Int64.Type}, {"Col3", Int64.Type}, {"Col4", Int64.Type}, {"Name", Text.Type}, {"Alt.Name", Text.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{ColToKeep, NameToKeep}),
    // 核心修正:用Record.Field获取参数指定列的当前行值,判断是否不为null
    #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each Record.Field(_, ColToKeep) <> null)
in
    #"Filtered Rows"

补充说明

如果你还想同时过滤掉空字符串(比如列值是""的情况),可以把过滤条件改成:

each Record.Field(_, ColToKeep) <> null and Record.Field(_, ColToKeep) <> ""

这样就能精准筛选出ColToKeep参数指定的列中不为空的行,得到你想要的结果啦。

备注:内容来源于stack exchange,提问作者Dave

火山引擎 最新活动