You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 AttendedTraining Completed
张三TrueTrue
李四FalseTrue
王五TrueFalse

问题原因分析

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:46:07