ROWNUMBER

适用于:计算列计算表度量值视觉计算

返回当前上下文在指定分区内按指定顺序排序的唯一级别。 如果找不到匹配项,则行号为空。

语法

DAX
ROWNUMBER ( [<relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

parameters

术语 定义
relation (可选)从中返回输出行的表表达式。
如果指定,则 orderBypartitionBy 中的所有列都必须来自它。
如果省略:必须显式指定
- orderBy
- 所有 orderBy 列和 partitionBy 列必须完全限定,并且来自单个表。
- 默认为 orderBypartitionBy中的所有列的 ALLSELECTED()。
axis (可选)视觉形状中的轴。 仅在视觉计算中可用,并替换 relation
orderBy (可选)包含用于定义每个分区排序方式的列的 ORDERBY() 子句。
如果省略:必须显式指定
- relation
- 默认为 relation 中尚未在 partitionBy中指定的每一列排序。
blanks (可选)定义排序时如何处理空白值的枚举。
支持的值包括:
  • 采用 DEFAULT(默认值)时,数值的行为是空白值在零和负值之间排序。 字符串的行为是空白值排列在所有字符串(包括空字符串)之前。
  • 采用 FIRST 时,无论升序或降序排序,空格始终排在开头。
  • 采用 LAST 时,无论升序或降序排序,空格始终排在末尾。

注意,当同时指定单个表达式上的 orderBY() 函数 blanks 参数和空白时,blanks 单个 orderBy 表达式的优先级为相关 orderBy 表达式,而未指定 blanks orderBy 表达式将遵循父 Window 函数上的 blanks 参数。
partitionBy (可选)PARTITIONBY() 子句,其中包含定义如何分区 relation 的列。
如果省略,则 relation 被视为单个分区。
matchBy (可选)包含用于定义如何匹配数据和标识当前行的列的 MATCHBY() 子句。
reset (可选)仅在视觉计算中可用。 指示计算是否重置,以及处于视觉形状的列层次结构的哪个级别。 接受的值为:NONE、LOWESTPARENT、HIGHESTPARENT 或整数。 此行为取决于整数符号:
- 如果为零或省略,则计算不会重置。 等效于 NONE。
- 如果为正值,则整数标识从最高开始的列、与粒度无关。 HIGHESTPARENT 等效于 1。
- 如果为负值,则整数标识相对于当前粒度从最低开始的列。 LOWESTPARENT 等效于 -1。

返回值

当前上下文的行号。

备注

每个 orderBypartitionBymatchBy 列必须具有相应的外部值,以帮助定义要对其操作的当前行,并具有以下行为:

  • 如果正好有一个对应的外部列,则使用其值。
  • 如果没有对应的外部列,则:
    • ROWNUMBER 首先将确定没有相应外部列的所有 orderBypartitionBymatchBy 列。
    • 对于 ROWNUMBER 父上下文中这些列的现有值的每个组合,将计算 ROWNUMBER 并返回一行。
    • ROWNUMBER 的最终输出是这些行的并集。
  • 如果有多个对应的外部列,则会返回错误。

如果存在 matchBy,则 ROWNUMBER 将尝试使用 matchBy 中的列,并 partitionBy 以 idenfity 当前行。
如果 orderBy 中指定的列和 partitionBy 无法唯一标识 relation中的每一行,则:

  • ROWNUMBER 将尝试查找唯一地标识每行所需的最少数量的附加列。
  • 如果可以找到这种列,ROWNUMBER 将
    • 尝试查找唯一地标识每行所需的最少数量的附加列。
    • 自动将这些新列追加到 orderBy 子句。
    • 使用这组新的 orderBy 列对每个分区进行排序。
  • 如果找不到此类列,并且函数在运行时检测到绑定,则返回错误。

reset 只能用于视觉计算,不能与 orderBypartitionBy结合使用。 如果存在 reset,则可以指定 axis,但无法指定 relation

示例 1 - 计算列

以下 DAX 查询:

DAX
EVALUATE
ADDCOLUMNS(
    'DimGeography',
    "UniqueRank",
    ROWNUMBER(
    	'DimGeography',
    	ORDERBY(
    		'DimGeography'[StateProvinceName], desc,
    		'DimGeography'[City], asc),
    	PARTITIONBY(
    		'DimGeography'[EnglishCountryRegionName])))
ORDER BY [EnglishCountryRegionName] asc, [StateProvinceName] desc, [City] asc

返回一个表,该表按 StateProvinceName 和 City 对具有相同 EnglishCountryRegionName 的每个地理位置进行唯一排名。

示例 2 - 视觉计算

以下视觉计算 DAX 查询:

DAX
SalesRankWithinYear = ROWNUMBER(ORDERBY([SalesAmount], DESC), PARTITIONBY([CalendarYear]))

SalesRankAllHistory = ROWNUMBER(ORDERBY([SalesAmount], DESC))

创建两列,根据每年内的总销售额和整个历史记录对每个月进行唯一排名。

以下屏幕截图显示了视觉对象矩阵和第一个视觉计算表达式:

DAX 视觉计算

INDEX
ORDERBY
PARTITIONBY
WINDOW
RANK