求DAX/Power Query方案:按用户统计其有权限站点的去重访问数
解决方案:按用户权限过滤的站点去重访问数
一、DAX 度量方案(推荐,支持动态用户筛选)
直接创建新度量,先锁定当前用户在TableB中有权限的站点范围,再在TableA中筛选符合条件的访问记录:
Valid Distinct Visits = VAR CurrentUser = SELECTEDVALUE('TableA'[UserID]) -- 获取当前用户在TableB中有权访问的站点集合(同时过滤站点类型) VAR UserAccessibleSites = CALCULATETABLE( VALUES('TableB'[SiteID]), 'TableB'[UserID] = CurrentUser, 'TableD'[Site Type] IN {"Personal", "Business"} ) RETURN -- 统计TableA中属于该集合且活动类型为Visited的去重站点数 CALCULATE( DISTINCTCOUNT('TableA'[SiteID]), 'TableA'[SiteID] IN UserAccessibleSites, 'TableC'[Activity] = "Visited" )
说明:
CurrentUser:获取当前上下文的用户(支持切片器筛选单个/多个用户)UserAccessibleSites:生成当前用户有权访问的站点列表,同时加入TableD的站点类型过滤规则- 最终计算仅统计
TableA中属于该站点列表、且标记为"Visited"的去重站点ID
二、Power Query 预处理方案
如果需要提前整理数据,可通过Power Query合并过滤:
- 打开Power Query编辑器,加载
TableA、TableB、TableC、TableD - 预处理
TableB:- 按
SiteID合并TableB与TableD,展开Site Type列 - 筛选
Site Type为"Personal"或"Business",仅保留UserID和SiteID列
- 按
- 按
UserID+SiteID内连接TableA与预处理后的TableB,只保留用户有权限的访问记录 - 按
SiteID合并TableC,筛选Activity为"Visited" - 移除
UserID+SiteID的重复组合,最后按UserID分组统计去重站点数
关键M代码片段:
let // 过滤TableB的站点类型 FilteredTableB = Table.SelectRows( Table.NestedJoin(TableB, {"SiteID"}, TableD, {"SiteID"}, "TableD", JoinKind.LeftOuter), each [TableD][Site Type]{0} = "Personal" or [TableD][Site Type]{0} = "Business" ), CleanTableB = Table.SelectColumns(FilteredTableB, {"UserID", "SiteID"}), // 内连接TableA和CleanTableB,保留用户有权限的访问记录 JoinedTables = Table.NestedJoin(TableA, {"UserID", "SiteID"}, CleanTableB, {"UserID", "SiteID"}, "CleanTableB", JoinKind.Inner), // 过滤访问活动类型 FilteredVisits = Table.SelectRows( Table.NestedJoin(JoinedTables, {"SiteID"}, TableC, {"SiteID"}, "TableC", JoinKind.LeftOuter), each [TableC][Activity]{0} = "Visited" ), // 去重并分组统计 GroupedStats = Table.Group( Table.Distinct(Table.SelectColumns(FilteredVisits, {"UserID", "SiteID"})), {"UserID"}, {{"Valid Visits", each Table.RowCount(_), Int64.Type}} ) in GroupedStats
原方法无效原因
你之前的计算列InAccessTable? = Contains('TableB', 'TableB'[SiteID], 'TableA'[SiteID])仅全局检查SiteID是否存在于TableB,未关联UserID,会错误统计其他用户有权限的站点,导致结果偏差。
内容的提问来源于stack exchange,提问作者user11234048
相关产品推荐
相关产品推荐

