计算排名
RANKX
DAX 函数是可用于计算排名的特殊迭代器函数。 其基本语法如下:
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
与所有迭代器函数相似,必须传入表和表达式。 (可选)可以传入排名值、设置订单方向或确定在关联值时如何处理排名。
顺序方向
顺序方向为“升序”或“降序”。 当对收入值等有利内容排名时,可能会使用降序排列,以使最高收入排在第一位。 当对客户投诉等不利内容排名时,可能会使用升序排列,以使投诉的最小编号排在第一位。 如果未传入 order 参数,则函数将使用 0(零)(用于降序顺序)。
处理关联
可以通过跳过排名值或使用密集排名来处理关联,这会在关联后使用下一个排名值。 如果未传入关联参数,则函数将使用“跳过”。 稍后,你将有机会在本单元中使用每个关联参数的示例。
创建排名度量值
将以下度量值添加到 Product 表:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity]
)
将产品数量排名度量值添加到位于报表第 2 页的表视觉对象。 表视觉对象对自行车产品分类并显示数量(按降序数量订购产品)。
RANKX
函数将循环访问由 ALL
DAX 函数返回的表。
ALL
函数用于返回模型表中的所有行或一个或多个列中的值,并且忽略所有筛选器。 因此,在这种情况下,它将返回一个表,该表包含 Product 表中所有 Product 列值。
RANKX
函数必须使用 ALL
函数,因为表视觉对象将按产品分组(这是 Product 表上的筛选器)。
在表视觉对象中,请注意,两个产品将与第十个位置相关联,下一个产品的排名为 12。 此视觉对象是使用“已跳过”关联参数的示例。
下一项任务是输入以下逻辑,以修改“产品数量排名”度量定义,以使用密集排名:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
请注意,在表视觉对象中,跳过的排名已不再存在。 将两个产品关联到第十个位置之后,下一个排名为 11。
请注意,“产品数量排名”的表视觉对象总计为一 (1)。 原因是因为所有产品的总数均已排名。
这并不适合对总计产品进行排名,因此,你现在将使用以下逻辑修改度量值定义以返回 BLANK,除非筛选单个产品:
Product Quantity Rank =
IF(
HASONEVALUE('Product'[Product]),
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
)
请注意,“产品数量排名”的合计现在为 BLANK,这是通过使用 HASONEVALUE
DAX 函数来实现的,以测试 Product 表中的 Product 列在筛选器上下文中是否有单个值。 每个产品组都是这种情况,但代表所有产品的总计不是。
筛选器上下文和 HASONEVALUE
函数将在筛选器上下文模块中引入。