Power BI年度重置累计销售额:保留切片器过滤需求
Power BI年度重置累计销售额解决方案(保留所有筛选)
核心问题分析
你当前的DAX度量值使用ALL('fact_sales')清除了事实表的所有筛选,导致部门、区域等切片器失效。需要调整筛选逻辑,只控制日期范围和年度累计规则,同时保留其他维度的筛选。
前提准备
确保你的日历表(Calendar)与销售事实表(fact_sales)通过日期列(或年月列YM)建立了正确的关联关系,且日历表不能断开连接。
解决方案DAX代码
1. 基础销售额度量值(若已存在可跳过)
Sales Toys = SUM(fact_sales[SalesAmount])
2. 年度重置+近12个月累计度量值
Sales Cumulated = VAR MaxSelectedDate = MAX('Calendar'[Date]) -- 获取切片器选择的最后日期 VAR Start12MDate = EDATE(MaxSelectedDate, -11) -- 计算近12个月的起始日期 RETURN CALCULATE( [Sales Toys], -- 筛选近12个月的日期范围 DATESBETWEEN('Calendar'[Date], Start12MDate, MaxSelectedDate), -- 实现年度重置的累计(本年至今) DATESYTD('Calendar'[Date]), -- 保留日历表的切片器筛选,同时继承其他维度的筛选 ALLSELECTED('Calendar') )
适配年月(YM)格式的版本
如果你的切片器使用的是YYYYMM格式的年月列(如202508),可将代码调整为:
Sales Cumulated (YM Version) = VAR SelectedYM = MAX('Calendar'[YM]) VAR SelectedDate = DATE(LEFT(SelectedYM,4), RIGHT(SelectedYM,2), 1) VAR Start12MDate = EDATE(SelectedDate, -11) VAR Start12MYM = FORMAT(Start12MDate, "YYYYMM") RETURN CALCULATE( [Sales Toys], FILTER( ALLSELECTED('Calendar'), 'Calendar'[YM] >= Start12MYM && 'Calendar'[YM] <= SelectedYM && 'Calendar'[Year] = SELECTEDVALUE('Calendar'[Year]) && 'Calendar'[YM] <= SELECTEDVALUE('Calendar'[YM]) ) )
代码逻辑说明
- 近12个月范围控制:通过
EDATE计算切片器所选日期的前11个月,得到近12个月的起始点,用DATESBETWEEN或筛选条件锁定数据范围。 - 年度重置累计:使用
DATESYTD(或按年份筛选)实现自然年的累计重置,确保每年1月累计值从0开始重新计算。 - 保留外部筛选:
ALLSELECTED('Calendar')仅调整日历表的筛选上下文,不会清除部门、区域、产品组等其他维度的筛选,保证页面其他切片器正常生效。
验证要点
- 选择
2025-08时,图表应显示2024-09至2025-08的数据,其中2025年的累计值从2025-01开始累加,2024年的9-12月显示2024年的累计值(从2024-01到对应月份)。 - 切换部门、区域等切片器,检查累计值是否同步更新为对应维度的数据。
内容的提问来源于stack exchange,提问作者KnowNothing
相关产品推荐
相关产品推荐

