ROWNUMBER

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

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

语法

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

parameters

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

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

返回值

当前上下文的行号。

备注

每个 <orderBy>、<partitionBy> 和 <matchBy> 列都必须具有相应的外部值,帮助定义要操作的当前行,其行为如下:

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

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

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

<reset> 只能用于视觉计算,不能与 <orderBy> 或 <partitionBy> 结合使用。 如果存在 <reset>,则可以指定 <axis>,但不能指定 <relation>。

示例 1 - 计算列

以下 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 查询:

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

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

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

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

DAX 视觉计算

INDEX
ORDERBY
PARTITIONBY
WINDOW
RANK