0

我有一个需要按几列过滤的大数据表。我正在考虑使用内部连接过滤器表和数据表来获得结果。问题是过滤器是动态的。

例如,用户可以使用两列进行过滤(选择 Acct= 1001 或 1002 或 1003 或 1004 且 Tran= 1 或 2 或 3 的数据)。表如下。

col1    col2
Acct    Tran
====    ====
1001    1
1002    2
1003    3
1004

或者用户可以在表的末尾添加一列,使用三列进行过滤(选择 Acct= 1001 或 1002 或 1003 或 1004 且 Tran= 1 或 2 或 3 且 Dept=a 或 b 或 c 的数据)。表格如下

col1    col2    col3
Acct    Tran    Dept
====    ====    ====
1001    1       a
1002    2       b
1003    3       c
1004

列数和列名可能会改变。有人知道如何在 Power Query 中实现此功能吗?还是VBA?

非常感谢。

4

3 回答 3

1

您可以通过以下方式构建过滤器表:

Attribute   Value
=========   =====
Acct        1001
Acct        1002
Acct        1003
Tran        1
Tran        2
...         ...

这将为您提供可以使用 Power Query 导入的固定数量的列。在您的数据表中,您需要取消透视列以获得相同的结构。之后,您可以加入属性和值列。将属性旋转到列中以再次获得原始结构。

于 2016-07-05T12:33:23.757 回答
0

我喜欢 unpivot 解决方案 - 但如果您的 BigDataTable 非常大,它可能会变得非常慢。然后,您可以改用此替代方法:

= Table.NestedJoin(BigDataTable,Table.ColumnNames(FilterTable),FilterTable,Table.ColumnNames(FilterTable),"NewColumn",JoinKind.Inner)

它使用 Table.ColumnNames(FilterTable) 动态生成列名列表,它返回 FilterTable 的列名。我的期望是这甚至会折回服务器。

于 2016-07-06T05:31:06.100 回答
0

我将使用 Acct 和 Tran 列与过滤器表合并,并展开 Filter.Dept 列。

接下来,我将添加一个带有公式的“匹配”列来评估过滤器,如下所示:

if [Filter.Dept] = null then true else if [Dept] = [Filter.Dept] then true else false

最后,我将过滤“匹配”列以获得 TRUE。

请注意,Filter Dept 列需要始终存在,但对于您的第一个方案,它可以留空。

于 2015-10-01T23:19:31.050 回答