PowerBI DAX问题:Matrix可视化中无法显示Opening类别目标值
问题排查与解决方案
原公式核心问题
- 无效筛选逻辑:你的Sales表所有行的
PeriodID均为2,但原公式里FILTER(Sales, Sales[PeriodID] = 1)强制筛选PeriodID=1的行,结果必然为空,导致Opening列无数据。 - 日期逻辑错误:
SELECTEDVALUE(Sales[Date])-1是对单日期做减1操作,和你需要的「按年份匹配2021/2022年数据」的需求完全不符。 - 关联筛选冲突:Period维度表与Sales表通过
PeriodID关联后,当选择Period维度的PeriodID=1时,默认会过滤掉Sales表所有数据(因为Sales只有PeriodID=2),原公式的REMOVEFILTERS没有针对性解决这个关联冲突。
修正后的DAX度量值
根据你的需求(Opening列显示2021年PeriodID=2数据,Closing列显示2022年PeriodID=2数据),提供两种实现方式:
方式1:硬编码年份(适用于Period年份固定的场景)
Sales_Total = VAR Current_Period = SELECTEDVALUE(Period[PeriodID]) VAR Target_Year = SWITCH( Current_Period, 1, 2021, // Opening对应2021年 2, 2022 // Closing对应2022年 ) RETURN CALCULATE( SUM(Sales[Value]), Sales[PeriodID] = 2, // 固定取Sales表中PeriodID=2的数据 YEAR(Sales[Date]) = Target_Year, REMOVEFILTERS(Period) // 清除Period维度的默认关联筛选,确保能正确取数 )
方式2:基于Period表年份字段(更灵活,适用于Period表有Year列的场景)
假设Period表包含PeriodID和Year字段(如PeriodID=1对应Year=2021,PeriodID=2对应Year=2022):
Sales_Total = VAR Current_Period = SELECTEDVALUE(Period[PeriodID]) VAR Target_Year = CALCULATE( MAX(Period[Year]), Period[PeriodID] = IF(Current_Period=1,1,2) ) RETURN CALCULATE( SUM(Sales[Value]), Sales[PeriodID] = 2, YEAR(Sales[Date]) = Target_Year, REMOVEFILTERS(Period) )
关键逻辑说明
REMOVEFILTERS(Period):打破Period维度与Sales表的关联筛选,避免选择PeriodID=1时直接过滤掉Sales表所有数据。- 明确指定
Sales[PeriodID] = 2:因为你的Sales表只有该PeriodID的数据,确保取数范围正确。 - 按年份匹配:通过
YEAR(Sales[Date])关联目标年份,实现Opening/Closing列的跨年份取数。
内容的提问来源于stack exchange,提问作者lwyeo
相关产品推荐
相关产品推荐

