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

Power BI中带Country筛选的销售额同比差异计算问题(年含13周期)

Power BI 非标准周期销售额同比差异计算问题解决

问题背景

原始数据包含Year、Period、Country、Sales Amount列,每年有13个周期,且各年对应周期日期不统一,无法使用SamePeriodLastYear等时间智能函数。需实现支持Country筛选的销售额同比差异计算,复刻Excel示例中的矩阵和折线图。

现有度量值及问题

已创建以下两个度量值:

Sales Amount PY = 
VAR CurrentYear = MAX('raw data'[Year])
VAR CurrentPeriod = MAX('raw data'[Period])
RETURN
CALCULATE(
    [Sales Amount],
    FILTER(
        ALL('raw data'),
        'raw data'[Year] = CurrentYear - 1 &&
        'raw data'[Period] = CurrentPeriod
    )
)

% Difference vs PY = Divide([Sales Amount] - [Sales Amount PY],[Sales Amount PY])
  • 未添加任何筛选时,同比差异结果准确;
  • 筛选特定Country后,结果失真,核心原因是ALL('raw data')清除了所有筛选上下文,包括Country的筛选条件,导致计算上一年数据时混入了所有国家的销售额。

解决方案

需保留Country的筛选上下文,仅移除Year和Period的筛选,以下两种修改方式均可解决问题:

方式一:使用ALLEXCEPT保留Country筛选

Sales Amount PY = 
VAR CurrentYear = MAX('raw data'[Year])
VAR CurrentPeriod = MAX('raw data'[Period])
RETURN
CALCULATE(
    [Sales Amount],
    ALLEXCEPT('raw data', 'raw data'[Country]),
    'raw data'[Year] = CurrentYear - 1,
    'raw data'[Period] = CurrentPeriod
)

ALLEXCEPT会保留Country列的筛选上下文,仅清除其他列(包括Year、Period)的筛选,确保计算上一年同周期数据时仅包含当前筛选国家的记录。

方式二:捕获当前Country筛选值并匹配

Sales Amount PY = 
VAR CurrentYear = MAX('raw data'[Year])
VAR CurrentPeriod = MAX('raw data'[Period])
VAR CurrentCountry = MAX('raw data'[Country])
RETURN
CALCULATE(
    [Sales Amount],
    FILTER(
        ALL('raw data'),
        'raw data'[Year] = CurrentYear - 1 &&
        'raw data'[Period] = CurrentPeriod &&
        'raw data'[Country] = CurrentCountry
    )
)

通过变量CurrentCountry捕获当前筛选的国家,在FILTER中添加国家匹配条件,确保上一年数据仅来自对应国家。

修改后,% Difference vs PY度量值无需调整,即可在筛选特定国家时返回准确的同比差异结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:12:43