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 должны быть полными именами столбцов и поступать из одной таблицы.
— по умолчанию ALLSELECTED() всех столбцов в orderBy и partitionBy . |
axis |
(Необязательно) Ось в визуальной форме. Доступно только в визуальных вычислениях и заменяет relation . |
orderBy |
(Необязательно) Предложение ORDERBY(), содержащее выражения, определяющие порядок сортировки каждой секции.
Если опущено: - relation необходимо явно указать.
— по умолчанию упорядочивается по каждому столбцу в relation , который еще не указан в partitionBy . |
blanks |
(Необязательно) Перечисление, определяющее, как обрабатывать пустые значения при сортировке relation или axis .
Поддерживаемые значения:
Примечание. Если параметр blanks и пустые значения в функции ORDERBY() для отдельных выражений указываются, blanks для отдельного выражения orderBy имеет приоритет для соответствующего выражения orderBy, а выражения orderBy без blanks заданы будут учитывать параметр 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
ссылается на положение, которое не существует в разделе.
Если INDEX используется в вычисляемом столбце, определенном в той же таблице, что и relation
, и 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))
Улучшение таблицы таким образом, чтобы она содержала, за каждый месяц:
- общий объем продаж;
- разница в первом месяце соответствующего года;
- и разница в первом месяце соответствующего квартала.
Снимок экрана ниже: визуальная матрица и первое выражение визуального вычисления: