Power BI:如何基于双切片器统计两个数据集的重复PersonId
双Session切片器的动态统计实现方案
嘿,我来给你捋捋这个方案,其实完全不用提前创建交集表,用DAX度量值就能搞定动态筛选的需求,而且更灵活。先一步步来:
第一步:准备独立的Session维度表
因为你需要两个独立的Session切片器(互不干扰),所以得创建两个完全独立的Session维度表,不要和TableA、TableB建立任何关系:
DimSessionA = DISTINCT(UNION(VALUES(TableA[Session]), VALUES(TableB[Session]))) DimSessionB = DISTINCT(UNION(VALUES(TableA[Session]), VALUES(TableB[Session])))
这两个表会自动提取所有唯一的Session值,不管是来自TableA还是TableB。
第二步:创建两个独立切片器
- 第一个切片器绑定
DimSessionA[Session],用来控制TableA的筛选 - 第二个切片器绑定
DimSessionB[Session],用来控制TableB的筛选
第三步:编写DAX度量值实现需求
需求1:统计第一个切片器选中Session对应的TableA不同PersonId数量
这个度量值会把第一个切片器的选中值映射到TableA的Session字段,然后统计去重的PersonId:
PersonCount_TableA = CALCULATE( DISTINCTCOUNT(TableA[PersonId]), TREATAS(ALLSELECTED(DimSessionA[Session]), TableA[Session]) )
举个例子:如果第一个切片器选Summer 2017,这个度量值会返回2(对应PersonId 1和2)。
需求2:统计同时存在于两个切片器选中Session的PersonId数量
我们先分别筛选出符合两个切片器条件的PersonId集合,再取交集统计数量:
PersonCount_Intersection = VAR PersonInTableA = CALCULATETABLE( DISTINCT(TableA[PersonId]), TREATAS(ALLSELECTED(DimSessionA[Session]), TableA[Session]) ) VAR PersonInTableB = CALCULATETABLE( DISTINCT(TableB[PersonId]), TREATAS(ALLSELECTED(DimSessionB[Session]), TableB[Session]) ) RETURN COUNTROWS(INTERSECT(PersonInTableA, PersonInTableB))
比如第一个切片器选Summer 2017,第二个选Spring 2017,这个度量值会返回1(只有PersonId 1同时满足两个条件)。
为什么不用交集表?
动态计算的度量值比静态交集表更高效:切片器每次切换时,度量值会实时计算最新结果,不需要手动刷新或维护额外的表,尤其是当Session数量多、数据频繁更新时,这种方式更灵活可靠。
内容的提问来源于stack exchange,提问作者Violeta
相关产品推荐
相关产品推荐

