如何生成无重复值的Rank索引?Power BI排名问题求助
解决DAX同组内DateTime重复时的唯一连续排名问题
你的核心需求是按ID分组,对DateTime排序时,即使存在相同的DateTime值,也要生成1、2、3、4这种无重复的连续排名。原代码用RANKX的Skip模式会导致相同值共享排名并跳过后续名次,而直接加全局随机列会打乱原有排序逻辑,以下是两种可靠的解决方案:
方法一:用ROW_NUMBER()实现组内唯一排名
ROW_NUMBER()是最直接的方式,它会在分组内按指定规则生成连续且唯一的序号。
步骤1:确保表有唯一行标识
如果你的表没有原生的唯一行ID(比如Power BI自动生成的"索引"列),先添加一个稳定的唯一序号列:
行ID = INDEX( COUNTROWS('Table'), ORDER BY 'Table'[ID], 'Table'[Date Time] )
这个列会按ID和Date Time的顺序,给每行分配唯一的序号,同ID同DateTime的行也会得到不同的行ID。
步骤2:生成唯一排名
唯一排名 = ROW_NUMBER() OVER ( PARTITION BY 'Table'[ID] ORDER BY 'Table'[Date Time], 'Table'[行ID] )
PARTITION BY 'Table'[ID]:按ID分组计算排名ORDER BY 'Table'[Date Time], 'Table'[行ID]:先按DateTime排序,DateTime相同时按唯一的行ID排序,保证排序逻辑唯一ROW_NUMBER():在分组内生成连续的1、2、3...序号
方法二:修改RANKX的排序依据
如果坚持用RANKX,可以将排序依据改为DateTime加唯一行ID的组合,确保每个行的排序键唯一:
唯一排名 = RANKX( FILTER('Table', 'Table'[ID] = EARLIER('Table'[ID])), 'Table'[Date Time] & "|" & 'Table'[行ID], ,ASC,Dense )
- 排序键
'Table'[Date Time] & "|" & 'Table'[行ID]:让相同DateTime的行因为行ID不同拥有唯一的排序值 - 这里用
Dense或Skip模式都可以,因为排序键唯一后不会出现重复排名
为什么你的随机列方案无效?
你用的RANDBETWEEN(1,COUNTROWS('Table'))是全局生成随机数,不是在当前ID分组内生成,而且每次刷新数据都会重新生成随机值,完全破坏了DateTime的原有排序逻辑,所以会打乱排名。
内容的提问来源于stack exchange,提问作者user35131
相关产品推荐
相关产品推荐

