Condividi tramite


OFFSET

Si applica a:colonna calcolatatabella calcolata calcolo visivomisura

Restituisce una singola riga posizionata prima o dopo la riga corrente all'interno della stessa tabella, in base a 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) della riga corrente da cui ottenere i dati. Può essere qualsiasi espressione DAX che restituisce un valore scalare.
relation (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 espressioni orderBy e partitionBy devono essere nomi di colonna completi e provenire da una singola tabella.
: per impostazione predefinita viene ALLSELECTED() di tutte le colonne in orderBy e partitionBy.
axis (Facoltativo) Asse nella forma visiva. Disponibile solo nei calcoli visivi e sostituisce relation.
orderBy (Facoltativo) Clausola ORDERBY() contenente le espressioni che definiscono la modalità di ordinamento di ogni partizione.
Se omesso:
- relation deve essere specificato in modo esplicito.
: per impostazione predefinita l'ordinamento in base a ogni colonna in relation non già specificata in partitionBy.
blanks (Facoltativo) Enumerazione che definisce come gestire i valori vuoti durante l'ordinamento del relation o axis.
I valori supportati sono:
  • DEFAULT (valore predefinito), dove il comportamento per i valori numerici è vuoto viene ordinato tra zero e valori negativi. Il comportamento per le stringhe è costituito da valori vuoti prima di tutte le stringhe, incluse le stringhe vuote.
  • FIRST, gli spazi vuoti vengono sempre ordinati all'inizio, indipendentemente dall'ordinamento crescente o decrescente.
  • LAST, gli spazi vuoti vengono sempre ordinati alla fine, indipendentemente dall'ordinamento crescente o decrescente.
Nota, quando il parametro e gli spazi vuoti nella funzione () su singole espressioni vengono specificati entrambi, su un'espressione orderBy singola assume la priorità per l'espressione orderBy pertinente e le espressioni orderBy senza specificato rispediranno il parametro nella funzione padre.
partitionBy (Facoltativo) Clausola () contenente le colonne che definiscono la modalità di partizionamento . Se omesso, relation viene considerato come una singola partizione.
matchBy (Facoltativo) Clausola () contenente le colonne che definiscono come trovare le corrispondenze con i dati e identificare la riga corrente.
reset (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: un riferimento di campo a una colonna nella forma visiva corrente, NONE (impostazione predefinita), LOWESTPARENT, HIGHESTPARENTo 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 dal livello di granularità. HIGHESTPARENT equivale a 1.
: se negativo, l'intero identifica la colonna a partire dal livello più basso, rispetto alla granularità corrente. LOWESTPARENT equivale a -1.

Valore restituito

Una o più righe di relation.

Osservazioni

Ad eccezione delle colonne aggiunte da DAX funzioni di tabella, ogni colonna in relation, 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 valutata e viene restituita una riga.
    • OFFSET'output finale è un'unione di queste righe.
  • Se sono presenti più colonne esterne corrispondenti, viene restituito un errore.

Se tutte le colonne di relationsono state aggiunte da DAX funzioni di tabella, viene restituito un errore.

Se matchBy è presente, OFFSET tenterà di usare matchBy e partitionBy colonne 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 relation, quindi:

  • OFFSET tenterà di trovare il minor numero di colonne aggiuntive necessarie per identificare in modo univoco ogni riga.
  • Se è possibile trovare tali colonne, OFFSET accoderà automaticamente queste nuove colonne a orderBye 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 di relation.
  • Il valore delta determina uno spostamento a una riga che non esiste all'interno della partizione.

Se OFFSET viene utilizzato all'interno di una colonna calcolata definita nella stessa tabella di relatione orderBy viene omesso, viene restituito un errore.

reset possono essere usati solo nei calcoli visivi e non possono essere usati in combinazione con orderBy o partitionBy. Se reset è presente, è possibile specificare axis ma non relation.

Esempio 1 : colonna calcolata

La query di 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 di 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 di 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

Il calcolo visivo seguente DAX query:

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:

DAX calcolo visivo

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER