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
相关产品推荐
相关产品推荐

