Ler em inglês

Partilhar via


DESLOCAMENTO

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() contendo 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.
Este parâmetro está reservado para uso futuro.
Atualmente, o único valor suportado é DEFAULT, onde o comportamento para valores numéricos é valores em branco são ordenados entre valores zero e negativos. O comportamento para cadeias de caracteres é valores em branco são ordenados antes de todas as cadeias de caracteres, incluindo cadeias vazias.
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() que contém as colunas que definem como fazer a correspondência de 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: NONE, LOWESTPARENT, HIGHESTPARENT ou um inteiro. O comportamento depende do sinal inteiro:
- Se zero ou omitido, o cálculo não é reiniciado. Equivalente a NENHUM.
- Se positivo, o inteiro identifica a coluna a partir do mais alto, independente do grão. HIGHESTPARENT é equivalente 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 funções de tabela DAX, 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 determinará primeiro todas as colunas que não têm coluna externa correspondente.
    • Para cada combinação de valores existentes para essas colunas no contexto pai de OFFSET, OFFSET é avaliado e uma linha é retornada.
    • A saída final de OFFSET é uma união dessas linhas.
  • Se houver mais de uma coluna externa correspondente, um erro será retornado.

Se todas as colunas do relationforam adicionadas pelas funções da tabela DAX, 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 relatione 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

A seguinte consulta 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]
    )
)

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

A seguinte consulta 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]
)

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

A seguinte consulta 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]
        )
)

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, pois não há colunas de chave na tabela FactInternetSales.

Exemplo 4 - cálculo visual

A seguinte consulta DAX de cálculo visual:

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:

de cálculo visual DAX

ÍNDICE
ORDERBY
PARTITIONBY
MATCHBY
JANELA
CLASSIFICAÇÃO
NÚMERO DE LINHA