如何用DAX按账户(acc.num)和期间计算余额的行级差异?
问题描述
现有如下数据表格:
| acc.num | Balance | Period |
|---|---|---|
| 1234 | 200 | 1 |
| 2345 | 300 | 1 |
| 1234 | 300 | 2 |
| 2345 | 200 | 2 |
需求:使用DAX按每个账户编号(acc.num)计算不同期间的余额行级差异,例如账户1234的期间2余额300减去期间1余额200,结果为100。
尝试过将表按期间拆分,但不知道如何按行实现该计算。
DAX解决方案
方法1:添加计算列
如果需要在原表中直接新增一列显示余额差异,可使用LOOKUPVALUE函数实现,写法简洁直接:
余额差异 = VAR 当前期间 = '你的表名'[Period] VAR 上一期间余额 = LOOKUPVALUE( '你的表名'[Balance], '你的表名'[acc.num], '你的表名'[acc.num], '你的表名'[Period], 当前期间 - 1 ) RETURN '你的表名'[Balance] - 上一期间余额
- 逻辑:先获取当前行的期间值,再匹配同一账户下上一期间的余额,最后用当前余额减去上一期间余额得到差异;期间1的行会返回空白(无对应上一期间数据)
方法2:创建度量值(适配报表可视化)
如果是在Power BI报表中动态计算差异,推荐使用度量值,适配筛选上下文变化:
余额差异_度量值 = VAR 当前期间 = SELECTEDVALUE('你的表名'[Period]) VAR 上一期间余额 = CALCULATE( SUM('你的表名'[Balance]), ALLEXCEPT('你的表名', '你的表名'[acc.num]), '你的表名'[Period] = 当前期间 - 1 ) RETURN SUM('你的表名'[Balance]) - 上一期间余额
- 逻辑:
SELECTEDVALUE获取当前报表上下文的期间值,ALLEXCEPT保留账户筛选条件的同时移除其他筛选,精准定位同一账户的上一期间余额,最后计算差值
最终效果示例
添加计算列后,表格会更新为:
| acc.num | Balance | Period | 余额差异 |
|---|---|---|---|
| 1234 | 200 | 1 | 空白 |
| 2345 | 300 | 1 | 空白 |
| 1234 | 300 | 2 | 100 |
| 2345 | 200 | 2 | -100 |
内容的提问来源于stack exchange,提问作者LUIS E BAERGA-GONZALEZ
相关产品推荐
相关产品推荐

