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

如何用DAX实现带唯一标识符与近31天筛选的销售值求和?

DAX计算列实现近31天同唯一标识符的销售值求和

核心DAX表达式

直接匹配你Excel中SUMIFS逻辑的计算列公式:

近31天销售总和 = 
VAR 当前ID = '销售表'[唯一标识符]
VAR 当前日期 = '销售表'[日期]
RETURN
CALCULATE(
    SUM('销售表'[待求和值]),
    '销售表'[唯一标识符] = 当前ID,
    '销售表'[日期] >= 当前日期 - 30,
    '销售表'[日期] <= 当前日期,
    REMOVEFILTERS('销售表')
)

关键细节解释

  1. VAR变量定义:将当前行的唯一标识符和日期存为变量,避免重复读取列值,提升计算效率。
  2. CALCULATE的筛选逻辑:直接在CALCULATE参数中写筛选条件,比嵌套FILTER函数更高效——CALCULATE会利用引擎的列索引优化,减少逐行扫描。
  3. REMOVEFILTERS的作用:这是解决你之前尝试失败的核心。计算列默认处于当前行的上下文筛选中,不加这个函数的话,CALCULATE只会扫描当前行,无法匹配其他同ID的历史行。添加REMOVEFILTERS('销售表')后,会清除当前行的表级筛选,让引擎扫描整个表中符合ID和日期范围的所有行。

带错误处理的版本

如果需要像Excel中IFERROR那样返回空字符串(而非DAX默认的BLANK值),可以调整为:

近31天销售总和 = 
VAR 当前ID = '销售表'[唯一标识符]
VAR 当前日期 = '销售表'[日期]
VAR 计算结果 = 
CALCULATE(
    SUM('销售表'[待求和值]),
    '销售表'[唯一标识符] = 当前ID,
    '销售表'[日期] >= 当前日期 - 30,
    '销售表'[日期] <= 当前日期,
    REMOVEFILTERS('销售表')
)
RETURN
IF(ISBLANK(计算结果), "", 计算结果)

注:DAX中推荐返回BLANK()而非空字符串,因为BLANK()能更好地兼容后续聚合计算,若业务明确需要空字符串再替换。

性能优化建议

  • 给[唯一标识符]和[日期]列建立索引:在Power BI的表视图中,选中列后在属性面板开启“列索引”,大幅加速筛选匹配。
  • 使用独立日期表:如果数据量较大,建议创建单独的日期维度表并与销售表建立关系,改用DATESBETWEEN函数筛选日期,性能会更优:
近31天销售总和 = 
VAR 当前ID = '销售表'[唯一标识符]
VAR 当前日期 = '销售表'[日期]
RETURN
CALCULATE(
    SUM('销售表'[待求和值]),
    '销售表'[唯一标识符] = 当前ID,
    DATESBETWEEN('日期表'[日期], 当前日期 - 30, 当前日期),
    REMOVEFILTERS('销售表')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:58:28