排除未完成年度的2015-2020年均订单量DAX计算方法
问题根因
原有Avg. Annual Orders公式通过VALUES('Date'[Year])获取数据覆盖的全部年份列表参与计算,会把统计时点(2021年3月7日)尚未结束、仅累计121单的2021年纳入平均值计算范围,最终结果和目标值存在明显偏差。
调整方案
方案1:固定区间过滤(适配当前明确的2015-2020计算需求)
直接在年份遍历环节增加过滤条件,仅保留2015到2020的完整年度参与计算,修改后的DAX如下:
Avg. Annual Orders = AVERAGEX( FILTER( VALUES('Date'[Year]), // 限定计算范围为2015-2020,剔除2021年数据 'Date'[Year] >= 2015 && 'Date'[Year] <= 2020 ), [Total Orders] )
结果验证:6个完整年度的总订单量为7978单,单年均值约1330单,和预期目标完全匹配。
方案2:自动识别完整年度(适配长期迭代的动态计算场景)
如果不想硬编码年份边界,可通过日期表自动筛选所有覆盖了完整自然年度的年份,未来数据更新后无需手动修改公式,修改后的DAX如下:
Avg. Annual Orders = AVERAGEX( FILTER( VALUES('Date'[Year]), // 判断对应年份是否覆盖到当年12月31日,仅保留完整年度 CALCULATE(MAX('Date'[Date])) >= DATE('Date'[Year], 12, 31) ), [Total Orders] )
这个方案的逻辑是:2021年在日期表中的最大日期为2021年3月7日,早于当年12月31日,会被自动排除在计算范围外;后续数据更新到2021年12月31日及以后时,2021年才会自动被纳入年度平均值的计算。
内容的提问来源于stack exchange,提问作者EverythingZen
相关产品推荐
相关产品推荐

