【问题标题】:Excel Power Query - Filter rows by comparing two columnsExcel Power Query - 通过比较两列来过滤行
【发布时间】:2019-10-29 05:52:09
【问题描述】:

我在 Excel 中有一个表,它在 Power Query 编辑器中自外连接以创建对

Table named Items
-----------------
Item   Value
A      1
B      2
C      3

我创建了一个 From Table/Range 查询,该查询已关闭并加载到名为“Items”的连接

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Item", type text}, {"Value", Int64.Type}})
in
    #"Changed Type"

然后进行另一个查询,即自反交叉连接

let
    Source = Items,
    #"Added Custom" = Table.AddColumn(Source, "Custom", each Items),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Item", "Value"}, {"Custom.Item", "Custom.Value"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded Custom",{{"Custom.Item", "Item.2"}, {"Custom.Value", "Value.2"}, {"Value", "Value.1"}, {"Item", "Item.1"}}),
    #"Added Custom1" = Table.AddColumn(#"Renamed Columns", "Value", each [Value.1]*[Value.2])
in
    #"Added Custom1"

此时查询显示 9 行 (3x3)

Item.1 Value.1 Item.2 Value.2 Value
A      1       A      1       1
A      1       B      2       2
A      1       C      3       3
B      2       A      1       2
B      2       B      2       4
B      2       C      3       6
C      3       A      1       3
C      3       B      2       6
C      3       C      3       9

我正在努力编辑查询,以便将结果过滤到value.1 <= value.2 的情况

Item.1 Value.1 Item.2 Value.2 Value
A      1       A      1       1
A      1       B      2       2
A      1       C      3       3
B      2       B      2       4
B      2       C      3       6
C      3       C      3       9

Power Query 编辑器 UI 似乎不提供 x < y 过滤功能,我不知道如何使用 Power Query M formula language 按我想要的方式过滤数据。

Microsoft Power Query 提供包含许多功能的强大数据导入体验。 Power Query 适用于 Analysis Services、Excel 和 Power BI 工作簿。 Power Query 的核心功能是筛选和组合,即从一个或多个受支持的数据源的丰富集合中混搭数据。任何此类数据混搭均使用 Power Query M 公式语言表示。它是一种类似于 F# 的函数式、区分大小写的语言。

【问题讨论】:

    标签: excel powerquery m


    【解决方案1】:

    添加自定义列:

    • 过滤True
    • 然后删除自定义列

    【讨论】:

      【解决方案2】:

      让我们有一张桌子



      只需点击过滤按钮并选择某种比较



      插入一些值,例如 1



      然后将该值更改为您要比较的列名



      let
          Source = #table({"col1", "col2"}, {{99,88}, {11,22}, {33,44}}),
          filter = Table.SelectRows(Source, each [col1] <= [col2])
      in
          filter
      

      【讨论】:

        【解决方案3】:

        我最终使用高级编辑器编辑了查询,并使用Table.SelectRows 中的步骤#"Added Custom1" 表进行下一步。

        let
            Source = Items,
            #"Added Custom" = Table.AddColumn(Source, "Custom", each Items),
            #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Item", "Value"}, {"Custom.Item", "Custom.Value"}),
            #"Renamed Columns" = Table.RenameColumns(#"Expanded Custom",{{"Custom.Item", "Item.2"}, {"Custom.Value", "Value.2"}, {"Value", "Value.1"}, {"Item", "Item.1"}}),
            #"Added Custom1" = Table.AddColumn(#"Renamed Columns", "Value", each [Value.1]*[Value.2]),
        

        添加了这个

            #"Selected Rows" = Table.SelectRows(#"Added Custom1", each [Value.1] <= [Value.2]),
            #"Sorted Rows" = Table.Sort(#"Selected Rows",{{"Value", Order.Ascending}, {"Value.1", Order.Ascending}, {"Value.2", Order.Ascending}})
        in
            #"Sorted Rows"
        

        【讨论】:

          猜你喜欢
          • 2019-01-16
          • 2019-06-06
          • 1970-01-01
          • 2020-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-24
          相关资源
          最近更新 更多