DAX按组统计符合筛选条件的行:Power BI正确计算UserLog表增减用户数
DAX逻辑调整方案
问题原因
原写法的核心问题是LastUpdate度量值没有限定到单个用户维度,计算的是当前筛选上下文下所有用户的最大非UPDATED操作时间,而非每个用户自己的最新非UPDATED操作时间,因此过滤条件无法精准排除用户非最新的ADDED记录。
正确DAX实现
新增用户数度量值
AddedCount = COUNTROWS( FILTER( -- 提取当前筛选上下文下所有不重复的用户ID VALUES(UserLog[userId]), VAR CurrentUserId = UserLog[userId] -- 计算当前用户的最新非UPDATED操作时间 VAR UserLastNonUpdateDate = CALCULATE(MAX(UserLog[LogDate]), UserLog[userId] = CurrentUserId, UserLog[Action] <> "UPDATED") -- 匹配该用户在最新操作时间的操作类型 VAR UserLastAction = CALCULATE(SELECTEDVALUE(UserLog[Action]), UserLog[userId] = CurrentUserId, UserLog[LogDate] = UserLastNonUpdateDate) -- 仅最后操作是ADDED的用户计入统计 RETURN UserLastAction = "ADDED" ) )
删除用户数度量值
仅需修改最后判断条件即可:
DeletedCount = COUNTROWS( FILTER( VALUES(UserLog[userId]), VAR CurrentUserId = UserLog[userId] VAR UserLastNonUpdateDate = CALCULATE(MAX(UserLog[LogDate]), UserLog[userId] = CurrentUserId, UserLog[Action] <> "UPDATED") VAR UserLastAction = CALCULATE(SELECTEDVALUE(UserLog[Action]), UserLog[userId] = CurrentUserId, UserLog[LogDate] = UserLastNonUpdateDate) RETURN UserLastAction = "DELETED" ) )
注意事项
- 如果存在同一用户同一时间产生多条非UPDATED操作记录的场景,建议新增主键排序逻辑,比如用
LASTNONBLANKVALUE(UserLog[LogId], UserLog[Action])替代SELECTEDVALUE,避免出现空值。 - 外部时间筛选器会自动生效,无需额外在度量值中限定时间范围,继承的上下文会自动限定统计范围为你选择的时间段。
内容的提问来源于stack exchange,提问作者Hwende
相关产品推荐
相关产品推荐

