DAX中通常使用迭代函数Rankx,我们首先了解一下Rankx的基础用法:
1.Rankx基本方法
基础数据如上图
首先建立【度量值】——[销售和]
销量和 = SUM('销量明细'[销量])
再使用Rankx计算排名,新建【度量值】
总体排名 = RANKX(
ALL('销量明细'),
[销量和]
)
如上例,Rankx只有前两个参数是必要的,实际可以输入五个参数,设置排序方式
- 参数1:与其他迭代函数一样是表,添加ALL函数是因为需要通过行上下文计算排名,
- 参数2:需要是一个已经建立好的度量值
- 参数3:一般忽略
- 参数4:指定排序方式,ASC升序,DESC降序
- 参数5:处理排名一致时排名规则,skip 下一名的排序等于之前所有排序的数量+1;dense ,只累加排序,不考虑数量。
2.分组排名度量值
通过在第一个参数添加函数可以实现进阶功能,例如分组分层排名,依旧使用上述数据,新建【度量值】
按类别排名 = RANKX(
ALLEXCEPT('销量明细','销量明细'[类别]),
[销量和]
)
上述DAX公式使用的是ALLEXCEPT函数,是ALL家族函数,功能是除了第二个参数【类别】都是行上下文计算排名,这样就实现了分组分层排名
3.添加分组排名计算列
新建【计算列】
按类别排名_列 = VAR _C = '销量明细'[类别]
RETURN RANKX(
FILTER('销量明细',
'销量明细'[类别]=_C
),
[销量]
)
这个DAX公式采取类似Excel行上下文的功能,首先建立一个参数等于类别,在Rankx函数第一个参数添加一个Filter,实现同一类别内进行排名,即分层排名。