使用List.Generate()动态过滤多个列和不同条件

时间:2019-12-04 10:08:31

标签: excel powerbi powerquery

我需要过滤一个表。对我来说,挑战在于过滤器信息(列名,列数以及过滤器值)可以更改。

经过一些研究,我认为List.Generate()可以在这里帮助我。这个想法是创建一个循环,该循环在每个循环传递中应用一个动态传递到该循环的过滤条件。

不幸的是,我对List.Generate()的理解不够深,无法自己构建它。因此,任何帮助将不胜感激!

这是我的设置:

我有一张数据表(DATASTART)

+---+---+---+
| A | B | C |
+---+---+---+
| 1 | 1 | 2 |
| 1 | 2 | 2 |
| 1 | 3 | 2 |
| 2 | 4 | 3 |
| 2 | 5 | 3 |
| 2 | 6 | 3 |
+---+---+---+

和一张表格(FILTER),其中包含应过滤DATASTART的哪些列以及相应的过滤器值。

+--------+--------+
| Column | Filter |
+--------+--------+
| A      |      1 |
| B      |      2 |
+--------+--------+

带有静态Power Query代码

= Table.SelectRows(DATASTART, each ([A] = 1) and ([B] = 2))

结果将是此表(DATARESULT)。

+---+---+---+
| A | B | C |
+---+---+---+
| 1 | 2 | 2 |
+---+---+---+

1 个答案:

答案 0 :(得分:1)

怎么样?

let
    condition = (record as record) as logical =>
        List.AllTrue(
            List.Transform(
                Table.ToRecords(FILTER),
                each Record.Field(record, [Column]) = [Filter]
            )
        )
in
    Table.SelectRows(DATASTART, condition)