RANKX

针对 table 参数中每一行,返回某个数字在数字列表中的排名 。

语法

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])  

parameters

table
任何返回已计算其表达式的数据库表的 DAX 表达式。

expression
任何返回单个标量值的 DAX 表达式。 为表的每一行计算表达式以生成所有可能的值来进行排名 。 请参阅备注部分以了解 expression 计算结果为 BLANK 时的函数行为 。

value
(可选)任何返回单个要查找其排名的标量值的 DAX 表达式。 请查看备注部分,了解在表达式中未找到 value 时的函数行为。

忽略 value 参数时,将改用当前行的表达式值 。

order
(可选)指定如何对 value 进行排名的值,从低到高或从高到底 :

备用值 说明
0(零) FALSE 表达式的值按降序进行排名。 如果值等于表达式中的最大数,RANKX 则返回 1。

当省略 order 参数时,这是默认值。
1 TRUE 表达式按升序进行排名。 如果值等于表达式中的最小数,RANKX 则返回 1。

ties
(可选)定义存在等同值时如何确定排名的枚举。

枚举 描述
跳过 如果存在等同值,那么此等同值之后下一个排名值是等同值加上关联值计数的值。 例如,如果五 (5) 个值的排名都为 11,则下一个值将获得排名 16 (11 + 5)。

当省略 ties 参数时,这是默认值 。
Dense 如果存在等同值,那么此等同值之后的下一个排名值就是下一个排名值。 例如,如果五 (5) 个值的排名都为 11,则下一个值将获得的排名为 12。

返回值

为 table 数字的所有行计算的 expression 的所有可能值之间的 value 的排名数 。

备注

  • 如果 expression 或 value 的计算结果为 BLANK,那么对于生成的结果为数字的所有表达式,它会被视为 0(零);对于所有文本表达式,则会被视为空文本

  • 如果 value 不在 expression 的所有可能值范围内,那么 RANKX 暂时会将 value 添加到 expression 中的值,然后重新计算 RANKX 以确定 value 的正确排名

  • 可以通过在参数列表中放置空逗号 (,) 来跳过可选参数,例如 RANKX(Inventory, [InventoryCost],,,"Dense")

  • 在数据类型为十进制数的值之间执行的与相等相关的比较(=、<>、>= 和 <=)在使用 RANKX 函数时,可能会返回意外的结果。 由于数据类型为十进制数的值存储为 IEEE 标准 754 浮点数,并且其精度具有固有限制,因此可能会出现错误结果。 若要避免意外结果,请将数据类型更改为定点十进制数,或使用 ROUND 执行强制舍入。

  • 在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

示例

Products 表中的以下计算列将为 Internet 渠道中的每种产品计算销售排名。

= RANKX(ALL(Products), SUMX(RELATEDTABLE(InternetSales), [SalesAmount]))