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

如何让SAMEPERIODLASTYEAR仅返回当前年度存在的产品上年销售额?

解决DAX计算上年同期销售额时筛选当前年度有销售产品的问题

嘿,这个场景我之前踩过坑!你现在的问题核心是:原来的DAX公式只切换到了上年同期的时间维度,但没有限制产品必须在当前年度有销售记录,所以才会把今年没卖的产品3也带出来。咱们来调整公式解决这个问题:

核心思路

先筛选出「当前年度有销售的产品集合」,再基于这个集合去计算它们的上年同期销售额,这样就能自动排除今年无销售的产品了。

具体解决方案

方法一:用变量先圈定当前年度有销售的产品(可读性强)

SamePeriodSalesLastYear = 
-- 第一步:定义变量,找出当前年度有销售的产品
VAR CurrentYearActiveProducts = 
    FILTER(
        ALL(Product[Product]), -- 取所有产品维度
        CALCULATE([Sum of ProductSales], DATESYTD(D_DATE[DATE])) > 0 -- 筛选今年YTD有销售的
    )
-- 第二步:基于筛选后的产品集合计算上年同期销售额
RETURN
CALCULATE(
    [Sum of ProductSales],
    SAMEPERIODLASTYEAR(D_DATE[DATE]), -- 切换到上年同期时间
    CurrentYearActiveProducts -- 只保留今年有销售的产品
)

方法二:直接在CALCULATE里加筛选条件(更简洁)

如果觉得变量有点繁琐,也可以把筛选逻辑直接嵌入CALCULATE的筛选参数里:

SamePeriodSalesLastYear = 
CALCULATE(
    [Sum of ProductSales],
    SAMEPERIODLASTYEAR(D_DATE[DATE]),
    -- 筛选条件:当前产品在本年度有销售记录
    FILTER(
        VALUES(Product[Product]),
        CALCULATE([Sum of ProductSales], DATESYTD(D_DATE[DATE])) > 0
    )
)

适配报表筛选的灵活版本

如果你的报表是通过切片器等方式选择「当前时间段」(不是固定自然年),可以把DATESYTD换成ALLSELECTED(D_DATE[DATE]),确保筛选的是用户所选时间段内有销售的产品:

SamePeriodSalesLastYear = 
CALCULATE(
    [Sum of ProductSales],
    SAMEPERIODLASTYEAR(D_DATE[DATE]),
    FILTER(
        VALUES(Product[Product]),
        CALCULATE([Sum of ProductSales], ALLSELECTED(D_DATE[DATE])) > 0
    )
)

效果验证

调整后,产品3因为当前年度没有销售记录,会被自动排除,最终结果就会是你期望的:

SamePeriodSalesLastYear
$10
$12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:12:10