多维度分组计算四分位数时排除当前供应商的DAX实现问题
问题解决方案
原代码问题分析
- 行上下文与筛选上下文转换逻辑错误:
SELECTEDVALUE(df[Vendor])在SUMMARIZE的分组行上下文中虽能取到当前分组的供应商值,但直接在CALCULATE筛选参数中写Vendor_Selected <> df[Vendor]没有清除原有行上下文对Vendor的默认筛选,导致排除逻辑不生效。 - 未锁定分组维度:没有显式保留Year、Class1、Class2的筛选规则,计算范围会随上下文异常变动。
修正后代码
方案1:计算列(直接写入表中,与你手动计算的Q1列完全匹配)
Q1_Calculated = VAR CurrentYear = df[Year] VAR CurrentClass1 = df[Class1] VAR CurrentClass2 = df[Class2] VAR CurrentVendor = df[Vendor] RETURN CALCULATE( PERCENTILE.INC(df[Rate], 0.25), FILTER( ALL(df), df[Year] = CurrentYear && df[Class1] = CurrentClass1 && df[Class2] = CurrentClass2 && df[Vendor] <> CurrentVendor ) )
方案2:度量值(适用于透视表等动态查询场景)
Q1_Measure = VAR CurrentVendor = SELECTEDVALUE(df[Vendor]) RETURN CALCULATE( PERCENTILE.INC(df[Rate], 0.25), ALLEXCEPT(df, df[Year], df[Class1], df[Class2]), df[Vendor] <> CurrentVendor )
验证说明
以你举的Year2、VendorA、Class2=F的场景为例:排除A之后剩余供应商B、C的Rate值为0.06、0.19、0.12、0.04、0.12,排序后取第25百分位结果为0.06,和你手动计算的Q1值完全一致,5000条数据量级下该代码运行无性能问题。
内容的提问来源于stack exchange,提问作者happy_frappy_dingdong
相关产品推荐
相关产品推荐

