Power BI服务中DAX度量值报错:SummarizeColumns无法使用的解决咨询
问题:Power BI服务版筛选特定院校时DAX度量值报错
背景
报表内有矩阵视觉对象,用于统计三个学年中各五分位(Quintile)未完成资格认证人员的占比,核心需求是提取最新学年数据中的最大占比。基础数据包含学生所属的School和College信息。
原DAX代码在以下场景正常运行:
- Power BI桌面版(全量数据、页面筛选器限定特定院校)
- Power BI服务版(全量数据)
但在Power BI服务版中,当页面筛选器限定特定院校时,卡片视觉对象会抛出报错。
报错内容
Couldn't load the data for this visual
MdxScript(Model) (122, 9) Calculation error in measure 'Data'[KM MAX IMD NC %]: SummarizeColumns() and AddMissingItems() may not be used in this context.
原DAX代码
KM IMD MAX % = VAR queryYear = Data[KM Current Year] VAR valueTable = SUMMARIZECOLUMNS( Data[IMD Quintile], FILTER( Data, Data[Academic Year Name] = queryYear ), FILTER( Data, [IMD Quintile] <> BLANK() ), FILTER( Data,[Ethnicity] <> BLANK() ), "Fraction", CALCULATE(DISTINCTCOUNT(Data[Student Number]),FILTER(Data, [Completion] = "Not Completed")) / DISTINCTCOUNT(Data[Student Number]) ) RETURN MAXX( SELECTCOLUMNS(valueTable,[Fraction]), [Fraction] )
解决方案
问题根源是SUMMARIZECOLUMNS的上下文兼容性限制:Power BI服务版在复杂筛选上下文(如页面级院校筛选)中,无法正确处理SUMMARIZECOLUMNS与外部筛选的交互,而桌面版引擎的容错逻辑更宽松。
替换为CALCULATETABLE+SUMMARIZE的组合,确保筛选上下文正确传递,同时优化计算逻辑:
KM IMD MAX % = VAR queryYear = MAX(Data[KM Current Year]) VAR valueTable = CALCULATETABLE( SUMMARIZE( Data, Data[IMD Quintile], "Fraction", DIVIDE( CALCULATE(DISTINCTCOUNT(Data[Student Number]), Data[Completion] = "Not Completed"), DISTINCTCOUNT(Data[Student Number]), 0 ) ), Data[Academic Year Name] = queryYear, Data[IMD Quintile] <> BLANK(), Data[Ethnicity] <> BLANK() ) RETURN MAXX(valueTable, [Fraction])
核心优化说明
- 用
CALCULATETABLE包裹SUMMARIZE,外部筛选(如院校筛选)能正确传递到内部计算,兼容服务版的上下文处理逻辑 - 将原
SUMMARIZECOLUMNS的多个独立FILTER合并为CALCULATETABLE的筛选参数,逻辑更简洁且避免上下文冲突 - 改用
DIVIDE函数处理除法,自动处理分母为0的异常情况 queryYear使用MAX(Data[KM Current Year])确保在任何筛选上下文下都能获取单一的最新学年值,避免原代码中直接引用列可能导致的多值冲突
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

