PowerBI/DAX中REMOVEFILTERS失效:财年最大周数计算问题
问题分析与解决方案
问题原因
添加FILTER(vwPBIDate,vwPBIDate[Fiscal Year Number]=2021)后出现异常的核心原因是:FILTER函数会先继承当前切片器的筛选上下文,再执行财年筛选。也就是说,切片器选1月时,FILTER只会在1月的日期范围内筛选2021财年的记录,自然只能取到该范围内的最大周数(比如5),而非整个2021财年的最大周数。
正确度量值写法
要实现“忽略切片器筛选,返回指定财年的最大周数”,需要确保先完全清除日期表的筛选,再锁定目标财年。以下两种方式均可实现:
方式1:用ALL清除筛选后直接指定财年
PriorYearNumberOfWeeks = CALCULATE( MAX(vwPBIDate[Week of Year]), ALL(vwPBIDate), vwPBIDate[Fiscal Year Number] = 2021 )
方式2:通过CALCULATETABLE先获取目标财年完整日期集
PriorYearNumberOfWeeks = VAR TargetFiscalYearDates = CALCULATETABLE( vwPBIDate, ALL(vwPBIDate), vwPBIDate[Fiscal Year Number] = 2021 ) RETURN MAXX(TargetFiscalYearDates, vwPBIDate[Week of Year])
补充说明
ALL(vwPBIDate)会完全清除日期表上的所有筛选(包括切片器选择),确保后续财年筛选基于整个日期表范围。- 方式1的写法比嵌套
FILTER更高效,因为它直接针对列筛选,而非遍历整个表。 - 如果需要动态匹配财年(比如取切片器所选年份的上一年),可将硬编码的
2021替换为动态表达式,例如SELECTEDVALUE(vwPBIDate[Fiscal Year Number]) - 1。
内容的提问来源于stack exchange,提问作者JStewart
相关产品推荐
相关产品推荐

