【问题标题】:How to replace a column name in Power Query by a variable to filter rows?如何用变量替换 Power Query 中的列名以过滤行?
【发布时间】:2017-05-18 07:09:37
【问题描述】:

在使用 Excel Power Query 开发的查询中,当我过滤列表的行时,我想用变量替换表列名。不幸的是,我要么收到一条错误消息(例如,表达式错误:未找到表的 xx 列),要么在过滤后没有剩余行,即使它应该过滤。 在下面的示例中,变量#“Filter”(= 列名)设置为列“B”,并在步骤#“Filter Rows”中用于过滤包含“1”的行。但结果是没有显示任何行。 知道是什么原因以及如何解决这个问题吗?也许变量需要有一个特殊的数据类型?

提前致谢!

表: Table to be filtered

代码:

let
  #"Filter" = "B",
  Source = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
  #"Changed Type" = Table.TransformColumnTypes(Source,{{"A", Int64.Type}, {"B", Int64.Type}}),
  #"Changed Type1" = Table.TransformColumnTypes(#"Changed Type",{{#"Filter", type text}}),
  #"Filtered Rows" = Table.SelectRows(#"Changed Type1", each Text.Contains(#"Filter", "1"))
in
  #"Filtered Rows"

【问题讨论】:

    标签: excel powerquery


    【解决方案1】:

    #"Filter" 是值“B”,因此条件始终返回 false。 Table.SelectRows 的第二个参数接受一个函数,该函数将表的当前行作为记录传入。您可以执行以下任一操作来使用变量来指定列:

    = Table.SelectRows(#"Changed Type", each Text.Contains(Record.Field(_, #"Filter"), "1"))

    = Table.SelectRows(#"Changed Type", (x) => Text.Contains(Record.Field(x, #"Filter"), "1"))

    each_ 在这些情况下与 (x) =>x 相同。 Record.Field(_, #"Filter") 获取当前行中#"Filter" 所指列的值。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多