如何使用 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
我想按值范围筛选 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