财年同比(FY PY)计算问题:如何排除无数据的1900和2000年
解决财年同比(FY PY)计算中无数据年份显示问题
问题原因
当使用SAMEPERIODLASTYEAR计算上年值时,若日期维度包含1900、2000这类无对应事实数据的年份,DAX会尝试计算这些年份的同比值,但因无数据返回空值,而日期维度的年份仍会被展示出来。
解决方案一:修改度量值,动态过滤有效年份
直接在FY PY度量值中加入逻辑,仅计算事实表有数据范围内的年份同比,超出范围则返回空值(可视化工具通常会自动隐藏空值对应的年份):
FY PY Sales = VAR PYValue = IF(ISCROSSFILTERED('Posting Date'), CALCULATE([Sales Order Value Actual], SAMEPERIODLASTYEAR('Posting Date'[Date])), CALCULATE([Sales Order Value Actual], SAMEPERIODLASTYEAR('Order Date'[Date]))) // 获取事实表中订单日期/过账日期的有效年份范围 VAR MinDataYear = YEAR(MINX('Fact Table', MIN('Fact Table'[Order Date], 'Fact Table'[Posting Date]))) VAR MaxDataYear = YEAR(MAXX('Fact Table', MAX('Fact Table'[Order Date], 'Fact Table'[Posting Date]))) // 获取当前上下文的年份 VAR CurrentYear = IF(ISCROSSFILTERED('Posting Date'), SELECTEDVALUE('Posting Date'[Year]), SELECTEDVALUE('Order Date'[Year])) // 仅返回有效年份范围内的PY值 RETURN IF(CurrentYear - 1 >= MinDataYear && CurrentYear - 1 <= MaxDataYear && NOT(ISBLANK(PYValue)), PYValue, BLANK())
解决方案二:在日期维度标记有数据年份,通过筛选器排除无效年份
- 在Order Date和Posting Date维度表中分别创建计算列(以Order Date为例):
Has Data = VAR CurrentYear = 'Order Date'[Year] RETURN COUNTROWS( FILTER('Fact Table', YEAR('Fact Table'[Order Date]) = CurrentYear || YEAR('Fact Table'[Posting Date]) = CurrentYear ) ) > 0
- 在报表的可视化组件中,添加筛选条件:
Has Data = TRUE,即可自动隐藏1900、2000这类无数据的年份。
补充说明
如果日期维度中的1900、2000年是无效的系统默认日期(比如事实表中存在未填写日期的记录导致日期维度生成了这些年份),建议先清理事实表中的无效日期,再刷新日期维度,从根源减少无效日期的生成。
内容的提问来源于stack exchange,提问作者kittysmile
相关产品推荐
相关产品推荐

