DAX 中的 RANK.EQ 函数与 Microsoft Excel 中的同名函数类似,它返回某个数字在整个值集中的排名,功能上相当于 RANKX 函数的子集。除非需要照搬 Excel 公式,否则我们很少在 DAX 中使用它。
RANK.EQ
RANK.EQ ( <value>, <column>, [<order>] )
参数 | 属性 | 描述 |
---|---|---|
Value | 需要计算排名的 DAX 表达式 | |
ColumnName | 用来确定排名的现有列,不能使用表达式 | |
Order | 可选 | 排序规则. 0/FALSE/DESC – 降序; 1/TRUE/ASC – 升序. 默认降序 |
在 Excel 中,这个函数可以接受一系列单元格区域作为列参数。在 DAX 中,它通常与表达式共用同一列,这意味着你希望计算的是列对其自身值的排序。
有一种情况可能需要使用不同的列,当你有两个表, 一个表包含要计算排名的元素(例如, 特定的产品),另一个表包含要用于排名的整个元素集(例如, 所有产品的列表)。但是,由于<column>存在的限制:它不能是表达式或使用 ADDCOLUMNS、ROW 或 SUMMARIZE 创建的列,RANK.EQ 通常用于计算列,值参数和列参数使用相同的列,即引用相同表中的列,如下例所示:
Product[Price Rank] := RANK.EQ ( Product[Unit Price], Product[Unit Price] )
如果希望得到更加灵活或者动态的排名结果,可以用 RANKX 代替 RANK.EQ,后者主要用来满足 Excel 函数兼容性。
RANKX 和 RANK.EQ
RANK.EQ 是 RANKX 的极简形式,只适用于非常有限的场景,我们可以使用 RANKX 重写 RANK.EQ
RANK.EQ ( <value>, table[column] ) -------- 等价于 -------- RANKX ( VALUES ( table[column] ), table[column], <value> )
RANK.EQ ( <value>, table[column], <order> ) -------- 等价于 -------- RANKX ( VALUES ( table[column] ), table[column], <value>, <order> )
rank.eq(column,column)排名是间断的,比如,111,44,66,但是rankx(values(column),column)排名是不间断的,比如1112233
函数代码行,“,”错位了
照这个速度过年也更新不完