如何使用Power Query过滤一个范围的列?
我想通过一系列值过滤Power Query列。 我发现我可以手动select或取消select列中的值,但是我需要自动删除表单中已有值的范围。
假设我正在查询的表格包含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值转换为Recordtypes。 详细信息:值=types=types
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"
编辑4 :我的表具有空值错误为空。 我添加了一行来从我的名字源中过滤出空值
如果要检查的项目列表位于Excel工作表中,则可以使用“从表”导入表并使用List.Contains
查看您的值是否在该表中。 如果工作表在WorksheetQuery中,并且名称位于列名称中,那么您的步骤如下所示:
= Table.SelectRows(PreviousStep, each List.Contains(WorksheetQuery[Names], [Ticket Assignee]))
如果结果太慢,可以尝试将列转换为logging,然后使用Record.HasFields
。
为什么不使用连接操作? 这似乎是起作用,至less不慢,但在我心中更清楚:
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