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

如何修正DAX中的MTD计算?解决多切片器下的统计偏差问题

解决方案:修正MTD统计的DAX表达式

问题分析

你的DAX表达式存在筛选上下文冲突:ALLSELECTED(Table['Date'])会保留切片器选中的日期(如案例2的8月3日),导致计算时仅统计该日期行内的选中项目数据。但你需要的是截止到选中日期的当月所有日期中,符合项目筛选条件的所有数据,因此需要调整筛选逻辑,移除日期切片器的直接筛选,同时保留项目筛选和MTD日期范围。

原始数据表格

日期项目
8月1日苹果
8月1日橙子
8月1日香蕉
8月2日苹果
8月2日橙子
8月3日苹果

切片器设置:

  • 切片器1:日期(单选)
  • 切片器2:项目(多选)

修正后的DAX表达式

方案一:使用CALCULATE+DATESBETWEEN

MTD数量 = 
VAR 选中截止日期 = MAX(Table[日期])
RETURN
CALCULATE(
    COUNT(Table[项目]),
    // 限定统计范围为当月起始日到选中截止日
    DATESBETWEEN(Table[日期], STARTOFMONTH(选中截止日期), 选中截止日期),
    // 保留项目切片器的选择
    ALLSELECTED(Table[项目]),
    // 移除日期切片器的筛选,确保能统计整个MTD范围内的数据
    ALL(Table[日期])
)

方案二:简化版TOTALMTD写法

MTD数量 = 
TOTALMTD(
    COUNT(Table[项目]),
    Table[日期],
    // 移除日期切片器筛选,保留项目筛选
    ALL(Table[日期]),
    ALLSELECTED(Table[项目])
)

验证效果

案例2中,切片器选择8月3日+苹果、橙子时:

  • 日期范围限定为8月1日-8月3日
  • 保留项目筛选(苹果、橙子)
  • 统计结果为:苹果3条(8.1/8.2/8.3)+橙子2条(8.1/8.2)=5,完全符合预期。

核心逻辑说明

  • ALL(Table[日期]):清除日期切片器带来的行级筛选,确保能访问整个MTD范围内的所有日期数据
  • ALLSELECTED(Table[项目]):保留项目切片器的选择,仅统计选中的项目
  • DATESBETWEEN/TOTALMTD:负责限定统计的MTD日期区间,确保只计算到选中日期为止的当月数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:52:37