You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI如何实现计算列上一行值减当前行Demand Qty存入下一行

问题说明

当前配置
表中CntrlRunTot为硬编码值列,需新建计算列实现以下逻辑:

  • 仅取CntrlRunTot列首个值188535作为计算起点,不依赖该列其他行的硬编码值
  • 递推规则:计算列当前行值 = 计算列上一行值 - 上一行对应的Demand Qty值
  • 结果存储规则:每一行计算得到的结果存入下一行,例:初始值188535减去所在行的Demand Qty 2976得到185559,结果存入188535所在行的下一行
  • 现有Running Total计算列依赖整列CntrlRunTot值,不符合需求。
实现方法

前置准备

计算列逐行递推的前提是存在可唯一确定行先后顺序的严格递增字段(如序号、日期、自增ID),如果表中没有该字段,先进入Power Query编辑器,按你需要的递推顺序排列表行后,添加从1开始的递增索引列,下文示例公式中用[Index]指代该排序字段,用[你的表名]指代你实际操作的表名,替换成你自己的实际字段/表名即可。

DAX计算列公式

CustomRunningTotal = 
VAR MinIndex = MIN(ALL('你的表名'[Index]))
VAR StartValue = CALCULATE(MAX('你的表名'[CntrlRunTot]), '你的表名'[Index] = MinIndex)
VAR CurrentIndex = '你的表名'[Index]
VAR TotalDeductBefore = CALCULATE(
    SUM('你的表名'[Demand Qty]),
    FILTER(ALL('你的表名'), '你的表名'[Index] < CurrentIndex)
)
RETURN
StartValue - TotalDeductBefore

逻辑说明

  • 第一行(索引最小行):之前行的累计扣减额为0,直接返回初始值188535
  • 第二行:累计扣减额为第一行的Demand Qty 2976,返回188535-2976=185559,和示例要求完全一致
  • 后续行:累计扣减额为当前行之前所有行的Demand Qty总和,计算结果等价于上一行的计算列值减去上一行的Demand Qty,完全匹配递推逻辑
  • 该写法无循环依赖问题,计算性能远高于递归引用计算列自身的写法,且全程仅读取CntrlRunTot列的第一个初始值,不会调用该列其他行的硬编码值。

内容的提问来源于stack exchange,提问作者claired1071

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:39:18