动态加入Power Query(Excel)

时间:2015-10-01 20:50:48

标签: excel excel-vba powerbi powerquery vba

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

例如,用户可以使用两列进行过滤(选择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?

非常感谢。

3 个答案:

答案 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的列名。我的期望是,这甚至会折回服务器。