如何用DAX度量实现Power BI矩阵聚合的减法运算?
实现自定义减法聚合的DAX度量方案
当然可以搞定!咱们可以通过编写一个带条件判断的DAX度量值,精准控制Power BI矩阵中的聚合逻辑,完全匹配你想要的结果。
核心思路
根据矩阵的层级(Header/Subheader/Subheader2)分别定义计算规则:
- 最底层(Subheader2:C、D):直接返回原始的Amount值
- 中间层(Subheader:B):计算
C的Amount - D的Amount - 顶层(Header:A):继承中间层B的计算结果
DAX度量代码
请将代码中的YourTableName替换成你实际使用的表名,确保列名和你的数据一致:
Custom Amount = VAR CurrentHeader = SELECTEDVALUE('YourTableName'[Header]) VAR CurrentSubheader = SELECTEDVALUE('YourTableName'[Subheader]) VAR CurrentSubheader2 = SELECTEDVALUE('YourTableName'[Subheader2]) RETURN // 处理最底层(C、D):直接返回对应Amount IF( NOT ISBLANK(CurrentSubheader2), SUM('YourTableName'[Amount]), // 处理中间层(B):计算C - D IF( NOT ISBLANK(CurrentSubheader), CALCULATE(SUM('YourTableName'[Amount]), 'YourTableName'[Subheader2] = "C") - CALCULATE(SUM('YourTableName'[Amount]), 'YourTableName'[Subheader2] = "D"), // 处理顶层(A):继承B的结果 CALCULATE([Custom Amount], 'YourTableName'[Subheader] = "B") ) )
代码逻辑解释
- 变量定义:通过
SELECTEDVALUE获取当前上下文的各层级字段值,用来判断当前处于矩阵的哪一层 - 最底层判断:如果当前显示的是Subheader2(C或D),直接返回对应行的Amount(因为每个Subheader2对应唯一值,SUM结果就是原始数值)
- 中间层计算:当显示的是Subheader(B)时,分别筛选出C和D的Amount,做减法运算
- 顶层继承:当显示的是Header(A)时,直接调用中间层B的计算结果,保证A和B的数值一致
效果验证
将这个Custom Amount度量放到矩阵的Values区域,行区域按Header → Subheader → Subheader2的顺序添加,就能得到你想要的结果:
| Amount |
|---|
| -10 |
| -10 |
| 10 |
| 20 |
内容的提问来源于stack exchange,提问作者apollo89
相关产品推荐
相关产品推荐

