Power BI中如何在筛选子集内按邮箱分组对日期进行排名?
Power BI 邮箱分组日期排名实现方案
需求:按邮箱分组,对符合created date >=11/1/2022的日期进行升序、相同日期同排名的计算。
数据修正说明
观察你提供的原始数据和期望结果,4@.com的5/15/2021不符合筛选条件,但期望结果中它的排名为2,推测是输入笔误,实际应为5/15/2023;另外1@.com的11/4/2022符合筛选条件但未出现在期望结果中,若需匹配你的期望结果,可将筛选条件调整为created date >=1/1/2023,以下方案会说明两种情况的调整方式。
实现步骤
确认日期列类型
确保created date列是日期/时间类型(而非文本)。若为文本,切换到「建模」选项卡,选中该列后将数据类型改为「日期」。创建排名计算列
在数据视图中,点击「建模」→「新建列」,输入以下DAX公式(替换'你的表名'为实际表名):Rank = VAR CurrentEmail = [email] RETURN IF( [created date] >= DATE(2022,11,1), -- 这里的日期对应你的筛选条件,若要匹配期望结果改为DATE(2023,1,1) RANKX( CALCULATETABLE( '你的表名', '你的表名'[email] = CurrentEmail, '你的表名'[created date] >= DATE(2022,11,1) -- 同步调整这里的日期 ), [created date], , ASC, -- 升序排名 DENSE -- 相同值同排名,排名连续 ), BLANK() -- 不符合条件的行返回空 )
公式说明
VAR CurrentEmail:捕获当前行的邮箱,确保排名仅在同一邮箱组内计算IF判断:先过滤不符合日期条件的行,避免无效排名CALCULATETABLE:构建当前邮箱下所有符合日期条件的数据集,作为排名的上下文范围RANKX的DENSE参数:实现相同日期获得相同排名,且后续排名连续(如1,2,2,3);若用SKIP则会跳过重复排名的位数(如1,2,2,4)ASC:指定按日期从小到大升序排名
结果验证
- 若使用
DATE(2023,1,1)作为筛选条件,将完全匹配你提供的期望结果 - 若使用你最初的
DATE(2022,11,1),1@.com的11/4/2022会排名1,1/5/2023排名2,2/4/2023排名3
内容的提问来源于stack exchange,提问作者John Kim
相关产品推荐
相关产品推荐

