如何在PowerBI中扁平化文本数据并合并同一用户的活动记录?
解决PowerBI中用户活动记录合并为单行的问题
你当前的DAX公式是逐行判断单条记录是否为「Invitation Accepted」,所以每条原始记录都会生成对应的True/False值,自然会保留多行。要实现同一用户合并为单行,需要按用户聚合判断各活动状态,以下是两种可行方案:
方案一:DAX计算列实现
针对每个活动类型创建独立的计算列,判断该用户是否存在对应活动记录:
- 打开数据模型,选中你的数据表
- 创建以下三个计算列(替换
你的表名为实际表名):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")
- 完成后,在可视化中只保留
Name和这三个计算列,即可看到每个用户一行,各活动状态清晰展示。
原理:ALLEXCEPT函数会保留当前行的Name筛选条件,移除其他所有筛选,从而统计该用户是否存在对应活动的记录。
方案二:Power Query透视列实现
通过数据转换直接重构表格结构,更适合长期使用:
- 进入Power Query编辑器(点击「数据」选项卡→「转换数据」)
- 选中你的数据表,点击
Name列,然后点击「转换」选项卡→「透视列」 - 在弹窗中:
- 「值列」选择
Activity - 「高级选项」选择「计数(非重复)」
- 点击确定后,会生成以活动类型为列、计数为值的表格
- 「值列」选择
- 新增三个自定义列,将计数转换为True/False:
InvitationSent = [Invitation Sent] > 0InvitationOpened = [Invitation Opened] > 0InvitationAccepted = [Invitation Accepted] > 0
- 删除原始的计数列,关闭并应用更改,即可得到每行一个用户的结构化表格。
内容的提问来源于stack exchange,提问作者jabs
相关产品推荐
相关产品推荐

