INDEX

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

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

语法

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

参数

术语 定义
position 从中获取数据的绝对位置(从 1 开始):
- position 为正:1 是 first 行,2 是 second 行等。
- position 为负:-1 为 last 行,-2 为 secondlast 行等。
position 出边界时,or 零,orBLANK() INDEX 将返回空表。 它可以是返回标量 value的任何 DAX 表达式。
relation (可选)从中返回输出的表表达式。
If 指定,partitionBy 中的 all 列必须来自 orrelated 表。 省略
If:必须显式指定
- orderBy
- AllorderByandpartitionBy 表达式必须是来自单个表的完全限定列名 and。
- 默认为 orderByandpartitionBy中 all 列的 ALLSELECTED()
axis (可选)视觉形状中的轴。 仅在视觉计算中可用,and 替换 relation
orderBy (可选)一个 ORDERBY() 子句,其中包含 define 每个分区排序方式的表达式。 省略
If:必须显式指定
- relation
- 默认按 relation 中已 notpartitionBy中指定的每一列进行排序。
blanks (可选)定义排序时如何处理 blankvalues 的枚举。
此参数保留供将来使用。
目前,唯一受支持的 value 是 DEFAULT,其中数值 valuesblankvalues 的行为在零 and 负 values之间排序。 字符串的行为 blankvalues 在 all 字符串(包括空字符串)之前排序。
partitionBy (可选)一个 PARTITIONBY() 子句,其中包含 define 如何对 relation 进行分区的列。
If 省略,relation 被视为单个分区。
matchBy (可选)一个 MATCHBY() 子句,其中包含 define 如何匹配数据 and 标识当前行的列。
reset (可选)仅在视觉计算中可用。 指示 if 计算重置,and 视觉形状的列层次结构级别。 接受的 values 为:NONELOWESTPARENTHIGHESTPARENT、or 整数。 此行为取决于整数 sign:
- If 省略零 or,计算 not 重置。 等效于 NONE
- If 正,整数标识从最高、与粒度无关的列。 HIGHESTPARENT 等效于 1。
- If 负数,整数标识从最低到当前粒度的列。 LOWESTPARENT 等效于 -1。

返回 value

位于绝对位置的行。

言论

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

  • If 正好有一个对应的外部列,则使用其 value。
  • If 没有相应的外部列:
    • INDEX 将 first 确定没有相应外部列的 allpartitionByandmatchBy 列。
    • 对于 INDEX父上下文中这些列的现有 values 的每个组合,and 返回行 INDEX。
    • INDEX的最终输出是这些行的 union。
  • If 有多个相应的外部列,则返回 error。

If matchBy 存在,INDEX 将尝试使用 matchByandpartitionBy 列来标识行。 If matchBy not 存在 andorderByandpartitionBy 中指定的列无法唯一标识 relation的每一行:

  • INDEX 将尝试 find 唯一标识每行所需的最少列数。
  • If 可以找到此类列,INDEX 会自动将这些新列追加到 orderBy,and 每个分区都使用此新 OrderBy 列集进行排序。
  • 找不到此类列 If 返回 error。

if返回空表:

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

If INDEX 在与 relationandorderBy 相同的表中定义的计算列内使用,则返回 error。

reset 只能用于视觉计算,and 不能与 orderByorpartitionBy结合使用。 If 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))

增强表,使其 contains,每个 month:
- 总销售额;
- 各自 yearfirstmonth 的差异;
- and 各自 quarterfirstmonth 的差异。

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

DAX 视觉计算

OFFSET ORDERBY PARTITIONBY WINDOW RANK ROWNUMBER