基于动态最大日期的度量值使用RankX实现团队排名求助
解决Power BI中按截至当前日期的球队最新指标排名问题
第一步:创建计算列获取截至当前行日期的球队最新指标值
首先需要一个计算列,提取每个球队在当前行日期(含)之前最后一次比赛对应的TmDVPoToDt值。假设你的表中有TEAM列标识球队(列名不同请自行替换):
截至当前日期的最新TmDVP = VAR 当前行日期 = 'NBA-PLAYER-FEED'[DATE] VAR 当前球队 = 'NBA-PLAYER-FEED'[TEAM] -- 定位当前球队在当前行日期前的最后比赛日 VAR 球队最新比赛日 = CALCULATE( MAX('NBA-PLAYER-FEED'[DATE]), FILTER( ALL('NBA-PLAYER-FEED'), 'NBA-PLAYER-FEED'[TEAM] = 当前球队 && 'NBA-PLAYER-FEED'[DATE] <= 当前行日期 ) ) -- 返回该日期对应的指标值 RETURN CALCULATE( MAX('NBA-PLAYER-FEED'[TmDVPoToDt]), FILTER( ALL('NBA-PLAYER-FEED'), 'NBA-PLAYER-FEED'[TEAM] = 当前球队 && 'NBA-PLAYER-FEED'[DATE] = 球队最新比赛日 ) )
第二步:创建RankX排名计算列
基于上述计算列,用RANKX生成每个球队在当前行日期下的排名。先构建所有球队在当前日期的最新指标集合,再对当前行指标进行排名:
球队当日排名 = VAR 当前行日期 = 'NBA-PLAYER-FEED'[DATE] -- 生成所有球队在当前行日期下的最新指标表 VAR 所有球队当日指标 = ADDCOLUMNS( ALL('NBA-PLAYER-FEED'[TEAM]), -- 取所有不重复球队 "@最新指标值", VAR 球队最后比赛日 = CALCULATE( MAX('NBA-PLAYER-FEED'[DATE]), FILTER( ALL('NBA-PLAYER-FEED'), 'NBA-PLAYER-FEED'[TEAM] = EARLIER('NBA-PLAYER-FEED'[TEAM]) && 'NBA-PLAYER-FEED'[DATE] <= 当前行日期 ) ) RETURN CALCULATE( MAX('NBA-PLAYER-FEED'[TmDVPoToDt]), FILTER( ALL('NBA-PLAYER-FEED'), 'NBA-PLAYER-FEED'[TEAM] = EARLIER('NBA-PLAYER-FEED'[TEAM]) && 'NBA-PLAYER-FEED'[DATE] = 球队最后比赛日 ) ) ) -- 执行排名:DESC为降序(数值越高排名越前),DENSE为密集排名(不跳号) RETURN RANKX( 所有球队当日指标, [@最新指标值], [截至当前日期的最新TmDVP], DESC, DENSE )
关键调整说明
- 替换列名:如果球队标识列不是
TEAM,请将代码中所有'NBA-PLAYER-FEED'[TEAM]替换为实际列名。 - 排名规则:如需升序排名(数值越低排名越前),将
DESC改为ASC;不需要密集排名可去掉DENSE参数(默认跳号排名)。 - 性能优化:数据集较大时,建议单独建立日期、球队维度表,提升计算效率。
内容的提问来源于stack exchange,提问作者fouraces
相关产品推荐
相关产品推荐

