ROWNUMBER

适用于:计算列计算表视觉计算

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

语法

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

parameters

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

注意,如果同时指定 blanks 函数中的 ORDERBY 参数和空值,则单个 orderBy 表达式上的 优先于相关 orderBy 表达式,而未指定 blanks orderBy 表达式将遵循父函数上的 blanks 参数。
partitionBy (可选)一个PARTITIONBY () 子句,其中包含定义分区方式relation的列。 如果省略,则 relation 被视为单个分区。
matchBy (可选)一个MATCHBY () 子句,其中包含定义如何匹配数据和标识当前行的列。
reset (可选)仅在视觉计算中可用。 指示计算是否重置,以及视觉形状的列层次结构的哪个级别。 接受的值包括:对当前视觉形状、NONE(默认值)、LOWESTPARENTHIGHESTPARENT或整数中的列的字段引用。 此行为取决于整数符号:
- 如果为零或省略,则计算不会重置。 等效于 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

如果值为绝对值 reset (即正整数或 HIGHESTPARENT 字段引用),并且计算在层次结构中目标级别或高于目标级别,则计算将重置每个元素。 也就是说,函数在仅包含该特定元素的分区中求值。

示例 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