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

Power BI 如何编写DAX实现逐行计算过去1年滚动累计值

问题原因诊断

原有公式存在2个核心逻辑错误,直接导致返回全量累计值:

  • 时间区间筛选逻辑写反:DT[Date] <= EARLIER(DT[1YearAgo]) 是取所有早于1年前的日期,自然返回的是从最早统计日期到1年前的全量累计,不是近1年的滚动区间
  • ALL(DT) 无差别清除了整张表的所有筛选,无法保留部门、产品类别等其他维度的筛选条件,不符合常规业务统计需求

正确写法分两种场景

场景1:在DT表中新建「过去1年滚动累计净利润」计算列

1年滚动累计_计算列 = 
CALCULATE (
    SUM ( DT[NetIncome] ),
    -- 按业务需求保留需要的筛选维度,不需要保留其他维度可直接替换为ALL(DT)
    ALLEXCEPT(DT, DT[部门], DT[产品类别]),
    -- 时间范围限定为当前行日期往前推1年 到 当前行日期
    DT[Date] >= EDATE(EARLIER(DT[Date]), -12),
    DT[Date] <= EARLIER(DT[Date])
)

如果你已经提前算好了DT[1YearAgo]列(值为对应Date字段往前1年的日期),也可以把EDATE(EARLIER(DT[Date]), -12)直接替换为EARLIER(DT[1YearAgo])


场景2:新建可动态筛选的「过去1年滚动累计净利润」度量值

1年滚动累计_度量值 = 
VAR 当前上下文最大日期 = MAX(DT[Date])
VAR 滚动区间起始日期 = EDATE(当前上下文最大日期, -12)
RETURN
CALCULATE (
    SUM(DT[NetIncome]),
    DATESBETWEEN(DT[Date], 滚动区间起始日期, 当前上下文最大日期),
    -- 保留除了日期以外的所有筛选条件
    ALLSELECTED(DT[Date])
)

度量值不需要使用EARLIER函数,直接通过变量获取当前上下文的日期即可,适配矩阵、折线图、切片器等所有可视化组件的筛选逻辑


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:36:06