DAX计算问题:基于上一行计算值求电池剩余容量
修正DAX计算电池剩余容量的问题
原DAX的核心错误是直接累加所有历史ChargeVariation并截断到上限,而非基于上一步已经修正后的ResidualCapacity进行递推计算。这种逻辑会忽略中间步骤中因达到上限而被截断的数值,导致后续放电计算结果错误。
修正后的DAX代码
ResidualCapacity = VAR UpperBound = 80 VAR CurrentState = 'Table'[ChangeState] -- 获取上一行的剩余容量,初始行无前置值时返回0 VAR PreviousResidual = CALCULATE( MAX('Table'[ResidualCapacity]), FILTER( 'Table', 'Table'[ChangeState] = CurrentState - 1 ) ) VAR CurrentValue = IF( CurrentState = 1, -- 初始行:直接取充电量与上限的较小值 MIN('Table'[ChargeVariation], UpperBound), -- 后续行:用上一行剩余容量加当前变化,再限制不超过上限 MIN(PreviousResidual + 'Table'[ChargeVariation], UpperBound) ) RETURN CurrentValue
逻辑说明
- 初始行处理:当
ChangeState=1时,直接将ChargeVariation与上限80取较小值,得到初始剩余容量。 - 递推计算:对于后续每一行,先获取上一行已计算完成的
ResidualCapacity,加上当前的ChargeVariation后,再与上限80取较小值,确保结果不会超过上限。 - 正确性验证:以第5行为例,上一行剩余容量是70,加上当前
-5得到65,小于80,最终返回65,符合预期结果。
内容的提问来源于stack exchange,提问作者pofferbacco
相关产品推荐
相关产品推荐

