Power BI创建DYNAMIC BALANCE度量值 正确计算支票簿动态余额
解决方案
前置准备
你首先需要在源表中新增一列自增行索引,确保要取的首行(2021/1/1 Dog Food对应行)的索引值为全表最小,可直接在Power Query中添加从0开始的索引列,列名设为RowIndex即可,解决同日期无法定位唯一首行的问题。
DAX度量值写法
DYNAMIC BALANCE = // 提取全表首行的初始余额 VAR InitialBalance = CALCULATE( VALUES('表名'[BALANCE]), FILTER(ALL('表名'), '表名'[RowIndex] = MIN('表名'[RowIndex])) ) // 累计当前行之前(排除首行)的所有AMOUNT值 VAR CumulativeAmount = CALCULATE( SUM('表名'[AMOUNT]), FILTER( ALLSELECTED('表名'), '表名'[RowIndex] > MIN('表名'[RowIndex]) && '表名'[RowIndex] <= MAX('表名'[RowIndex]) ) ) RETURN InitialBalance + CumulativeAmount
注意将代码中的表名替换为你实际的数据源表名称
计算验证
该逻辑完全匹配参考数据计算结果:
- 首行索引为0时,累计AMOUNT为0,返回初始余额980.00
- 第二行索引为1时,累计AMOUNT为-30.00,返回980-30=950.00
- 后续行依次累加对应区间AMOUNT,最终结果和原表BALANCE列完全一致
若需使用计算列而非度量值,可直接使用以下写法
DYNAMIC BALANCE 计算列 = VAR InitialBal = CALCULATE(VALUES('表名'[BALANCE]), '表名'[RowIndex] = 0) VAR CumAmt = CALCULATE( SUM('表名'[AMOUNT]), FILTER('表名', '表名'[RowIndex] > 0 && '表名'[RowIndex] <= EARLIER('表名'[RowIndex])) ) RETURN InitialBal + CumAmt
内容的提问来源于stack exchange,提问作者Jeff Kremer
相关产品推荐
相关产品推荐

