OFFSET

Si applica a:Calcolo visivo misuratabella calcolata colonnacalcolata

Restituisce una singola riga posizionata prima o dopo la riga corrente all'interno della stessa tabella da un offset specificato. Se non è possibile dedurre la riga corrente in una singola riga, è possibile che vengano restituite più righe.

Sintassi

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

Parametri

Termine Definizione
delta Numero di righe prima (valore negativo) o dopo (valore positivo) la riga corrente da cui ottenere i dati. Può essere qualsiasi espressione DAX che restituisce un valore scalare.
relazione (Facoltativo) Espressione di tabella da cui viene restituita la riga di output.
Se specificato, tutte le colonne in <partitionBy> devono provenire da essa o da una tabella correlata.
Se omesso:
- <orderBy> deve essere specificato in modo esplicito.
- Tutte le colonne <orderBy> e <partitionBy> devono essere complete e provenire da una singola tabella.
- L'impostazione predefinita è ALLSELECTED() di tutte le colonne in <orderBy> e <partitionBy>.
axis (Facoltativo) Asse nella forma visiva. Disponibile solo nei calcoli visivi e sostituisce la <relazione>.
orderBy (Facoltativo) Clausola ORDERBY() contenente le colonne che definiscono la modalità di ordinamento di ogni partizione.
Se omesso:
- <la relazione> deve essere specificata in modo esplicito.
- Per impostazione predefinita, l'ordinamento viene eseguito in base a ogni colonna in <relazione> non già specificata in <partitionBy>.
valori blank (Facoltativo) Enumerazione che definisce come gestire i valori (blank) durante l'ordinamento.
Questo parametro è riservato per usi futuri.
Attualmente, l'unico valore supportato è DEFAULT, in cui il comportamento per i valori numerici è vuoto viene ordinato tra zero e valori negativi. Il comportamento per le stringhe è costituito dall’ordinamento dei valori blank prima di tutte le stringhe, incluse le stringhe vuote.
partitionBy (Facoltativo) Clausola PARTITIONBY() contenente le colonne che definiscono la modalità <di partizionamento della relazione>.
Se omesso, <la relazione> viene considerata come una singola partizione.
matchBy (Facoltativo) Clausola MATCHBY() contenente le colonne che definiscono come trovare le corrispondenze con i dati e identificare la riga corrente.
reset (ripristina) (Facoltativo) Disponibile solo nei calcoli visivi. Indica se il calcolo viene reimpostato e a quale livello della gerarchia di colonne della forma visiva. I valori accettati sono: NONE, LOWESTPARENT, HIGHESTPARENT o un numero intero. Il comportamento dipende dal segno intero: -
Se zero o omesso, il calcolo non viene reimpostato. Equivalente a NONE.
- Se positivo, l'intero identifica la colonna a partire dal più alto, indipendentemente dalla granularità. HIGHESTPARENT equivale a 1.
- Se negativo, l'intero identifica la colonna a partire dal più basso, rispetto alla granularità corrente. LOWESTPARENT equivale a -1.

Valore restituito

Una o più righe dalla <relazione>.

Osservazioni:

Ad eccezione delle colonne aggiunte dalle funzioni di tabella DAX, ogni colonna in <relazione>, quando <matchBy> non è presente, o ogni colonna in <matchBy> e <partitionBy>, quando <matchBy>è presente, deve avere un valore esterno corrispondente per definire la riga corrente su cui operare, con il comportamento seguente:

  • Se è presente esattamente una colonna esterna corrispondente, viene usato il relativo valore.
  • Se non è presente alcuna colonna esterna corrispondente, eseguire le operazioni seguenti:
    • OFFSET determinerà innanzitutto tutte le colonne che non dispongono di una colonna esterna corrispondente.
    • Per ogni combinazione di valori esistenti per queste colonne nel contesto padre di OFFSET, OFFSET viene valutato e viene restituita una riga.
    • L'output finale di OFFSET è un'unione di queste righe.
  • Se sono presenti più colonne esterne corrispondenti, viene restituito un errore.

Se tutte le colonne della <relazione> sono state aggiunte dalle funzioni di tabella DAX, viene restituito un errore.

Se <matchBy> è presente, OFFSET tenterà di usare le colonne <matchBy> e <partitionBy> per identificare la riga.
Se <matchBy> non è presente e le colonne specificate all'interno di <orderBy> e <partitionBy> non possono identificare in modo univoco ogni riga in <relazione>, allora:

  • OFFSET tenterà di trovare il minor numero di colonne aggiuntive necessarie per identificare in modo univoco ogni riga.
  • Se è possibile trovare tali colonne, OFFSET aggiungerà automaticamente queste nuove colonne a <orderBy> e ogni partizione viene ordinata usando questo nuovo set di colonne OrderBy.
  • Se non è possibile trovare tali colonne, viene restituito un errore.

Viene restituita una tabella vuota se:

  • Il valore esterno corrispondente di una colonna OrderBy o PartitionBy non esiste all'interno della <relazione>.
  • Il valore <delta> causa uno spostamento in una riga che non esiste all'interno della partizione.

Se OFFSET viene utilizzato all'interno di una colonna calcolata definita nella stessa tabella della <relazione>, e <orderBy> viene omesso, allora viene restituito un errore.

<la reimpostazione> può essere usata solo nei calcoli visivi e non può essere usata in combinazione con <orderBy> o <partitionBy>. Se <la reimpostazione> è presente, <è possibile specificare l'asse> , ma <la relazione> non può.

Esempio 1 : colonna calcolata

La query DAX seguente:

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]
    )
)

Restituisce una tabella che riepiloga le vendite totali per ogni categoria di prodotto e anno di calendario, nonché le vendite totali per tale categoria nell'anno precedente.

Esempio 2 : misura

La query DAX seguente:

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() in una misura per restituire una tabella che riepiloga le vendite totali per ogni anno di calendario e le vendite totali per l'anno precedente.

Esempio 3 : colonna calcolata

La query DAX seguente:

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

Restituisce la tabella FactInternetSales con l'aggiunta di una colonna che indica, per ogni vendita, l'importo della vendita precedente, dello stesso prodotto, in ordine decrescente dell'importo delle vendite, con la vendita corrente identificata dal relativo SalesOrderNumber e SalesOrderLineNumber. Senza MATCHBY, la query restituirà un errore perché non sono presenti colonne chiave nella tabella FactInternetSales.

Esempio 4 - Calcolo visivo

Query DAX di calcolo visivo seguente:

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

Restituisce la differenza delle vendite totali tra ogni mese e quella precedente all'interno dello stesso anno.

Lo screenshot seguente mostra la matrice visiva e l'espressione di calcolo visivo:

Calcolo visivo DAX

INDEX
ORDERBY
PARTITIONBY
MATCHBY
WINDOW
RANK
ROWNUMBER