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

如何基于筛选日期计算前一日销售额总和?DAX函数故障排查

问题:昨日销售额DAX公式返回空值的解决方法

需要计算当前筛选日期及其前一日的销售额总和,以此推导销售增长KPI。现有表格包含Date和Sales字段,当前日销售额的DAX公式(current_day_sales)可正常返回结果,但使用PREVIOUSDAY函数或MAX日期减1的VAR变量编写的last_day_sales公式均返回空值。所有列格式正确且代码无报错,寻求解决方法。

模拟表格数据

DateSales
11/08/2023$850.00
11/08/2023$900.00
11/09/2023$150.00
11/09/2023$250.00
11/09/2023$300.00

已尝试的DAX代码

1. 使用PREVIOUSDAY

last_day_sales = 
CALCULATE(
    SUM('Database'[Sales]),
       PREVIOUSDAY('Database'[Date].[Date])
)

2. 使用MAX变量

last_day_sales = 
VAR YestSales = 
   MAX('Database'[Date].[Date]) - 1
RETURN
   CALCULATE(SUM('Database'[Sales]), 'Database'[Date] = YestSales)

解决方法

1. 引入独立日期表(核心原因)

PREVIOUSDAY等时间智能函数依赖标记为日期表的独立日期表,无法直接使用事实表中的Date列。步骤如下:

  • 创建日期表:
DateTable = 
CALENDAR(
    MIN('Database'[Date]),
    MAX('Database'[Date])
)
  • 在模型视图中右键点击DateTable,选择「标记为日期表」→「标记为日期表」
  • 建立DateTable[Date]与Database[Date]的关联关系

修改后的昨日销售额公式:

last_day_sales = 
CALCULATE(
    SUM('Database'[Sales]),
    PREVIOUSDAY(DateTable[Date])
)

2. 修复MAX变量写法问题

如果不想用日期表,需确保日期匹配逻辑正确,处理可能的时间部分:

last_day_sales = 
VAR CurrentMaxDate = DATE(YEAR(MAX('Database'[Date])), MONTH(MAX('Database'[Date])), DAY(MAX('Database'[Date])))
VAR PreviousDate = CurrentMaxDate - 1
RETURN
CALCULATE(
    SUM('Database'[Sales]),
    DATE(YEAR('Database'[Date]), MONTH('Database'[Date]), DAY('Database'[Date])) = PreviousDate
)
  • 用DATE()函数提取纯日期部分,避免因Date列含时间导致匹配失败
  • 确保筛选的日期前一日存在于事实表中(如模拟数据中11/09/2023的前一日11/08/2023有数据)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:24