之前介绍过部门变动的分析,将部门匹配到数据表中,用的是DAX的方法,参考:PowerBI分析技巧:部门变动问题
最近有星友问,如果用PowerQuery来匹配部门,应该怎么做呢?
仍然以上面的数据为例,在pq中有个部门人员表,以及订单表。
只需要在订单表中添加一个自定义列,这个自定义列,还可以参考前面介绍的PQ变量的写法(PowerQuery中的“VAR变量”,你用过吗?):
let
date_=[日期],
name_=[业务员]
in
List.Max(
Table.SelectRows(
部门人员表,
(x)=>x[业务员]=name_ and
x[开始日期]<=date_ and
x[结束日期]>=date_
)[部门]
)
结果是完全一样的。
这个用M添加的自定义列,无论是写法还是逻辑,其实与DAX的逻辑是一致的。
都用了变量,都是从部门人员表中匹配对应的部门;匹配的逻辑都是找出业务员相同,并且日期在起止日期内的数据行,然后从该行中提取部门。只是DAX用的是FILTER函数来进行筛选,而M用的是 Table.SelectRows而已。
其实这个做法不仅仅是用于部门匹配,而是如果你遇到,需要用PowerQuery进行多条件的、无法用合并查询解决的匹配问题,都可以参考上面的思路。
如果数据量较大,使用PQ可能会比较慢,建议用DAX的方式来实现。
PowerBI星球