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

基于年度重置的累计值列计算当月值

问题:按组计算月度差值(累计值减上月累计值)

现有数据与需求

现有表格包含三列:group(分组)、Period(年月格式)、RunningValue(累计值),每年1月的累计值会重置为当月实际值。

需要新增MonthlyValue列,计算逻辑:

  • 1月直接取RunningValue(因年初重置)
  • 其他月份按group分组,用当月RunningValue减去同组上月的RunningValue

尝试过的DAX代码

代码1(语法不完整)

MonthlyValue = CALCULATE(Table[RunningValue], PREVIOUSMONTH(Table[Period])

代码2(未生效)

MonthlyValue = 
VAR Cumulative=Table[RunningValue]
VAR PreviousCumulative=
    CALCULATE(
        [RunningValue], 
        DATEADD(Table[Period], -1, MONTH)
    )
RETURN Cumulative-PreviousCumulative

以上代码仅1月结果正确,其余月份得到的结果与RunningValue一致,无法算出正确差值。

解决方案

问题出在未保留group的上下文,导致DATEADD/PREVIOUSMONTH没有筛选同组的上月数据。以下两种DAX表达式可解决:

方案1:明确筛选同组上月数据

MonthlyValue = 
VAR CurrentGroup = Table[group]
VAR CurrentPeriod = Table[Period]
VAR PreviousPeriod = EDATE(CurrentPeriod, -1)
VAR PreviousCumulative = 
    CALCULATE(
        MAX(Table[RunningValue]),
        Table[group] = CurrentGroup,
        Table[Period] = PreviousPeriod
    )
RETURN
    IF(
        MONTH(CurrentPeriod) = 1,
        Table[RunningValue],
        Table[RunningValue] - PreviousCumulative
    )

方案2:用ALLEXCEPT保留分组上下文

MonthlyValue = 
VAR PreviousCumulative =
    CALCULATE(
        Table[RunningValue],
        PREVIOUSMONTH(Table[Period]),
        ALLEXCEPT(Table, Table[group])
    )
RETURN
    IF(
        MONTH(Table[Period]) = 1,
        Table[RunningValue],
        Table[RunningValue] - PreviousCumulative
    )

说明

  • 方案1通过变量存储当前分组和日期,直接筛选同组上月的累计值,逻辑清晰不易出错
  • 方案2用ALLEXCEPT清除除group外的所有上下文,确保PREVIOUSMONTH只返回同组的上月数据
  • 两个方案都会自动处理1月的特殊情况,直接返回累计值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:03:17