DAX嵌套FILTER函数报错,请求原因分析与解决方法
DAX度量值报错解析与修复
报错原因
原度量值的核心问题出在BASE_SALES[STORE] IN FILTER(STATES, STATES[STATE] = "Cleveland")这一行:
FILTER(STATES, STATES[STATE] = "Cleveland")返回的是STATES表中所有符合条件的整行记录(包含STATES表的全部列)。IN运算符要求右侧必须是单列表或单个/多个离散值,当DAX尝试用单个值(BASE_SALES[STORE])匹配多列的表时,底层调用的CONTAINSROW函数需要为表的每一列提供对应匹配值,但这里仅传入了一个值,因此触发“参数数量无效”的报错。
修复方案
根据数据模型的不同,有两种常用修复方式:
方式一:提取单列表匹配
通过SELECTCOLUMNS从过滤后的STATES表中提取需要匹配的STORE列,将多列表转换为单列表,满足IN运算符的要求:
CALCULATE ( SUM(BASE_SALES[VOLUME]), FILTER( BASE_SALES, BASE_SALES[STORE] IN SELECTCOLUMNS( FILTER(STATES, STATES[STATE] = "Cleveland"), "MatchingStore", STATES[STORE] ) ) )
方式二:利用表关系简化(推荐)
如果BASE_SALES和STATES表之间已通过STORE列(或其他关联字段)建立了关系,可直接利用关系过滤,无需嵌套FILTER:
CALCULATE ( SUM(BASE_SALES[VOLUME]), STATES[STATE] = "Cleveland" )
注意:若STATES表中不存在
STORE列,需先确认两个表的关联逻辑,调整匹配字段后再按上述方式修改。
内容的提问来源于stack exchange,提问作者Pauline
相关产品推荐
相关产品推荐

