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

PowerBI中DAX滚动3个月平均度量值计算错误求助

问题分析与DAX修正

你的DAX公式核心问题在于ID总数的计算逻辑不符合预期:

  • 原公式用DISTINCTCOUNT('Table'[ID])计算的是滚动3个月内不重复的唯一ID总数,但你的需求是把这三个月的每月独立统计的ID数直接相加(即使同一ID出现在多个月份,每个月都算一次)。

修正后的DAX公式

方案1(推荐使用独立日期表)

如果你的模型中有标准日期表(推荐建模方式),可以用以下度量值:

Trailing 3 Month Action % = 
VAR CurrentMonthEnd = EOMONTH(MAX('Date'[Date]), 0)
VAR RollingStart = EOMONTH(CurrentMonthEnd, -3) + 1
-- 筛选最近3个完整自然月
VAR RollingPeriod = DATESBETWEEN('Date'[Date], RollingStart, CurrentMonthEnd)

-- 计算滚动3个月的行动总数
VAR TotalRollingActions = CALCULATE(SUM('Table'[Action_ind]), RollingPeriod)
-- 计算滚动3个月的ID数总和(每个月的ID数相加)
VAR TotalRollingIDs = 
    CALCULATE(
        SUMX(VALUES('Date'[Month]), DISTINCTCOUNT('Table'[ID])),
        RollingPeriod
    )

RETURN DIVIDE(TotalRollingActions, TotalRollingIDs, 0)

方案2(无独立日期表)

如果没有单独的日期表,直接基于原表的日期字段调整:

Trailing 3 Month Action % = 
VAR CurrentMonthEnd = EOMONTH(MAX('Table'[Date]), 0)
VAR ThreeMonthsPriorEnd = EOMONTH(CurrentMonthEnd, -3)
-- 筛选最近3个完整自然月的日期范围
VAR RollingFilter = 'Table'[Date] > ThreeMonthsPriorEnd && 'Table'[Date] <= CurrentMonthEnd

VAR TotalRollingActions = CALCULATE(SUM('Table'[Action_ind]), RollingFilter)
-- 按月份分组,计算每个月的ID数后求和
VAR TotalRollingIDs = 
    SUMX(
        VALUES(FORMAT('Table'[Date], "YYYYMM")), -- 按年月唯一值分组
        CALCULATE(DISTINCTCOUNT('Table'[ID]), RollingFilter)
    )

RETURN DIVIDE(TotalRollingActions, TotalRollingIDs, 0)

关键修正点说明

  1. 用EOMONTH锁定自然月区间:确保筛选的是完整的三个月,避免因当月日期未到月底导致的区间偏差。
  2. 用SUMX迭代计算每月ID数总和:通过按年月分组,对每个月单独计算DISTINCTCOUNT('Table'[ID])后再求和,完全匹配你手动计算的逻辑(三月=(195+147+182)/(350+240+321))。
  3. 替换原DISTINCTCOUNT的全局统计:原公式的全局DISTINCTCOUNT会剔除跨月重复的ID,导致分母偏小、结果偏高,修正后分母为各月ID数的累加值,与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:35:00