Power BI中如何用DAX的ALL函数移除多列筛选计算购销比
DAX多列筛选清除及动态属性维护解决方案
一、修复多个ALL函数的语法错误
你当前的写法报错,是因为CALCULATE的筛选参数里不能直接并列多个独立的ALL()函数。有两种正确写法:
方法1:单个ALL函数传入多列参数
把需要清除筛选的所有属性列作为参数,放到同一个ALL()函数里:
measure_name = CALCULATE ( SUM ( table_name[Sales] ), YEAR ( table_name[Date of entry] ) = MAX ( YEAR ( table_name[Date of entry] ) ) ) / CALCULATE ( SUM ( table_name[Purchase] ), YEAR ( table_name[Date of entry] ) = MAX ( YEAR ( table_name[Date of entry] ) ), ALL ( table_name[Attribute1], table_name[Attribute2], table_name[Attribute3] ) )
方法2:用REMOVEFILTERS函数(推荐)
REMOVEFILTERS()是DAX 2020之后推出的函数,语法更直观,支持直接传入多列:
measure_name = CALCULATE ( SUM ( table_name[Sales] ), YEAR ( table_name[Date of entry] ) = MAX ( YEAR ( table_name[Date of entry] ) ) ) / CALCULATE ( SUM ( table_name[Purchase] ), YEAR ( table_name[Date of entry] ) = MAX ( YEAR ( table_name[Date of entry] ) ), REMOVEFILTERS ( table_name[Attribute1], table_name[Attribute2], table_name[Attribute3] ) )
二、通过Excel动态维护属性列
可以实现用Excel管理需要清除筛选的属性列,刷新Power BI后自动生效,步骤如下:
1. 准备Excel属性列表
在Excel里建一个表格(命名为AttributeList),只保留一列ColumnName,填入你要清除筛选的属性列名(比如Attribute1),以后新增属性直接在这个表格里加行就行。
2. 导入到Power BI
把这个Excel文件导入Power BI,确保AttributeList表加载到数据模型中。
3. 编写动态DAX度量值
DAX支持通过导入的列表动态生成筛选逻辑,直接修改原度量值即可:
measure_name = VAR CurrentYear = MAX ( YEAR ( table_name[Date of entry] ) ) -- 从Excel导入的列表中获取需要清除筛选的列 VAR TargetColumns = SELECTCOLUMNS ( AttributeList, "Column", table_name[ColumnName] ) RETURN CALCULATE ( SUM ( table_name[Sales] ), YEAR ( table_name[Date of entry] ) = CurrentYear ) / CALCULATE ( SUM ( table_name[Purchase] ), YEAR ( table_name[Date of entry] ) = CurrentYear, REMOVEFILTERS ( TargetColumns ) )
注意点
- Excel里的列名必须和Power BI数据表中的属性列名完全一致(大小写敏感)。
- 每次在Excel里更新属性列后,刷新Power BI的数据模型就能自动应用新的筛选规则。
- 如果用的是旧版Power BI不支持
REMOVEFILTERS,把它换成ALL ( TargetColumns )就行,效果一样。
内容的提问来源于stack exchange,提问作者Faisal Thayyil
相关产品推荐
相关产品推荐

