OFFSET
Область применения: вычисление вычисляемого столбца вычисляемой таблицы Меры визуального элемента
Возвращает одну строку, расположенную либо до или после текущей строки в одной таблице, по заданному смещением. Если текущая строка не может быть выведена в одну строку, может быть возвращено несколько строк.
Синтаксис
OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
Параметры
Термин | Определение |
---|---|
delta | Число строк до (отрицательное значение) или после (положительное значение) текущей строки, из которой необходимо получить данные. Это может быть любое выражение 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. |
Возвращаемое значение
Одна или несколько строк из <реляционного отношения>.
Замечания
За исключением столбцов, добавленных функциями таблицы DAX, каждый столбец в <отношении>, если совпадениеBy> отсутствует, или каждый столбец в <matchBy> и <partitionBy>, при <<наличии сопоставленияBy> должен иметь соответствующее внешнее значение, чтобы помочь определить текущую строку, в которой следует работать, с помощью следующего поведения:
- Если есть ровно один соответствующий внешний столбец, используется его значение.
- Если соответствующий внешний столбец отсутствует, то:
- OFFSET сначала определяет все столбцы, у которых нет соответствующего внешнего столбца.
- Для каждого сочетания существующих значений для этих столбцов в родительском контексте OFFSET вычисляется смещение и возвращается строка.
- Окончательные выходные данные OFFSET — это объединение этих строк.
- Если существует несколько соответствующих внешних столбцов, возвращается ошибка.
Если все <столбцы отношения> были добавлены функциями таблицы DAX, возвращается ошибка.
Если <значение matchBy> присутствует, OFFSET попытается использовать <столбцы matchBy> и <partitionBy> для идентификации строки.
Если <matchBy> отсутствует, и столбцы, указанные в <orderBy> и <partitionBy> , не могут однозначно идентифицировать каждую строку в <отношении>, а затем:
- OFFSET попытается найти наименьшее количество дополнительных столбцов, необходимых для уникальной идентификации каждой строки.
- Если такие столбцы можно найти, OFFSET автоматически добавит эти новые столбцы в <порядок,> и каждая секция сортируется с помощью этого нового набора столбцов OrderBy.
- Если такие столбцы не удается найти, возвращается ошибка.
Если возвращается пустая таблица:
- Соответствующее внешнее значение столбца OrderBy или PartitionBy не существует в <отношении>.
- Разностное <> значение приводит к перемещению в строку, которая не существует в разделе.
Если OFFSET используется в вычисляемом столбце, определенном в той же таблице, что <и отношение>, и <orderBy> опущен, возвращается ошибка.
<сброс> можно использовать только в визуальных вычислениях и не может использоваться в сочетании с <orderBy> или <partitionBy>. Если <сброс> присутствует, ось> может быть указана, <но <связь> не может быть указана.
Пример 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))
Возвращает разницу в общем объеме продаж между каждым месяцем и предыдущим в течение одного года.
Снимок экрана ниже: визуальная матрица и выражение визуального вычисления: