INDEX

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

返回按指定顺序排序的指定分区中由位置参数指定的绝对位置的行。 如果无法将当前分区推断为单个分区,可能会返回多个行。

语法

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

参数

术语 定义
position 从中获取数据的绝对位置(基于 1):
- position 为正:1 为第一行,2 为第二行,
- position 为负:-1 为最后一行,-2 为最后一行等。
position 超过边界或零或 BLANK() INDEX 将返回空表。 它可以是返回标量值的任何 DAX 表达式。
relation (可选)从中返回输出的表表达式。
如果指定,partitionBy 中的所有列都必须来自它或相关表。
如果省略:必须显式指定
- orderBy
- 所有 orderBypartitionBy 表达式都必须是完全限定的列名,并且来自单个表。
- 默认为 orderBypartitionBy中的所有列的 ALLSELECTED()
axis (可选)视觉形状中的轴。 仅在视觉计算中可用,并替换 relation
orderBy (可选)包含定义每个分区排序方式的表达式的 ORDERBY() 子句。
如果省略:必须显式指定
- relation
- 默认为 relation 中尚未在 partitionBy中指定的每一列排序。
blanks (可选)一个枚举,用于定义在对 relationaxis进行排序时如何处理空值。
支持的值为:
  • DEFAULT(默认值),其中数值的行为为空值,在零值和负值之间排序。 字符串的行为是空值在所有字符串(包括空字符串)之前排序。
  • FIRST,无论升序或降序排序顺序如何,空白始终在开头排序。
  • LAST,无论升序还是降序排序顺序,始终在末尾对空白进行排序。

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

返回值

位于绝对位置的行。

言论

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

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

如果存在 matchBy,INDEX 将尝试使用 matchBypartitionBy 列来标识行。 如果 matchBy 不存在,并且 orderBy 中指定的列和 partitionBy 无法唯一标识 relation中的每一行:

  • INDEX 将尝试查找唯一标识每行所需的最少列数。
  • 如果可以找到此类列,INDEX 将自动将这些新列追加到 orderBy,并且每个分区都使用此新的 OrderBy 列集进行排序。
  • 如果找不到此类列,则返回错误。

如果:

  • PartitionBy 列的相应外部值不存在于 relation中。
  • position 值是指分区中不存在的位置。

如果在与 relation 相同的表上定义的计算列内使用 INDEX 并且省略 orderBy,则返回错误。

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

示例 1 - 计算列

以下 DAX 查询:

EVALUATE INDEX(1, ALL(DimDate[CalendarYear]))

返回下表:

DimDate[CalendarYear]
2005

示例 2 - 计算列

以下 DAX 查询:

EVALUATE
SUMMARIZECOLUMNS (
    FactInternetSales[ProductKey],
    DimDate[MonthNumberOfYear],
    FILTER (
            VALUES(FactInternetSales[ProductKey]),
            [ProductKey] < 222
    ),
    "CurrentSales", SUM(FactInternetSales[SalesAmount]),
    "LastMonthSales",
    CALCULATE (
        SUM(FactInternetSales[SalesAmount]),
        INDEX(-1, ORDERBY(DimDate[MonthNumberOfYear]))
    )
)
ORDER BY [ProductKey], [MonthNumberOfYear]

返回下表:

FactInternetSales[ProductKey] DimDate[MonthNumberOfYear] [CurrentSales] [LastMonthSales]
214 1 5423.45 8047.7
214 2 4968.58 8047.7
214 3 5598.4 8047.7
214 4 5073.55 8047.7
214 5 5248.5 8047.7
214 6 7487.86 8047.7
214 7 7382.89 8047.7
214 8 6543.13 8047.7
214 9 6788.06 8047.7
214 10 6858.04 8047.7
214 11 8607.54 8047.7
214 12 8047.7 8047.7
217 1 5353.47 7767.78
217 2 4268.78 7767.78
217 3 5773.35 7767.78
217 4 5738.36 7767.78
217 5 6158.24 7767.78
217 6 6998 7767.78
217 7 5563.41 7767.78
217 8 5913.31 7767.78
217 9 5913.31 7767.78
217 10 6823.05 7767.78
217 11 6683.09 7767.78
217 12 7767.78 7767.78

示例 3 - 视觉计算

以下视觉计算 DAX 查询:

SalesComparedToBeginningOfYear = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, ROWS, HIGHESTPARENT))

SalesComparedToBeginningOfQuarter = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, , -1))

增强表,使其包含每个月的表:
- 总销售额;
- 与相应年份的第一个月的差异;
- 和相应季度的第一个月的差异。

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

DAX 视觉计算

OFFSET ORDERBY PARTITIONBY WINDOW RANK ROWNUMBER