我想按一系列值过滤Power Query列。我看到我可以手动选择或取消选择列中的值,但我需要在表单中已有的一系列值上自动执行此操作。
假设我查询的表包含100个唯一名称。我只想导入与我的工作表中的20个名字相匹配的行。
如何使用Power Query执行此操作?
编辑:我可以创建一个excel函数,将名称列表连接成查询所需的格式,如下所示:(= Table.SelectRows(#"Changed Type", each ([Ticket Assignee] ="Name 1" or [Ticket Assignee] ="Name 2")))
。但仍需要一种从查询中引用它的方法。
Edit2:
我的查询:
这出错了:
Expression.Error:我们期望一个FieldsSelector值。
let
names_Source = Excel.CurrentWorkbook(){[Name="namesTable"]}[Content],
names_Values = names_Source{1},
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"Ticket Assignee", type text}, {"# Solved", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Ticket Assignee] <> null)),
#"Filtered Rows1" = Table.SelectRows(#"Changed Type", each Record.HasFields(names_Values, [Ticket Assignee]))
in
#"Filtered Rows1"
编辑3 :修改后的查询:
Expression.Error:我们无法将值null转换为Record类型。 细节: 值= 类型=类型
let
names_Source = Excel.CurrentWorkbook(){[Name="namesTable"]}[Content],
names_Values = Record.FromList(names_Source[Zendesk Name], names_Source[Zendesk Name]),
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"Ticket Assignee", type text}, {"# Solved", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Ticket Assignee] <> null)),
#"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each Record.HasFields(names_Values, [Ticket Assignee]))
in
#"Filtered Rows1"
Edit4 :我的表中有空值,错误为null。我添加了一行来过滤掉我的名字来源
中的空值答案 0 :(得分:1)
如果要检查的项目列表位于Excel工作表中,则可以使用“从表”导入该表,并使用List.Contains
查看您的值是否在该表中。如果工作表表在WorksheetQuery中,并且名称在名称列中,那么您的步骤将如下所示:
= Table.SelectRows(PreviousStep, each List.Contains(WorksheetQuery[Names], [Ticket Assignee]))
如果结果太慢,您可以尝试将列转换为记录,然后使用Record.HasFields
代替。
答案 1 :(得分:0)
为什么不使用联接操作?在我看来,它似乎至少不会慢,但更清晰:
let
names_Source = Excel.CurrentWorkbook(){[Name="namesTable"]}[Content],
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Joind = Table.NestedJoin(Source,{"Ticket Assignee"},names_Source,{"Zendesk Name"},"NewColumn",JoinKind.RightOuter),
Filtered = Table.RemoveColumns(Joind,{"NewColumn"})
in
Filtered