如何使用Power Query按范围过滤列?

时间:2016-08-16 23:49:45

标签: excel powerquery

我想按一系列值过滤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。我添加了一行来过滤掉我的名字来源

中的空值

2 个答案:

答案 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