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

PowerBI中用DAX实现特定工作日的3个月滚动平均值动态度量

PowerBI动态计算特定工作日过去3个月平均值的DAX方案

需求背景

我有一张包含多维度、月份、工作日和金额字段的表,想要在PowerBI中创建一个DAX度量,计算特定工作日过去3个月的金额平均值。用SQL的AVG OVER (PARTITION BY)能实现类似逻辑,但需要这个度量能随用户筛选不同维度动态变化。我是DAX新手,未在网上找到对应解决方案。

补充测试情况

  • 尝试过相关方案,但去掉除以3的部分后结果与当前工作日数值一致;筛选工作日8时结果不符合预期。
  • 示例表中,查看工作日5的总计,预期结果为49.3(即148÷3个月)。

解决方案DAX度量

以下是满足需求的DAX代码,核心逻辑是锁定当前工作日上下文,同时保留用户筛选的维度,计算过去3个月的平均值:

过去3个月特定工作日平均值 = 
VAR CurrentWorkDay = SELECTEDVALUE('你的表名'[工作日])
VAR CurrentMonth = MAX('你的表名'[月份])
-- 筛选过去3个月(含当前月)的范围
VAR Last3MonthsRange = 
    FILTER(
        ALL('你的表名'[月份]),
        '你的表名'[月份] > CurrentMonth - 3 && '你的表名'[月份] <= CurrentMonth
    )
-- 锁定目标工作日+过去3个月,同时保留用户选择的维度筛选
VAR TargetDataset = 
    CALCULATETABLE(
        '你的表名',
        Last3MonthsRange,
        '你的表名'[工作日] = CurrentWorkDay,
        ALLSELECTED('你的表名'[多维度])
    )
RETURN
    AVERAGEX(TargetDataset, '你的表名'[金额])

关键逻辑说明

  1. CurrentWorkDay:获取当前上下文选中的特定工作日(比如用户筛选的工作日5)
  2. CurrentMonth:获取当前视图中的最大月份
  3. Last3MonthsRange:划定过去3个月的时间范围(包含当前月)
  4. TargetDataset:筛选出符合时间范围、对应工作日的数据,同时保留用户对维度的筛选
  5. AVERAGEX:对筛选后的数据集逐行计算金额的平均值

适配日期格式月份的调整

如果你的月份字段是完整日期格式(而非数字),需替换时间筛选逻辑为DATEADD,示例:

过去3个月特定工作日平均值 = 
VAR CurrentWorkDay = SELECTEDVALUE('你的表名'[工作日])
VAR Last3MonthsRange = DATEADD('日期表'[日期], -3, MONTH)
VAR TargetDataset = 
    CALCULATETABLE(
        '你的表名',
        Last3MonthsRange,
        '你的表名'[工作日] = CurrentWorkDay,
        ALLSELECTED('你的表名'[多维度])
    )
RETURN
    AVERAGEX(TargetDataset, '你的表名'[金额])

注:需确保模型中存在正确关联的日期表,保证时间智能函数正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:07:30