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

如何在DAX中实现以每年6月1日为起点的滚动平均值?

解决以每年6月1日为起点的滚动平均值计算问题

问题背景

我有如下事实表:
事实表
在.pbix文件中已设置Year-Month过滤器,需要计算以每年6月1日为起点的滚动平均值,预期效果如下:

  • 选中6月时,结果为1(计算方式:1/1)
  • 选中7月时,结果为1(计算方式:2/2)
  • 选中8月时,结果为0.66(计算方式:2/3)
  • 选中9月时,结果为0.5(计算方式:2/4)
    以此类推。

当前使用的度量值未达到预期:

Users := CALCULATE(SUM(Users[Actual]), FILTER('Type', 'Type'[C Or A] IN {"C"} ))

Measure1 := AVERAGEX(VALUES('Date'[K_Date]), [Users])

Measure2 := CALCULATE([Measure1]  ,DATESYTD('Date'[Date],"31/05"))

问题分析

现有度量值的核心问题是:DATESYTD虽指定了财年结束日,但AVERAGEX仅对当前筛选的日期值取平均,没有实现从6月1日到选中月份的累积滚动计算——即分子应为6月至当前月的Users总和,分母为这段时间的月份数。

修正后的度量值

直接构建符合需求的滚动平均度量值,无需拆分多个中间度量:

滚动平均值(6月起)= 
VAR CurrentMonth = MAX('Date'[Date])
VAR FYStartDate = DATE(YEAR(CurrentMonth), 6, 1)
VAR SelectedPeriod = DATESBETWEEN('Date'[Date], FYStartDate, CurrentMonth)
VAR TotalUsers = CALCULATE(SUM(Users[Actual]), FILTER('Type', 'Type'[C Or A] = "C"), SelectedPeriod)
VAR MonthCount = COUNTROWS(DISTINCT('Date'[Year-Month]))
RETURN
DIVIDE(TotalUsers, MonthCount, 0)

关键说明:

  • FYStartDate:根据选中月份自动定位当年6月1日作为财年起始点
  • SelectedPeriod:筛选出从6月1日到当前选中月份的完整日期范围
  • TotalUsers:计算该范围内符合C类型条件的Actual总和
  • MonthCount:统计范围内的月份数量(若日期表无现成Year-Month列,可替换为DATEDIFF(FYStartDate, CurrentMonth, MONTH) + 1)
  • DIVIDE函数处理除数为0的异常情况,返回0避免报错

若你的日期表中K_Date代表每月固定日期(如每月1号),也可将MonthCount调整为COUNTROWS(VALUES('Date'[K_Date]), SelectedPeriod)来确保统计准确。

逻辑验证

对应预期场景:

  • 选中6月:TotalUsers=1,MonthCount=1 → 1/1=1
  • 选中7月:TotalUsers=1+1=2,MonthCount=2 → 2/2=1
  • 选中8月:TotalUsers=1+1+0=2,MonthCount=3 → 2/3≈0.66
  • 选中9月:TotalUsers=1+1+0+0=2,MonthCount=4 → 2/4=0.5

完全匹配预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:11