OFFSET
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:
|
partitionBy |
(Facoltativo) Clausola relation viene considerato come una singola partizione. |
matchBy |
(Facoltativo) Clausola |
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 , 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 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 relation
sono 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
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 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 relation
e 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: