DAX 函数:听说你想用度量值做切片器?

某一天,有客户提出,要用计算的指标作为切片器,选什么出什么,小编从心里翻了个白眼,这不太可能呀!

file

不管怎么样,小编还是得默默地啃起这个硬骨头。下面是集合了工坊集体智慧的解决方案。

01 数据准备

这里我们采用五险一金作为示意,如下图:

file

假设希望选择的度量值有:养老保险金、医疗保险金、失业保险金、住房公积金、工伤保险金以及生育保险金。

02 单项选择

我们知道,度量值是不能放到切片器的字段中去的,所以我们需要将用到的度量值列出一个列表,像这样:

file

这样就能放到切片器中了,是这样的:

file

那么如何构造一个可以根据这个字段的选择而产生交互的度量值呢?

思路是这样的:如果选择的项目是“工伤保险金”,那么就返回度量值[工伤保险金];如果选择的项目是“生育保险金”,那么就返回度量值[生育保险金]……依次类推。

根据以上逻辑,写出如下度量值:

单选 =
IF (SELECTEDVALUE( '度量值列表'[项目] ) = "工伤保险金",[工伤保险金],
IF (SELECTEDVALUE( '度量值列表'[项目] ) = "生育保险金",[生育保险金],
IF (SELECTEDVALUE( '度量值列表'[项目] ) = "失业保险金",[失业保险金],
IF (SELECTEDVALUE( '度量值列表'[项目] ) = "养老保险金",[养老保险金],
IF (SELECTEDVALUE( '度量值列表'[项目] ) = "医疗保险金",[医疗保险金],
IF ( SELECTEDVALUE( '度量值列表'[项目] ) = "住房公积金", [住房公积金] 
))))))

这样在报表视图中,选择度量值中的一个,比如“工伤保险金”,那么此时将满足条件:

SELECTEDVALUE ( '度量值列表'[项目] ) = "工伤保险金"

所以以上表达式此时将返回工伤保险金度量值,报表视图中是这样的:

file

03 自由组合

在上一节中我们研究了单选的情况,但实际使用会要求多选。在多选的时候,以上的方案结果如下:

file

“总计”项是不显示的,
因为此时“SELECTEDVALUE ( '度量值列表'[项目] )”返回多个值。

解决方案:每个度量值分别乘以一个系数r再加起来,当选择的项目中包含该度量值的名称时,系数r是1,否则就是0. 拿工伤保险金来说,r可以这样写:

系数r =
IF ( "工伤保险金"IN VALUES ( '度量值列表'[项目] ), 1, 0)

依次类推,最终构造如下度量值:

自由组合 = 
[工伤保险金] * IF("工伤保险金" in VALUES('度量值列表'[项目]) , 1 ,0) + 
[生育保险金] * IF("生育保险金" in VALUES('度量值列表'[项目]) , 1 ,0) + 
[失业保险金] * IF("失业保险金" in VALUES('度量值列表'[项目]) , 1 ,0) +
[养老保险金] * IF("养老保险金" in VALUES('度量值列表'[项目]) , 1 ,0) +
[医疗保险金] * IF("养老保险金" in VALUES('度量值列表'[项目]) , 1 ,0) +
[住房公积金] * IF("住房公积金" in VALUES('度量值列表'[项目]) , 1 ,0)

项目里面选择了哪一个,相应的系数就会变成1.则返回的结果就是所选择的所有度量值的和。报表视图中呈现结果如下:

file

由上我们可得总结如下:

总结

我们在单选的基础上,研究了更加具有普适性的自由选择度量值的方案。度量值与数据列是不同的,度量值总有有限的个数,所以该方法通常可行。

同时,小编有一个美好的希冀,那就是度量值可以用某个通配符来表示,这样的话可能就不用每个度量值分别写一个系数了,友友们怎么看嘞?

file


* PowerPivot工坊原创文章,转载请注明出处!


如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊