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

如何在PowerBI中扁平化文本数据并合并同一用户的活动记录?

解决PowerBI中用户活动记录合并为单行的问题

你当前的DAX公式是逐行判断单条记录是否为「Invitation Accepted」,所以每条原始记录都会生成对应的True/False值,自然会保留多行。要实现同一用户合并为单行,需要按用户聚合判断各活动状态,以下是两种可行方案:

方案一:DAX计算列实现

针对每个活动类型创建独立的计算列,判断该用户是否存在对应活动记录:

  1. 打开数据模型,选中你的数据表
  2. 创建以下三个计算列(替换你的表名为实际表名):
    • InvitationSent = IF(CALCULATE(COUNTROWS('你的表名'), ALLEXCEPT('你的表名', '你的表名'[Name]), '你的表名'[Activity] = "Invitation Sent") > 0, "True", "False")
    • InvitationOpened = IF(CALCULATE(COUNTROWS('你的表名'), ALLEXCEPT('你的表名', '你的表名'[Name]), '你的表名'[Activity] = "Invitation Opened") > 0, "True", "False")
    • InvitationAccepted = IF(CALCULATE(COUNTROWS('你的表名'), ALLEXCEPT('你的表名', '你的表名'[Name]), '你的表名'[Activity] = "Invitation Accepted") > 0, "True", "False")
  3. 完成后,在可视化中只保留Name和这三个计算列,即可看到每个用户一行,各活动状态清晰展示。

原理:ALLEXCEPT函数会保留当前行的Name筛选条件,移除其他所有筛选,从而统计该用户是否存在对应活动的记录。

方案二:Power Query透视列实现

通过数据转换直接重构表格结构,更适合长期使用:

  1. 进入Power Query编辑器(点击「数据」选项卡→「转换数据」)
  2. 选中你的数据表,点击Name列,然后点击「转换」选项卡→「透视列」
  3. 在弹窗中:
    • 「值列」选择Activity
    • 「高级选项」选择「计数(非重复)」
    • 点击确定后,会生成以活动类型为列、计数为值的表格
  4. 新增三个自定义列,将计数转换为True/False:
    • InvitationSent = [Invitation Sent] > 0
    • InvitationOpened = [Invitation Opened] > 0
    • InvitationAccepted = [Invitation Accepted] > 0
  5. 删除原始的计数列,关闭并应用更改,即可得到每行一个用户的结构化表格。

内容的提问来源于stack exchange,提问作者jabs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:15:59