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>
- )
复制代码 |