ИНДЕКС
Область применения: вычисление вычисляемого столбца вычисляемой таблицы Меры визуального элемента
Возвращает строку в абсолютной позиции, указанной параметром позиции в указанной секции, отсортированной по указанному порядку. Если текущая секция не может быть выведена в одну секцию, может быть возвращено несколько строк.
Синтаксис
INDEX(<position>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
Параметры
Термин | Определение |
---|---|
Позиция | Абсолютная позиция (1 на основе), из которой можно получить данные: — <позиция> положительна: 1 — первая строка, 2 — вторая строка и т. д. — позиция> отрицательная: -1 — последняя строка, -2 — вторая последняя строка и т. <д. Если <позиция> выходит из границы, или ноль, или BLANK(), INDEX возвращает пустую таблицу. Это может быть любое выражение DAX, возвращающее скалярное значение. |
relation | (Необязательно) Табличное выражение, из которого возвращаются выходные данные. Если задано, все столбцы в <partitionBy> должны поступать из нее или связанной таблицы. Если опущено: — <orderBy> должен быть явно указан. — Все <выражения orderBy> и <partitionBy> должны быть полными именами столбцов и поступать из одной таблицы. — Значение по умолчанию — ALLSELECTED() всех столбцов в <порядке> и <partitionBy>. |
Ось X | (Необязательно) Ось в визуальной форме. Доступно только в визуальных вычислениях и заменяет <отношение>. |
orderBy | (Необязательно) Предложение ORDERBY(), содержащее выражения, определяющие порядок сортировки каждой секции. Если опущено: — <связь> должна быть явно указана. — по умолчанию упорядочивается по каждому столбцу в <отношении> , который еще не указан в <partitionBy>. |
Пробелы | (Необязательно) Перечисление, определяющее, как обрабатывать пустые значения при сортировке. Этот параметр зарезервирован для дальнейшего использования. В настоящее время единственным поддерживаемым значением является DEFAULT, где поведение числовых значений — пустые значения упорядочены от нуля до отрицательных значений. Поведение строк является пустым значением, упорядоченным перед всеми строками, включая пустые строки. |
partitionBy | (Необязательно) Предложение PARTITIONBY(), содержащее столбцы, определяющие <секционирование отношений> . Если опущено, <реляционная связь> рассматривается как одна секция. |
matchBy | (Необязательно) Предложение MATCHBY(), содержащее столбцы, определяющие сопоставление данных и определение текущей строки. |
reset | (Необязательно) Доступно только в визуальных вычислениях. Указывает, сбрасывается ли вычисление и на каком уровне иерархии столбцов визуальной фигуры. Допустимые значения: NONE, LOWESTPARENT, HIGHESTPARENT или целое число. Поведение зависит от целочисленного знака: если ноль или опущено, вычисление не сбрасывается. Эквивалент NONE. — Если положительный, целое число определяет столбец, начиная с самого высокого, независимо от зерна. САМЫЙ ВЫСОКИЙ УРОВЕНЬ ЭКВИВАЛЕНТЕН 1. — Если отрицательное, целое число определяет столбец, начиная с самого низкого, относительно текущего зерна. САМЫЙ НИЗКИЙPARENT эквивалентен -1. |
Возвращаемое значение
Строка в абсолютной позиции.
Замечания
Каждый <столбец partitionBy> и <matchBy> должен иметь соответствующее внешнее значение, чтобы определить "текущую секцию", с помощью следующего поведения:
- Если есть ровно один соответствующий внешний столбец, используется его значение.
- Если нет соответствующего внешнего столбца:
- ИНДЕКС сначала определяет все <столбцы partitionBy> и <matchBy> , у которых нет соответствующего внешнего столбца.
- Для каждого сочетания существующих значений для этих столбцов в родительском контексте INDEX вычисляется индекс и возвращается строка.
- Окончательные выходные данные INDEX — это объединение этих строк.
- Если существует несколько соответствующих внешних столбцов, возвращается ошибка.
Если <значение matchBy присутствует, INDEX попытается использовать <столбцы matchBy>> и <partitionBy> для идентификации строки.
Если <matchBy> отсутствует, и столбцы, указанные в <orderBy> и <partitionBy> , не могут однозначно идентифицировать каждую строку в <отношении>:
- INDEX попытается найти наименьшее количество дополнительных столбцов, необходимых для уникальной идентификации каждой строки.
- Если такие столбцы можно найти, ИНДЕКС автоматически добавит эти новые столбцы в <порядок,> и каждая секция сортируется с помощью этого нового набора столбцов OrderBy.
- Если такие столбцы не удается найти, возвращается ошибка.
Если возвращается пустая таблица:
- Соответствующее внешнее значение столбца PartitionBy не существует в <связи>.
- Значение <позиции> относится к позиции, которая не существует в разделе.
Если индекс используется в вычисляемом столбце, определенном в той же таблице, что <и реляционная> строка и <orderBy> , опущена, возвращается ошибка.
<сброс> можно использовать только в визуальных вычислениях и не может использоваться в сочетании с <orderBy> или <partitionBy>. Если <сброс> присутствует, ось> может быть указана, <но <связь> не может быть указана.
Пример 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))
Улучшение таблицы таким образом, чтобы она содержала, для каждого месяца:
- общая сумма продаж;
- разница до первого месяца соответствующего года;
- и разница в первом месяце соответствующего квартала.
Снимок экрана ниже: визуальная матрица и первое выражение визуального вычисления: