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

Power BI中按星期几计算移动平均值及州筛选失效问题

Power BI 实现带州切片器的日期差值计算

问题背景

现有能源公司测量数据表,结构如下:

DateStateMeasurement
22/05/2024DF10
22/05/2024DF72
22/05/2024MG2
22/05/2024RJ22
15/05/2024DF99
15/05/2024MG33
15/05/2024MG88
08/05/2024DF33
08/05/2024RJ12
08/05/2024RJ77
01/05/2024DF88
01/05/2024DF1
01/05/2024DF32
24/04/2024MG22
24/04/2024RJ55
24/04/2024DF10

需搭建带州切片器的报表,计算当日平均测量值与过去4周内同星期几平均测量值的差值,要求:

  1. 未选州时:计算所有州的对应均值差值
  2. 选单个/多个州时:仅计算选中州的对应均值差值

此前尝试的方法无法正确将州切片器的筛选应用到过去4周均值的计算中。


解决方案

步骤1:创建日期表

Power BI中需使用独立日期表来处理星期几和日期范围逻辑,执行以下DAX创建:

DateTable = 
ADDCOLUMNS(
    CALENDAR(MIN('Measurements'[Date]), MAX('Measurements'[Date])),
    "Weekday", WEEKDAY([Date], 2), // 1=周一,7=周日,可按需调整
    "WeekNum", WEEKNUM([Date], 2)
)

创建后将DateTable[Date]与事实表Measurements[Date]建立一对多关系。

步骤2:编写核心DAX度量

1. 当日平均测量值

当日均值 = AVERAGE('Measurements'[Measurement])

2. 过去4周同星期几平均测量值

核心是通过KEEPFILTERS保留州切片器的筛选,同时精准筛选日期范围:

过去4周同星期均值 = 
VAR 当前日期 = MAX('DateTable'[Date])
VAR 当前星期几 = MAX('DateTable'[Weekday])
VAR 目标日期范围 = 
    FILTER(
        ALLSELECTED('DateTable'),
        'DateTable'[Date] >= 当前日期 - 28 && // 过去4周内
        'DateTable'[Date] < 当前日期 && // 排除当日
        'DateTable'[Weekday] = 当前星期几 // 匹配星期几
    )
RETURN
CALCULATE(
    AVERAGE('Measurements'[Measurement]),
    目标日期范围,
    KEEPFILTERS('Measurements'[State]) // 保留州切片器的筛选条件
)

3. 差值计算

Variation = [当日均值] - [过去4周同星期均值]

步骤3:搭建报表

  1. 添加州切片器:选择Measurements[State]字段
  2. 添加表格:选择DateTable[Date]和Variation度量
  3. 调整表格格式,匹配需求输出

逻辑说明

  • KEEPFILTERS确保计算过去4周均值时,不会忽略州切片器的筛选,完美适配「无选择/单个/多个州」三种场景
  • ALLSELECTED('DateTable')避免日期筛选器(若有)限制过去4周的日期范围,同时保留用户可能设置的全局日期筛选
  • 日期表的Weekday函数用参数2确保周一为星期起始,可根据业务需求调整为1(周日起始)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:41:03