Power BI中如何编写DAX计算仅执行过事件B的用户数量
统计仅触发事件'B'的用户数DAX方案
假设存储用户行为记录的表名为UserEvents,包含User(用户ID)、Event(事件名称)两个字段,可通过以下DAX实现需求,示例数据下计算结果为1,匹配预期。
度量值写法(最常用,适配Power BI报表可视化)
仅执行B事件用户数 = COUNTROWS( FILTER( -- 先取所有去重用户列表 VALUES(UserEvents[User]), -- 筛选条件1:用户存在事件B的记录 CALCULATE(COUNTROWS(UserEvents), UserEvents[Event] = "B") > 0 -- 筛选条件2:用户不存在任何非B事件的记录 && CALCULATE(COUNTROWS(UserEvents), UserEvents[Event] <> "B") = 0 ) )
逻辑说明
遍历所有去重后的用户,逐个校验行为,仅同时满足以下两个条件的用户会被计数:
- 必须有至少1条事件为'B'的行为记录
- 不能有任何事件不是'B'的行为记录
统计符合要求的用户总行数,即为所求结果。
可选简洁写法
如果偏好更短的代码,也可通过事件拼接的逻辑实现:
仅执行B事件用户数 = SUMX( VALUES(UserEvents[User]), -- 将单个用户的所有去重事件拼接为字符串,仅当结果为"B"时计数1 IF(CONCATENATEX(DISTINCT(UserEvents[Event]), UserEvents[Event], "") = "B", 1, 0) )
DAX查询写法(适配DAX Studio直接输出结果)
如果需要直接写查询返回标量结果,可使用如下语句:
EVALUATE ROW( "仅执行B事件用户数", COUNTROWS( FILTER( VALUES(UserEvents[User]), CALCULATE(COUNTROWS(UserEvents), UserEvents[Event] = "B") > 0 && CALCULATE(COUNTROWS(UserEvents), UserEvents[Event] <> "B") = 0 ) ) )
结果校验
对照示例数据逐用户校验:
- 用户1:存在A/B/C/D四类事件,不符合
- 用户2:存在A/B两类事件,不符合
- 用户3:仅存在B类事件,符合
最终统计结果为1,和预期一致。
内容的提问来源于stack exchange,提问作者Kunal Kochar
相关产品推荐
相关产品推荐

