如何使用 Power Query 按范围筛选列?

How to filter a column by a range with Power Query?

我想按值范围筛选 Power Query 列。我看到我可以从列中手动 select 或删除 select 值,但我需要自动执行此操作,以放弃 sheet.

中已有的一系列值

假设我正在查询的 table 包含 100 个唯一名称。我只想导入与 sheet 中的 20 个名称列表相匹配的行。

如何使用 Power Query 执行此操作?

编辑:我可以制作一个 excel 函数来将姓名列表连接成查询所需的格式,如下所示:(= Table.SelectRows(#"Changed Type", each ([Ticket Assignee] ="Name 1" or [Ticket Assignee] ="Name 2")))。但是仍然需要一种方法来从查询中引用它。

编辑 2:

我的查询:

此错误为:

Expression.Error: We expected a FieldsSelector value.

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"

Edit3:修改后的查询:

Expression.Error: We cannot convert the value null to type Record. Details: Value= Type=Type

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:我的 table 有空白值,但被误认为是 null。我添加了一行以从我的名称源中过滤掉空值

如果您要检查的项目列表在 Excel 工作表中,那么您可以使用 From Table 导入 table 并使用 List.Contains看看你的价值观是否在 table 中。如果工作表 table 在 WorksheetQuery 中并且名称在列名称中,那么您的步骤将如下所示:

= Table.SelectRows(PreviousStep, each List.Contains(WorksheetQuery[Names], [Ticket Assignee]))

如果最终速度太慢,您可以尝试将列转换为记录,然后改用 Record.HasFields

为什么不使用连接操作?在我看来,它似乎至少不慢,但更清晰:

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