我有一个大数据表需要过滤几列。我在想使用内部连接过滤表和数据表来获得结果。问题是过滤器是动态的。
例如,用户可以使用两列进行过滤(选择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?
非常感谢。
答案 0 :(得分:1)
您可以通过以下方式构建过滤器表:
Attribute Value
========= =====
Acct 1001
Acct 1002
Acct 1003
Tran 1
Tran 2
... ...
这将为您提供可以使用Power Query导入的固定数量的列。在数据表中,您需要取消对列的拆分以获得相同的结构。之后,您可以加入属性和值列。将属性旋转到列中以再次获得原始结构。
答案 1 :(得分:0)
我将使用Acct和Tran列合并过滤器表,然后展开Filter.Dept列。
接下来我会添加一个列"匹配"使用公式来评估过滤器,方法如下:
if [Filter.Dept] = null then true else if [Dept] = [Filter.Dept] then true else false
最后我会过滤"匹配"列为TRUE。
请注意,过滤器部门列必须始终存在,但可以为第一个场景留空。
答案 2 :(得分:0)
我喜欢unpivot解决方案 - 但如果你的BigDataTable非常庞大,它会变得很慢。然后你可以使用这个替代方案:
= Table.NestedJoin(BigDataTable,Table.ColumnNames(FilterTable),FilterTable,Table.ColumnNames(FilterTable),"NewColumn",JoinKind.Inner)
它使用以下命令动态生成列名列表:Table.ColumnNames(FilterTable),它返回FilterTable的列名。我的期望是,这甚至会折回服务器。