DAX结合ALLEXCEPT与日期表累计过滤:上线周非空条件适配方案
正确实现写法
Avg Rating Since Launch = VAR CurrentProduct = SELECTEDVALUE('table'[Product Name]) VAR CurrentRetailer = SELECTEDVALUE('table'[Retailer]) -- 获取当前产品+零售商标识的最早非空上线周 VAR FirstLaunchWeek = CALCULATE( MIN('table'[Launch Week]), ALL('table'), 'table'[Product Name] = CurrentProduct, 'table'[Retailer] = CurrentRetailer, NOT(ISBLANK('table'[Launch Week])) ) RETURN CALCULATE( [Avg Rating This Week], ALLEXCEPT('table', 'table'[Product Name], 'table'[Retailer]), -- 过滤掉上线周为空、以及早于上线周的条目 NOT(ISBLANK('table'[Launch Week])), 'DateTable'[Date] >= FirstLaunchWeek )
如果需要支持同时筛选多个产品/零售商的场景,可将变量中的SELECTEDVALUE替换为VALUES,适配多值筛选场景。
原有写法问题说明
- 将Launch Week字段加入ALLEXCEPT参数的写法,等价于保留当前上下文的上线周筛选,仅能统计单周数据,无法实现跨周累计的效果
- 未加入上线周非空、日期大于等于首个上线周的过滤条件,会将上线前、上线周为空的无效条目纳入统计,导致结果不符合预期
效果验证
当筛选维度为该产品的首个上线周时,度量值计算范围和[Avg Rating This Week]完全一致,计算结果相等;筛选后续周度时,会自动累计从上线周到当前筛选周的所有有效数据,和周度平均评分的计算结果自然产生差异,符合需求。
内容的提问来源于stack exchange,提问作者G H
相关产品推荐
相关产品推荐

