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

PowerBI中按SKU计算滚动求和最大值的DAX实现问题

问题描述

我正在用PowerBI和DAX计算滚动求和的最大值。已经通过DAX度量值实现了按SKU和提前期计算滚动求和(Rolling Sum),该度量值运行正常,表达式如下:

Rolling Sum = 
VAR CurrentDate = MAX(dgSalesHistoryTSLRollingSum[Delivery Date])
RETURN
CALCULATE(
SUM('dgSalesHistoryTSLRollingSum'[QtySupplied]),
DATESBETWEEN('dgSalesHistoryTSLRollingSum'[Delivery Date], CurrentDate - Max('dgSalesHistoryTSLRollingSum'[LeadTime(d)]), CurrentDate)
)

现有数据示例:

SKU交付日期提前期QtySuppliedRolling Sum
A28/03/202336868
A29/03/2023332100
A30/03/2023332132
A31/03/2023337169
A03/04/202331249
A04/04/202336577
A05/04/2023339116
B28/03/20233539539
B29/03/2023332343773
B30/03/202333284101
B31/03/2023323136414
B01/04/202337596634
B03/04/202334243496
B04/04/202335491732
B05/04/202333831356

需要得到每个SKU对应的滚动求和最大值:

SKUMax Rolling Sum
A169
B6634

尝试使用表达式Max Rolling Sum = CALCULATE(MAX(dgSalesHistoryTSLRollingSum[Rolling Sum]))时,报错提示找不到表中的“Rolling Sum”列或无法在该表达式中使用,请求解决。

解决方案

报错原因是Rolling Sum是度量值,并非表中的物理列,不能直接用MAX(表[Rolling Sum])的方式引用。要计算每个SKU的滚动求和最大值,需通过迭代函数遍历日期上下文,计算对应滚动求和值后取最大。

方法1:使用MAXX迭代函数

Max Rolling Sum = 
MAXX(
    VALUES(dgSalesHistoryTSLRollingSum[Delivery Date]),
    [Rolling Sum]
)
  • 逻辑:VALUES(dgSalesHistoryTSLRollingSum[Delivery Date])生成当前SKU下的所有唯一交付日期列表,MAXX遍历每个日期并计算对应Rolling Sum度量值,最终返回这些值中的最大值。

方法2:结合ALLEXCEPT保留SKU筛选上下文

Max Rolling Sum = 
CALCULATE(
    MAXX(
        ALLSELECTED(dgSalesHistoryTSLRollingSum[Delivery Date]),
        [Rolling Sum]
    ),
    ALLEXCEPT(dgSalesHistoryTSLRollingSum, dgSalesHistoryTSLRollingSum[SKU])
)
  • 逻辑:ALLEXCEPT保留SKU的筛选上下文,移除其他列的筛选;ALLSELECTED获取当前筛选范围内的所有交付日期,再通过MAXX计算每个日期的Rolling Sum并取最大值,适合需要保留外部筛选条件的场景。

以上两种方式均可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:56:36