Power BI中如何使用CALCULATE函数返回筛选后的单列所有行数据
核心问题说明
DAX 中度量值的设计逻辑是返回单个标量值,不能直接返回未经聚合的多行数据或完整列,这就是你直接把table[col1]写在CALCULATE里会报错的根本原因。
适配场景的实现方案
场景1:在表格/矩阵视觉中展示所有筛选后的col1行
不需要做复杂的聚合操作,按以下步骤实现即可:
- 把
table[col1]字段直接拖入表格/矩阵的「行」或「值」区域 - 编写筛选标记度量值,用来识别符合条件的行:
符合条件标记 = CALCULATE( COUNTROWS('table'), ALL('table'[col2]), 'table'[col3] = "你的自定义筛选条件" )
- 把
符合条件标记添加到视觉对象的筛选器面板,设置筛选条件为「不为空」或「等于1」,此时视觉中展示的就是所有符合你筛选规则的col1行数据。
场景2:在单个度量值中返回所有筛选后的col1值(合并为文本)
如果你需要把筛选后的所有col1值合并为单个文本,放在卡片图等位置展示,使用CONCATENATEX函数搭配CALCULATE即可:
合并col1值 = CALCULATE( CONCATENATEX('table', 'table'[col1], "、"), ALL('table'[col2]), 'table'[col3] = "你的自定义筛选条件" )
如果需要对返回的col1值去重,修改为以下写法:
去重合并col1值 = CALCULATE( CONCATENATEX(DISTINCT('table'[col1]), 'table'[col1], "、"), ALL('table'[col2]), 'table'[col3] = "你的自定义筛选条件" )
场景3:需要把筛选后的col1作为中间表给其他函数调用
如果你不需要直接返回给前端视觉,只是要把筛选后的col1集合作为中间参数传给其他DAX函数,可以使用CALCULATETABLE直接返回筛选后的表结构:
// 该表达式返回单列表,可作为其他表函数的入参,不能直接作为度量值返回 筛选后的col1集合 = CALCULATETABLE( VALUES('table'[col1]), ALL('table'[col2]), 'table'[col3] = "你的自定义筛选条件" )
内容的提问来源于stack exchange,提问作者MetallicPriest
相关产品推荐
相关产品推荐

