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 。
- 所有 orderBy 和 partitionBy 表达式都必须是完全限定的列名,并且来自单个表。
- 默认为 orderBy 和 partitionBy 中的所有列的 ALLSELECTED() 。 |
axis |
(可选)视觉形状中的轴。 仅在视觉计算中可用,并替换 relation 。 |
orderBy |
(可选)包含定义每个分区排序方式的表达式的 ORDERBY() 子句。
如果省略:必须显式指定 - relation 。
- 默认为 relation 中尚未在 partitionBy 中指定的每一列排序。 |
blanks |
(可选)一个枚举,用于定义在对 relation 或 axis 进行排序时如何处理空值。
支持的值为:
注意,如果同时指定 ORDERBY() 函数中的 blanks 参数和空值,则单个 orderBy 表达式上的 blanks 优先于相关 orderBy 表达式,而未指定 blanks orderBy 表达式将遵循父函数上的 blanks 参数。 |
partitionBy |
(可选)PARTITIONBY() 子句,其中包含定义如何对 relation 进行分区的列。 如果省略,则 relation 被视为单个分区。 |
matchBy |
(可选)MATCHBY() 子句,其中包含定义如何匹配数据和标识当前行的列。 |
reset |
(可选)仅在视觉计算中可用。 指示计算是否重置,以及视觉形状的列层次结构的哪个级别。 接受的值包括:对当前视觉形状、NONE (默认值)、LOWESTPARENT 、HIGHESTPARENT 或整数中的列的字段引用。 此行为取决于整数符号:- 如果为零或省略,则计算不会重置。 等效于 NONE 。
- 如果为正值,则整数标识从最高、与粒度无关的列。 HIGHESTPARENT 等效于 1。
- 如果为负数,则整数标识从最低到当前粒度的列。 LOWESTPARENT 等效于 -1。 |
返回值
位于绝对位置的行。
言论
每个 partitionBy
和 matchBy
列必须具有相应的外部值,以帮助定义要对其操作的“当前分区”,并具有以下行为:
- 如果正好有一个对应的外部列,则使用其值。
- 如果没有相应的外部列:
-
INDEX 将首先确定没有相应外部列的所有
partitionBy
和matchBy
列。 - 对于 INDEX父上下文中这些列的现有值的每个组合,将计算 INDEX 并返回一行。
- INDEX的最终输出是这些行的联合。
-
INDEX 将首先确定没有相应外部列的所有
- 如果有多个相应的外部列,则返回错误。
如果存在 matchBy
,INDEX 将尝试使用 matchBy
和 partitionBy
列来标识行。
如果 matchBy
不存在,并且 orderBy
中指定的列和 partitionBy
无法唯一标识 relation
中的每一行:
- INDEX 将尝试查找唯一标识每行所需的最少列数。
- 如果可以找到此类列,INDEX 将自动将这些新列追加到
orderBy
,并且每个分区都使用此新的 OrderBy 列集进行排序。 - 如果找不到此类列,则返回错误。
如果:
- PartitionBy 列的相应外部值不存在于
relation
中。 -
position
值是指分区中不存在的位置。
如果在与 relation
相同的表上定义的计算列内使用 INDEX 并且省略 orderBy
,则返回错误。
reset
只能用于视觉计算,不能与 orderBy
或 partitionBy
结合使用。 如果存在 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))
增强表,使其包含每个月的表:
- 总销售额;
- 与相应年份的第一个月的差异;
- 和相应季度的第一个月的差异。
以下屏幕截图显示了视觉对象矩阵和第一个视觉对象计算表达式: