Partilhar via


OFFSET

Aplica-se a:Coluna calculadaTabela calculadaMeasureCálculo visual

Devolve uma única linha posicionada antes or depois de a linha atual dentro da mesma tabela, por um determinado offset. If 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 (valuenegativo) or depois (valuepositivo) da linha atual a partir da qual obter os dados. Pode ser qualquer expressão DAX que retorna uma valueescalar .
relation (Opcional) Uma expressão de tabela da qual a linha de saída é retornada.
If especificado, all colunas em partitionBy devem vir dele or uma tabela related.
If omitido:
- orderBy deve ser explicitamente especificado.
- AllorderByandpartitionBy expressões devem ser nomes de colunas totalmente qualificados and provenientes de uma única tabela.
- O padrão é ALLSELECTED() de all colunas no orderByandpartitionBy.
axis (Opcional) Um eixo na forma visual. Disponível apenas em cálculos visuais, and substitui relation.
orderBy (Opcional) Uma cláusula ORDERBY() contendo as expressões que define como cada partição é classificada.
If omitido:
- relation deve ser explicitamente especificado.
- Padroniza a ordenação por cada coluna em relation que not já especificada em partitionBy.
blanks (Opcional) Uma enumeração que define como lidar com blankvalues ao classificar.
Este parâmetro está reservado para uso futuro.
Atualmente, a única value suportada é DEFAULT, onde o comportamento para values numéricos é blankvalues são ordenados entre zero and negativo values. O comportamento para cadeias de caracteres é blankvalues são ordenadas antes de all cadeias de caracteres, incluindo cadeias vazias.
partitionBy (Opcional) Uma cláusula PARTITIONBY() que contém as colunas que define como relation é particionado.
If omitida, relation é tratada como uma única partição.
matchBy (Opcional) Uma cláusula MATCHBY() que contém as colunas que define como fazer a correspondência de dados and identificar a linha atual.
reset (Opcional) Disponível apenas em cálculos visuais. Indica if o cálculo é redefinido and em que nível da hierarquia de colunas da forma visual. Os values aceitos são: NONE, LOWESTPARENT, HIGHESTPARENT, or um número inteiro. O comportamento depende do número inteiro sign:
- If zero or omitido, o cálculo not é reiniciado. Equivalente a NONE.
- If positivo, o inteiro identifica a coluna a partir do mais alto, independente do grão. HIGHESTPARENT equivale a 1.
- If negativo, o inteiro identifica a coluna a partir do mais baixo, em relação ao grão atual. LOWESTPARENT é equivalente a -1.

Regresso value

Uma or mais linhas de relation.

Comentários

Except para colunas adicionadas por DAX funções de tabela, cada coluna em relation, quando matchBy estiver not presente, or cada coluna em matchByandpartitionBy, quando matchBy estiver presente, deve ter uma value externa correspondente para ajudar a define a linha atual na qual operar, com o seguinte comportamento:

  • If houver exatamente uma coluna externa correspondente, sua value é usada.
  • If não houver coluna externa correspondente, então:
    • OFFSET first determinará all colunas que não têm coluna externa correspondente.
    • Para cada combinação de values existentes para essas colunas no contexto pai do OFFSET, OFFSET é avaliada and uma linha é retornada.
    • A saída final do OFFSETé uma union dessas linhas.
  • If houver mais de uma coluna externa correspondente, uma error será retornada.

If all das colunas de relationforam adicionadas por DAX funções de tabela, uma error é retornada.

If matchBy estiver presente, OFFSET tentará usar matchByandpartitionBy colunas para identificar a linha. If matchBy not estiver presente and as colunas especificadas em orderByandpartitionBy não puder identificar exclusivamente todas as linhas relation, então:

  • OFFSET tentará find o menor número de colunas adicionais necessárias para identificar exclusivamente cada linha.
  • If essas colunas puderem ser encontradas, OFFSET acrescentará automaticamente essas novas colunas a orderBy, and cada partição é classificada usando esse novo conjunto de colunas OrderBy.
  • If essas colunas não puderem ser encontradas, uma error será retornada.

Uma tabela vazia é retornada if:

  • A value externa correspondente de uma coluna OrderByorPartitionBynot existe dentro relation.
  • O deltavalue causa uma mudança para uma linha que not existe dentro da partição.

If OFFSET é usado dentro de uma coluna calculada definida na mesma tabela que relation, andorderBy é omitido, um error é retornado.

reset pode ser usado apenas em cálculos visuais and não pode ser usado em combinação com orderByorpartitionBy. If reset está 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 product categoria andcalendaryear, bem como o total de vendas para essa categoria no previousyear.

Exemplo 2 - measure

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 um measure para retornar uma tabela que resume o total de vendas para cada calendaryearand o total de vendas para o previousyear.

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 de sua previous venda, do mesmo product, em ordem decrescente de valor de vendas, com a venda atual sendo identificada por seu SalesOrderNumber and SalesOrderLineNumber. Sem MATCHBY, a consulta retornaria um error 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 monthand o previous dentro do mesmo year.

A captura de tela abaixo mostra a matriz visual and a expressão de cálculo visual:

DAX cálculo visual

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER