Поделиться через


ИНДЕКС

Область применения: вычисление вычисляемого столбца вычисляемой таблицы Меры визуального элемента

Возвращает строку в абсолютной позиции, указанной параметром позиции в указанной секции, отсортированной по указанному порядку. Если текущая секция не может быть выведена в одну секцию, может быть возвращено несколько строк.

Синтаксис

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))

Улучшение таблицы таким образом, чтобы она содержала, для каждого месяца:
- общая сумма продаж;
- разница до первого месяца соответствующего года;
- и разница в первом месяце соответствующего квартала.

Снимок экрана ниже: визуальная матрица и первое выражение визуального вычисления:

Вычисление визуального элемента DAX

OFFSET
ORDERBY
PARTITIONBY
WINDOW
RANK
ROWNUMBER