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

求助:去年同期周累计销售额DAX度量值计算结果异常

问题排查与修正方案

原公式的问题点

  • ALLSELECTED('Date')滥用:这个函数会清除当前所有的日期筛选条件,导致SAMEPERIODLASTYEAR无法基于你选中的日期范围计算去年同期,反而会用整个日期表的最后日期来计算,结果自然不对。
  • 上下文传递错误:原Weekly Sales里的CurrentDate是基于当前筛选的今年日期,即使加了SAMEPERIODLASTYEAR,也没把日期上下文切换到去年,计算的还是今年的周累计数值。

修正后的DAX公式

方案1:直接重写去年同期周累计度量值

Week To Date Sales LY:= 
VAR 当前日期 = LASTDATE('Date'[Date])
VAR 去年同期日期 = DATEADD(当前日期, -1, YEAR)
VAR 去年同期周天数 = WEEKDAY(去年同期日期, 3) // 3表示周一为一周的第0天
VAR 去年同期周起始日 = DATEADD(去年同期日期, -1*去年同期周天数, DAY)
RETURN
CALCULATE(
    DetailSales[Sales],
    DATESBETWEEN('Date'[Date], 去年同期周起始日, 去年同期日期)
)

方案2:重构可重用的周累计度量值

先修改原Weekly Sales,让它能正确响应日期上下文:

周累计销售额:= 
VAR 当前上下文日期 = LASTDATE('Date'[Date])
VAR 周内天数偏移 = WEEKDAY(当前上下文日期, 3)
RETURN
CALCULATE(
    DetailSales[Sales],
    DATESBETWEEN(
        'Date'[Date],
        DATEADD(当前上下文日期, -1*周内天数偏移, DAY),
        当前上下文日期
    )
)

然后去年同期度量值就可以直接复用:

去年同期周累计销售额:= 
CALCULATE(
    [周累计销售额],
    SAMEPERIODLASTYEAR('Date'[Date])
)

说明

两种方案都能解决问题:

  • 方案1更直接,明确计算出去年同期的周起始和结束日期,避免上下文传递的坑
  • 方案2通过重构基础度量值,让代码更复用,后续如果要做其他同期对比(比如前年)也更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:53:33