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


OFFSET

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

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

Синтаксис

OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Параметры

Срок Определение
delta Число строк до (отрицательное значение) или после (положительное значение) текущей строки, из которой необходимо получить данные. Это может быть любое выражение DAX, возвращающее скалярное значение.
relation (Необязательно) Табличное выражение, из которого возвращается выходная строка.
Если указано, все столбцы в partitionBy должны поступать из нее или связанной таблицы.
Если опущено:
- orderBy необходимо явно указать.
. Все выражения orderBy и partitionBy должны быть полными именами столбцов и поступать из одной таблицы.
— по умолчанию ALLSELECTED() всех столбцов в orderBy и partitionBy.
axis (Необязательно) Ось в визуальной форме. Доступно только в визуальных вычислениях и заменяет relation.
orderBy (Необязательно) Предложение ORDERBY(), содержащее выражения, определяющие порядок сортировки каждой секции.
Если опущено:
- relation необходимо явно указать.
— по умолчанию упорядочивается по каждому столбцу в relation, который еще не указан в partitionBy.
blanks (Необязательно) Перечисление, определяющее, как обрабатывать пустые значения при сортировке relation или axis.
Поддерживаемые значения:
  • DEFAULT (значение по умолчанию), где поведение числовых значений является пустыми значениями, упорядочены от нуля до отрицательных значений. Поведение строк является пустым значением, упорядоченным перед всеми строками, включая пустые строки.
  • FIRST, пустые поля всегда упорядочены в начале независимо от возрастания или убывающего порядка сортировки.
  • LAST, пустые всегда упорядочены в конце независимо от возрастания или убывания сортировки.

Примечание. Если параметр blanks и пустые значения в функции ORDERBY() для отдельных выражений указываются, blanks для отдельного выражения orderBy имеет приоритет для соответствующего выражения orderBy, а выражения orderBy без blanks заданы будут учитывать параметр blanks родительской функции.
partitionBy (Необязательно) Предложение PARTITIONBY(), содержащее столбцы, определяющие секционирование relation. Если опущено, relation рассматривается как одна секция.
matchBy (Необязательно) Предложение MATCHBY(), содержащее столбцы, определяющие сопоставление данных и определение текущей строки.
reset (Необязательно) Доступно только в визуальных вычислениях. Указывает, сбрасывается ли вычисление и на каком уровне иерархии столбцов визуальной фигуры. Допустимые значения: ссылка на поле столбца в текущей визуальной форме, NONE (по умолчанию), LOWESTPARENT, HIGHESTPARENTили целое число. Поведение зависит от целочисленного знака:
— если нулевая или опущенная, вычисление не сбрасывается. Эквивалентно NONE.
— если положительный, целое число определяет столбец, начиная с самого высокого, независимо от зерна. HIGHESTPARENT эквивалентно 1.
— если отрицательно, целое число определяет столбец, начиная с самого низкого, относительно текущего зерна. LOWESTPARENT эквивалентно -1.

Возвращаемое значение

Одна или несколько строк из relation.

Замечания

За исключением столбцов, добавленных DAX табличными функциями, каждый столбец в relation, если matchBy отсутствует, или каждый столбец в matchBy и partitionBy, если matchBy присутствует, должен иметь соответствующее внешнее значение, чтобы помочь определить текущую строку, в которой следует работать, с помощью следующего поведения:

  • Если есть ровно один соответствующий внешний столбец, используется его значение.
  • Если соответствующий внешний столбец отсутствует, то:
    • OFFSET сначала определит все столбцы, у которых нет соответствующего внешнего столбца.
    • Для каждого сочетания существующих значений для этих столбцов в родительском контексте OFFSETвычисляется OFFSET и возвращается строка.
    • OFFSETконечные выходные данные являются объединением этих строк.
  • Если существует несколько соответствующих внешних столбцов, возвращается ошибка.

Если все столбцы relationбыли добавлены DAX табличными функциями, возвращается ошибка.

Если matchBy присутствует, OFFSET попытается использовать matchBy и partitionBy столбцы для идентификации строки. Если matchBy отсутствует, и столбцы, указанные в orderBy и partitionBy, не могут однозначно идентифицировать каждую строку в relation, а затем:

  • OFFSET попытается найти наименьшее количество дополнительных столбцов, необходимых для уникальной идентификации каждой строки.
  • Если такие столбцы можно найти, OFFSET автоматически добавит эти новые столбцы в orderBy, и каждая секция сортируется с помощью этого нового набора столбцов OrderBy.
  • Если такие столбцы не удается найти, возвращается ошибка.

Если возвращается пустая таблица:

  • Соответствующее внешнее значение столбца OrderBy или PartitionBy не существует в relation.
  • Значение delta приводит к переходу к строке, которая не существует в разделе.

Если OFFSET используется в вычисляемом столбце, определенном в той же таблице, что и relation, и orderBy опущен, возвращается ошибка.

reset можно использовать только в визуальных вычислениях и не может использоваться в сочетании с orderBy или partitionBy. Если reset присутствует, axis можно указать, но relation невозможно.

Пример 1— вычисляемый столбец

Следующий запрос DAX:

DEFINE
VAR vRelation = SUMMARIZECOLUMNS ( 
                    DimProductCategory[EnglishProductCategoryName], 
                    DimDate[CalendarYear], 
                    "CurrentYearSales", SUM(FactInternetSales[SalesAmount]) 
                  )
EVALUATE
ADDCOLUMNS (
    vRelation, 
    "PreviousYearSales", 
    SELECTCOLUMNS(
        OFFSET ( 
                -1, 
                vRelation, 
                ORDERBY([CalendarYear]), 
                PARTITIONBY([EnglishProductCategoryName])
        ),
        [CurrentYearSales]
    )
)

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

Пример 2. Мера

Следующий запрос DAX:

DEFINE
MEASURE DimProduct[CurrentYearSales] = SUM(FactInternetSales[SalesAmount])
MEASURE DimProduct[PreviousYearSales] = CALCULATE(SUM(FactInternetSales[SalesAmount]), OFFSET(-1, , ORDERBY(DimDate[CalendarYear])))
EVALUATE
SUMMARIZECOLUMNS (
    DimDate[CalendarYear],
    "CurrentYearSales", DimProduct[CurrentYearSales],
    "PreviousYearSales", DimProduct[PreviousYearSales]
)

Использует OFFSET() в меру для возврата таблицы, которая суммирует общий объем продаж за каждый календарный год и общий объем продаж за предыдущий год.

Пример 3. Вычисляемый столбец

Следующий запрос DAX:

EVALUATE
ADDCOLUMNS (
    FactInternetSales,
    "Previous Sales Amount",
        SELECTCOLUMNS (
            OFFSET (
                -1,
                FactInternetSales,
                ORDERBY ( FactInternetSales[SalesAmount], DESC ),
                PARTITIONBY ( FactInternetSales[ProductKey] ),
                MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
            ),
            FactInternetSales[SalesAmount]
        )
)

Возвращает таблицу FactInternetSales с добавлением столбца, указывающего, для каждой продажи, суммы предыдущей продажи одного и того же продукта в порядке убывания объема продаж, при этом текущая продажа определяется его SalesOrderNumber и SalesOrderLineNumber. Без MATCHBYзапрос вернет ошибку, так как в таблице FactInternetSales отсутствуют ключевые столбцы.

Пример 4. Визуальное вычисление

Следующий визуальный расчет DAX запроса:

SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))

Возвращает разницу в общем объеме продаж между каждым месяцем и предыдущим в течение одного года.

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

DAX визуального вычисления

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER