Power BI中基于同一列的两个切片器筛选结果差值计算问题
嘿,刚接触Power BI的话确实会碰到这类有点绕的小问题,别慌,我来一步步帮你捋明白怎么实现!
首先我先确认下你的需求哈:你有个TABLE_1,里面是SOURCE(A/B/C这类)和对应的VALUE,想要弄两个切片器,都能选SOURCE里的选项,然后计算这两个切片器选中的组的VALUE总和的差值,对吧?
那核心问题在于Power BI默认一个列的筛选上下文是共享的,直接用原表的SOURCE做两个切片器的话,筛选会冲突,所以得先做两个独立的切片器数据源,具体步骤如下:
步骤1:创建两个独立的切片器专用表
咱们得先做两个只装SOURCE唯一值的表,而且不能和原表TABLE_1建立关系,这样两个切片器才能独立选值。在“数据”选项卡的“新建表”里用DAX表达式创建:
Slicer_Source1 = VALUES(TABLE_1[SOURCE])
Slicer_Source2 = VALUES(TABLE_1[SOURCE])
这两个表就是原表SOURCE列去重后的列表,完全独立,不会互相干扰。
步骤2:写DAX度量值计算总和与差值
接下来写三个度量值,分别算第一个切片器选的组的总和、第二个的总和,还有两者的差值:
- 第一个切片器选中组的VALUE总和:
Total_Source1 = CALCULATE(SUM(TABLE_1[VALUE]), TABLE_1[SOURCE] = SELECTEDVALUE(Slicer_Source1[SOURCE]))
- 第二个切片器选中组的VALUE总和:
Total_Source2 = CALCULATE(SUM(TABLE_1[VALUE]), TABLE_1[SOURCE] = SELECTEDVALUE(Slicer_Source2[SOURCE]))
- 两者的差值度量值:
Value_Difference = [Total_Source1] - [Total_Source2]
如果你需要的是绝对值(不管谁减谁都是正数),就改成:
Value_Difference = ABS([Total_Source1] - [Total_Source2])
步骤3:配置可视化组件
回到报告页面,插入两个切片器,分别把Slicer_Source1[SOURCE]和Slicer_Source2[SOURCE]拖进切片器的字段里;然后插入几个卡片可视化,把刚才的Total_Source1、Total_Source2、Value_Difference拖进去,这样你选不同的SOURCE,卡片就会自动更新总和和差值啦!
额外补充:支持多选SOURCE的情况
如果你的切片器需要允许同时选多个SOURCE(比如同时选A和C),那上面用SELECTEDVALUE的度量值就不行了,得改成用TREATAS来传递多选的筛选,度量值改成这样:
Total_Source1 = CALCULATE(SUM(TABLE_1[VALUE]), TREATAS(VALUES(Slicer_Source1[SOURCE]), TABLE_1[SOURCE]))
Total_Source2 = CALCULATE(SUM(TABLE_1[VALUE]), TREATAS(VALUES(Slicer_Source2[SOURCE]), TABLE_1[SOURCE]))
这样不管你在切片器里选一个还是多个SOURCE,都能正确计算对应的总和啦!
备注:内容来源于stack exchange,提问作者r0bt

