创建DAX度量值:统计区域内登录多地区的用户数
问题描述
我有一份包含多条用户登录记录及多地区信息的数据集:
| User | District | Region |
|---|---|---|
| UserA | HKG | China |
| UserA | PRG | Europe |
| UserA | CKG | China |
| UserB | LHR | Europe |
| UserB | AMS | Europe |
| UserB | TYO | Japan |
| UserA | CKG | China |
| UserC | SYD | Australia |
| UserC | MEL | Australia |
| UserD | SYD | Australia |
| UserD | MEL | Australia |
我的需求是按Region统计出在该区域内登录过多个不同District的用户数量,预期结果如下:
| Region | Created Measure |
|---|---|
| China | 1 |
| Europe | 1 |
| Japan | 0 |
| Australia | 2 |
各区域数值说明:
- China为1:仅UserA在中国区域登录过多个不同District
- Europe为1:仅UserB在欧洲区域登录过多个不同District
- Japan为0:没有用户在日本区域登录过多个不同District
- Australia为2:UserC和UserD均在澳大利亚区域登录过多个不同District
我尝试通过创建表实现需求,但目前只能统计不同值的数量,无法筛选聚合值大于1的情况,当前使用的DAX代码如下:
DEFINE TABLE UserGroup = SUMMARIZECOLUMNS ( User[User], User[Branch], User[Region], "UserCount", COUNT('User'[User]), "User Distinct Count", DISTINCTCOUNT('User'[User]) ) EVALUATE GROUPBY( UserGroup, UserGroup[Region], "Failing Formula", SUMX(CURRENTGROUP(), [User Distinct Count]) )
解决方案
要实现需求,我们需要先按用户和区域分组统计不同District数量,再筛选出符合条件的用户,最后按区域汇总计数。以下是两种可行的DAX写法:
分步清晰版
EVALUATE VAR UserRegionDistricts = SUMMARIZE ( 'User', 'User'[User], 'User'[Region], "DistinctDistricts", DISTINCTCOUNT('User'[District]) ) VAR QualifiedUsers = FILTER ( UserRegionDistricts, [DistinctDistricts] > 1 ) RETURN SUMMARIZECOLUMNS ( 'User'[Region], "Created Measure", COUNTROWS(FILTER(QualifiedUsers, 'User'[Region] = EARLIER('User'[Region]))) )
代码逻辑:
UserRegionDistricts:按用户+区域分组,计算每个用户在对应区域的不同District数量QualifiedUsers:筛选出在区域内登录过多个不同District(数量>1)的用户记录- 最后按区域分组,统计每个区域内符合条件的用户数,无符合条件用户的区域自动返回0
简洁版
EVALUATE SUMMARIZECOLUMNS ( 'User'[Region], "Created Measure", SUMX ( VALUES('User'[User]), IF ( CALCULATE(DISTINCTCOUNT('User'[District])) > 1, 1, 0 ) ) )
代码逻辑:
- 遍历当前区域下的所有用户
- 对每个用户,计算其在该区域的不同District数量,满足条件则计1,否则计0
- 对区域内的用户计数求和,得到最终结果
内容的提问来源于stack exchange,提问作者Zabman
相关产品推荐
相关产品推荐

