OFFSET
Aplica-se a:Coluna calculadaTabela calculadaMedidaCálculo visual
Retorna uma única linha posicionada antes ou depois da linha atual dentro da mesma tabela, por um determinado deslocamento. Se a linha atual não puder ser deduzida para uma única linha, várias linhas poderão ser retornadas.
Sintaxe
OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
Parâmetros
Vigência | Definição |
---|---|
delta |
O número de linhas antes (valor negativo) ou depois (valor positivo) da linha atual a partir da qual obter os dados. Pode ser qualquer expressão DAX que retorna um valor escalar. |
relation |
(Opcional) Uma expressão de tabela da qual a linha de saída é retornada.
Se especificado, todas as colunas em partitionBy devem vir dele ou de uma tabela relacionada.
Se omitido: - orderBy deve ser explicitamente especificado.- Todas as expressões orderBy e partitionBy devem ser nomes de colunas totalmente qualificados e provenientes de uma única tabela.
- O padrão é ALLSELECTED() de todas as colunas em orderBy e partitionBy . |
axis |
(Opcional) Um eixo na forma visual. Disponível apenas em cálculos visuais e substitui relation . |
orderBy |
(Opcional) Uma cláusula ORDERBY() que contém as expressões que definem como cada partição é classificada.
Se omitido: - relation deve ser explicitamente especificado.
- O padrão é ordenar por cada coluna em relation que ainda não esteja especificado em partitionBy . |
blanks |
(Opcional) Uma enumeração que define como manipular valores em branco ao classificar o relation ou axis .
Os valores suportados são:
|
partitionBy |
(Opcional) Uma cláusula PARTITIONBY() que contém as colunas que definem como relation é particionada. Se omitido, relation é tratado como uma única partição. |
matchBy |
(Opcional) Uma cláusula MATCHBY() contendo as colunas que definem como corresponder dados e identificar a linha atual. |
reset |
(Opcional) Disponível apenas em cálculos visuais. Indica se o cálculo é redefinido e em que nível da hierarquia de colunas da forma visual. Os valores aceitos são: uma referência de campo a uma coluna na forma visual atual, NONE (padrão), LOWESTPARENT , HIGHESTPARENT ou um inteiro. O comportamento depende do sinal inteiro: - Se zero ou omitido, o cálculo não é reiniciado. Equivalente a NONE .
- Se positivo, o inteiro identifica a coluna a partir do mais alto, independente do grão. HIGHESTPARENT equivale a 1.
- Se negativo, o inteiro identifica a coluna a partir do mais baixo, em relação ao grão atual. LOWESTPARENT é equivalente a -1. |
Valor de retorno
Uma ou mais linhas de relation
.
Comentários
Exceto para colunas adicionadas por DAX funções de tabela, cada coluna em relation
, quando matchBy
não está presente, ou cada coluna em matchBy
e partitionBy
, quando matchBy
está presente, deve ter um valor externo correspondente para ajudar a definir a linha atual na qual operar, com o seguinte comportamento:
- Se houver exatamente uma coluna externa correspondente, seu valor será usado.
- Se não existir uma coluna exterior correspondente, então:
- OFFSET primeiro determinará todas as colunas que não têm coluna externa correspondente.
- Para cada combinação de valores existentes para essas colunas no contexto pai do OFFSET, OFFSET é avaliada e uma linha é retornada.
- OFFSETsaída final é uma união dessas linhas.
- Se houver mais de uma coluna externa correspondente, um erro será retornado.
Se todas as colunas do relation
foram adicionadas por DAX funções da tabela, um erro será retornado.
Se matchBy
estiver presente, OFFSET tentará usar matchBy
e partitionBy
colunas para identificar a linha.
Se matchBy
não estiver presente e as colunas especificadas em orderBy
e partitionBy
não puderem identificar exclusivamente todas as linhas relation
, então:
- OFFSET tentará encontrar o menor número de colunas adicionais necessárias para identificar exclusivamente cada linha.
- Se essas colunas puderem ser encontradas, OFFSET acrescentará automaticamente essas novas colunas a
orderBy
, e cada partição será classificada usando esse novo conjunto de colunas OrderBy. - Se essas colunas não puderem ser encontradas, um erro será retornado.
Uma tabela vazia é retornada se:
- O valor externo correspondente de uma coluna OrderBy ou PartitionBy não existe dentro
relation
. - O valor
delta
causa uma mudança para uma linha que não existe dentro da partição.
Se OFFSET for usado dentro de uma coluna calculada definida na mesma tabela que relation
e orderBy
for omitido, um erro será retornado.
reset
pode ser usado apenas em cálculos visuais e não pode ser usado em combinação com orderBy
ou partitionBy
. Se reset
estiver presente, axis
pode ser especificado, mas relation
não pode.
Exemplo 1 - coluna calculada
O seguinte DAX consulta:
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]
)
)
Devolve uma tabela que resume o total de vendas para cada categoria de produto e ano civil, bem como o total de vendas para essa categoria no ano anterior.
Exemplo 2 - medida
O seguinte DAX consulta:
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]
)
Usa OFFSET() em uma medida para retornar uma tabela que resume o total de vendas para cada ano civil e o total de vendas para o ano anterior.
Exemplo 3 - coluna calculada
O seguinte DAX consulta:
EVALUATE
ADDCOLUMNS (
FactInternetSales,
"Previous Sales Amount",
SELECTCOLUMNS (
OFFSET (
-1,
FactInternetSales,
ORDERBY ( FactInternetSales[SalesAmount], DESC ),
PARTITIONBY ( FactInternetSales[ProductKey] ),
MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
),
FactInternetSales[SalesAmount]
)
)
Retorna a tabela FactInternetSales com a adição de uma coluna, que indica, para cada venda, o valor da venda anterior, do mesmo produto, em ordem decrescente do valor das vendas, com a venda atual sendo identificada por seu SalesOrderNumber e SalesOrderLineNumber. Sem MATCHBY, a consulta retornaria um erro, uma vez que não há colunas de chave na tabela FactInternetSales.
Exemplo 4 - cálculo visual
O seguinte cálculo visual DAX consulta:
SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))
Devolve a diferença no total de vendas entre cada mês e o anterior no mesmo ano.
A captura de tela abaixo mostra a matriz visual e a expressão de cálculo visual: