Power BI中如何按条件汇总列并生成指定规则的汇总表?
在Power BI中按规则创建汇总表的解决方案
嘿,我刚好处理过类似的需求,这就给你一步步拆解怎么实现:
核心需求回顾
我们要从原始表生成满足以下规则的汇总表:
- 每个
id只保留唯一记录 - 按
id和今日日期分组,选出该id下出现次数最多的screen name - 如果同一个
id下有多个screen name出现次数相同,取原始表中首次出现的那个
实现步骤&DAX代码
直接用Power BI的计算表功能,粘贴下面的DAX公式即可(记得把原始表替换成你实际的表名):
汇总表 = VAR 今日日期 = TODAY() // 第一步:统计每个id+screen组合的出现次数 VAR 屏幕计数表 = ADDCOLUMNS( SUMMARIZE(原始表, 原始表[id], 原始表[screen name]), "出现次数", CALCULATE(COUNT(原始表[id]), ALLEXCEPT(原始表, 原始表[id], 原始表[screen name])) ) // 第二步:给每个id下的screen按「出现次数降序+首次出现时间升序」排序 VAR 带排序的计数表 = ADDCOLUMNS( 屏幕计数表, "排序优先级", // 先按出现次数降序排名,次数越高排名越靠前 RANKX( FILTER(屏幕计数表, [id] = EARLIER([id])), [出现次数],, DESC, DENSE ) + // 次数相同时,按首次出现时间升序,把首次出现的screen排在前面(除以1000避免影响主排名) RANKX( FILTER(屏幕计数表, [id] = EARLIER([id]) && [出现次数] = EARLIER([出现次数])), CALCULATE(MIN(原始表[记录日期]), ALLEXCEPT(原始表, 原始表[id], 原始表[screen name])),, ASC, DENSE ) / 1000 ) // 第三步:筛选出每个id下排序优先级最高的记录,整理成汇总表 RETURN SELECTCOLUMNS( FILTER(带排序的计数表, [排序优先级] = 1), "唯一ID", [id], "统计日期", 今日日期, "最频繁屏幕名称", [screen name], "最高出现次数", [出现次数] )
代码细节解释
- 规则1(distinct ids):最后一步筛选
排序优先级=1的记录,每个id只会保留一条符合要求的记录,自动实现去重。 - 规则2(取计数最高的screen):用
RANKX按出现次数降序排名,确保出现次数最多的screen排在第一位。 - 规则3(计数相同取第一个screen):当出现次数相同时,额外按该
screen name在原始表中的首次出现日期升序排序,这样最早出现的screen会被优先选中。如果你的原始表没有日期列,也可以换成MIN(原始表[行号])(需要先给原始表添加索引列),同样能实现取第一个出现的screen。
内容的提问来源于stack exchange,提问作者KARTHIKEYAN.A
相关产品推荐
相关产品推荐

