PowerBI多记录文本扁平化及DAX公式错误修正求助
PowerBI 多行文本按姓名合并并展示Activity完成状态问题解决
问题背景
此前提问PowerBI文本扁平化问题时过早采纳答案,需求未完全解决。需将多行文本数据按姓名合并为单行,展示各Activity的完成状态。当前使用DAX公式:
EventAttended = IF ( "Event Attended" IN VALUES (Query1[Activity]), "True","False" )
但所有行输出均为True,不符合预期。
样本数据与期望输出
样本数据
| 姓名 | Activity |
|---|---|
| 张三 | Event Attended |
| 张三 | Training Completed |
| 李四 | Training Completed |
| 王五 | Event Attended |
期望输出
| 姓名 | Event Attended | Training Completed |
|---|---|---|
| 张三 | True | True |
| 李四 | False | True |
| 王五 | True | False |
问题原因分析
VALUES(Query1[Activity])返回的是整个数据表中所有不重复的Activity值,而非当前姓名对应的Activity集合。只要数据表中存在"Event Attended"这条记录,所有行都会触发IF条件返回True,这是导致结果不符合预期的核心原因。
解决方法
方法1:使用COUNTROWS + FILTER
通过筛选当前姓名对应的Activity记录,判断是否存在目标Activity:
EventAttended = IF ( COUNTROWS( FILTER( Query1, Query1[姓名] = SELECTEDVALUE(Query1[姓名]) && Query1[Activity] = "Event Attended" ) ) > 0, "True", "False" )
同理,可复制该公式修改Activity值,创建TrainingCompleted度量值:
TrainingCompleted = IF ( COUNTROWS( FILTER( Query1, Query1[姓名] = SELECTEDVALUE(Query1[姓名]) && Query1[Activity] = "Training Completed" ) ) > 0, "True", "False" )
方法2:使用CALCULATE + ALLEXCEPT
利用ALLEXCEPT保留当前姓名的上下文,精准筛选该姓名下的Activity:
EventAttended = IF ( CALCULATE( COUNT(Query1[Activity]), ALLEXCEPT(Query1, Query1[姓名]), Query1[Activity] = "Event Attended" ) > 0, "True", "False" )
实现单行合并展示
创建矩阵可视化组件:
- 行字段选择「姓名」
- 值字段添加上述创建的
EventAttended和TrainingCompleted度量值
即可得到按姓名合并单行、展示各Activity完成状态的效果。
内容的提问来源于stack exchange,提问作者jabs
相关产品推荐
相关产品推荐

