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

DAX中PARALLELPERIOD函数返回空值,如何获取上一年度总销售额?

解决上一年度总销售额计算列返回空的问题

问题原因

你的公式返回空值,核心问题在于时间智能函数依赖标记的日期表,直接使用Orders表的OrderDate列作为PARALLELPERIOD的参数,无法正确生成有效的时间筛选上下文;同时计算列的逐行上下文特性,也会导致CALCULATE无法正确关联上一年的订单数据。

解决步骤

1. 建立并标记日期表

时间智能函数(如PARALLELPERIOD、SAMEPERIODLASTYEAR)必须依赖一个独立的日期表,且该表需被标记为“日期表”:

DateTable = CALENDAR(MIN(Orders[OrderDate]), MAX(Orders[OrderDate]))

在Power BI中,选中DateTable后,点击建模选项卡 → 标记为日期表 → 标记为日期表,确保Orders[OrderDate]与DateTable[Date]建立一对多的关系(Orders表为多端)。

2. 调整计算列公式

基于日期表,使用SAMEPERIODLASTYEAR替代PARALLELPERIOD,改写计算列:

PreviousYearSales = 
CALCULATE(
    SUM('Order Details'[Sales]),
    SAMEPERIODLASTYEAR(DateTable[Date])
)

该公式会在每个订单行的上下文里,计算上一年度所有订单的总销售额。

3. 更推荐:使用度量值(动态计算)

如果你的需求是在报表中展示上一年度总销售额,而非在Orders表中添加静态计算列,更适合使用度量值:

Previous Year Total Sales = 
CALCULATE(
    SUM('Order Details'[Sales]),
    SAMEPERIODLASTYEAR(DateTable[Date])
)

度量值会根据报表的筛选上下文动态计算,比计算列更灵活高效。

额外说明

若无需日期表,也可通过直接筛选年份的方式实现(适合简单场景):

PreviousYearSales = 
VAR CurrentYear = YEAR(Orders[OrderDate])
RETURN
CALCULATE(
    SUM('Order Details'[Sales]),
    YEAR(Orders[OrderDate]) = CurrentYear - 1
)

但这种方式不支持复杂的时间筛选(如季度、月度同期),仅适用于年度汇总场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:51:07