Rank窗口函数异常:仅返回1值的问题排查求助
问题分析与解决方案
问题根源
你编写的RANK函数返回全1的原因是:内部的SUMMARIZECOLUMNS继承了外部SUMMARIZECOLUMNS的筛选上下文——也就是当前行的Year和Quarter,导致每个行对应的排名范围仅包含自身一行,因此每一行的排名都是1。
修正后的DAX代码
方案一:保留原RANK函数结构优化
EVALUATE SUMMARIZECOLUMNS( 'Calendar'[Year], 'Calendar'[Quarter], "% Change Quarter", [% Change Quarter], "RNK", RANK( DENSE, -- 清除当前季度筛选,保留年份筛选,获取当前年份下所有季度数据 CALCULATETABLE( SUMMARIZECOLUMNS( 'Calendar'[Year], 'Calendar'[Quarter], "% Change Quarter", [% Change Quarter] ), ALL('Calendar'[Quarter]) ), ORDERBY([% Change Quarter], DESC), PARTITIONBY('Calendar'[Year]) ) )
方案二:使用更直观的RANKX函数
EVALUATE SUMMARIZECOLUMNS( 'Calendar'[Year], 'Calendar'[Quarter], "% Change Quarter", [% Change Quarter], "RNK", RANKX( -- 定义当前年份下的所有季度为排名范围 CALCULATETABLE( VALUES('Calendar'[Quarter]), ALLSELECTED('Calendar'[Year]) ), [% Change Quarter], , DESC, DENSE ) )
关键说明
核心是扩展排名范围:通过CALCULATETABLE + ALL('Calendar'[Quarter])清除当前行的季度筛选,让排名计算覆盖当前年份下的所有季度数据,这样就能得到正确的分区排名结果。
内容的提问来源于stack exchange,提问作者Katlego
相关产品推荐
相关产品推荐

