如何通过变量替换Power Query中的列名来过滤行?

时间:2017-05-17 21:33:43

标签: excel powerquery

在使用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"

1 个答案:

答案 0 :(得分: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"列引用的当前行中的值。