

加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。
CALCULATE的FILTER筛选条件,有如下几种情况:
1 多个筛选条件来自同一个表,取交集用“&&”连接,取并集用“||”连接。
2 多个筛选条件来自不同的表,用逗号隔开的多个FILTER,默认取得是交集。
3 多个筛选条件来自不同的表,要取并集,该怎么办呢?
解决方案
理论上讲,多个维度表和事实表都有关系,维度表的所有列都可以添加到事实表中去,然后再对一个事实表做多条件筛选就能达到目的。但是,行数很多的事实表新建列,文件会变大,这不符合星型架构建模原则。
直接在度量值的公式中,先用CROSSJOIN将不同的表交叉到一个表,再基于这个表去做取并集的多条件筛选,就能达到目的。
举例
以购买客户数为例,统计负责人是张三或者省份是北京的去重客户数。
模型

销售表

客户人员表

客户省份表

度量值
购买客户数:
#ActiveCustomer = DISTINCTCOUNT('销售表'[客户])
i 张三负责的客户或者省份是北京的客户中的购买客户数,受上下文中的人员和省份筛选变化:
#ActiveCustomer_张三_北京 =
CALCULATE([#ActiveCustomer],
FILTER(
CROSSJOIN(
VALUES('客户人员表'[人员]),
VALUES('客户省份表'[省份])
),
'客户人员表'[人员]="张三" || '客户省份表'[省份]="北京"
)
)

ii 张三负责的客户或者省份是北京的客户中的购买客户数,不受上下文中的人员和省份筛选变化:
#ActiveCustomer_张三_北京_恒等 =
CALCULATE([#ActiveCustomer],
FILTER(
CROSSJOIN(
ALL('客户人员表'[人员]),
ALL('客户省份表'[省份])
),
'客户人员表'[人员]="张三" || '客户省份表'[省份]="北京"
)
)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。