Condividi tramite


OFFSET

Si applica a:colonna calcolatatabella calcolataMeasurecalcolo visivo

Restituisce una singola riga posizionata prima di or dopo la riga corrente all'interno della stessa tabella, da un determinato offset. If 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 (valuenegativo ) or dopo (positivo value) riga corrente da cui ottenere i dati. Può essere qualsiasi espressione DAX che restituisce un valuescalare .
relation (Facoltativo) Espressione di tabella da cui viene restituita la riga di output.
If specificato, all colonne in partitionBy devono provenire da essa or una tabella related.
If omesso:
- orderBy deve essere specificato in modo esplicito.
: le espressioni di AllorderByandpartitionBy devono essere nomi di colonna completi and provengono da una singola tabella.
: per impostazione predefinita viene ALLSELECTED() delle colonne di all in orderByandpartitionBy.
axis (Facoltativo) Asse nella forma visiva. Disponibile solo nei calcoli visivi, and sostituisce relation.
orderBy (Facoltativo) Clausola ORDERBY() contenente le espressioni che define la modalità di ordinamento di ogni partizione.
If omesso:
- relation deve essere specificato in modo esplicito.
: per impostazione predefinita l'ordinamento in base a ogni colonna in relationnot già specificata in partitionBy.
blanks (Facoltativo) Enumerazione che definisce come gestire blankvalues durante l'ordinamento.
Questo parametro è riservato per uso futuro.
Attualmente, l'unico value supportato è DEFAULT, dove il comportamento per values numerici è blankvalues viene ordinato tra zero andvaluesnegativo. Il comportamento delle stringhe è blankvalues vengono ordinati prima di all stringhe, incluse le stringhe vuote.
partitionBy (Facoltativo) Clausola PARTITIONBY() contenente le colonne che define la modalità di partizionamento delle relation.
If omesso, relation viene considerato come una singola partizione.
matchBy (Facoltativo) Clausola MATCHBY() contenente le colonne che define come trovare le corrispondenze con i dati and identificare la riga corrente.
reset (Facoltativo) Disponibile solo nei calcoli visivi. Indica if il calcolo viene reimpostato, and a quale livello della gerarchia di colonne della forma visiva. I values accettati sono: un riferimento di campo a una colonna nella forma visiva corrente, NONE (impostazione predefinita), LOWESTPARENT, HIGHESTPARENT, or un numero intero. Il comportamento dipende dall'intero sign:
- If zero or omesso, il calcolo viene reimpostato not. Equivalente a NONE.
: If positivo, l'intero identifica la colonna a partire dal più alto, indipendentemente dal livello di granularità. HIGHESTPARENT equivale a 1.
: If negativo, l'intero identifica la colonna a partire dal più basso, rispetto alla granularità corrente. LOWESTPARENT equivale a -1.

Restituisce value

Una or più righe di relation.

Osservazioni

Except per le colonne aggiunte da funzioni di tabella DAX, ogni colonna in relation, quando matchBy è not presente, or ogni colonna in matchByandpartitionBy, quando matchBy è presente, deve avere un value esterno corrispondente per define la riga corrente su cui operare, con il comportamento seguente:

  • If esiste esattamente una colonna esterna corrispondente, viene usata la relativa value.
  • If non esiste alcuna colonna esterna corrispondente, quindi:
    • OFFSET determinerà first colonne all senza colonna esterna corrispondente.
    • Per ogni combinazione di values esistenti per queste colonne nel contesto padre di OFFSET, OFFSET viene valutata and viene restituita una riga.
    • OFFSET'output finale è un union di queste righe.
  • If è presente più di una colonna esterna corrispondente, viene restituita una error.

If all delle colonne di relationsono state aggiunte da DAX funzioni di tabella, viene restituito un error.

If matchBy è presente, OFFSET tenterà di usare matchByandpartitionBy colonne per identificare la riga. If matchBy è not presente and le colonne specificate in orderByandpartitionBy non possono identificare in modo univoco ogni riga in relation, quindi:

  • OFFSET tenterà di find il minor numero di colonne aggiuntive necessarie per identificare in modo univoco ogni riga.
  • If è possibile trovare tali colonne, OFFSET accoderà automaticamente queste nuove colonne a orderBy, and ogni partizione viene ordinata usando questo nuovo set di colonne OrderBy.
  • If non è possibile trovare tali colonne, viene restituito un error.

Viene restituita una tabella vuota if:

  • Il value esterno corrispondente di una colonna OrderByorPartitionBy esiste not all'interno di relation.
  • Il deltavalue comporta uno spostamento a una riga che not esiste all'interno della partizione.

If OFFSET viene utilizzato all'interno di una colonna calcolata definita nella stessa tabella di relation, andorderBy viene omesso, viene restituito un error.

reset può essere usato solo nei calcoli visivi, and non può essere usato in combinazione con orderByorpartitionBy. If 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 productandcalendaryear, nonché le vendite totali per tale categoria nel previousyear.

Esempio 2 - measure

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 un measure per restituire una tabella che riepiloga le vendite totali per ogni calendaryearand le vendite totali per il previousyear.

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 previous, dello stesso product, in ordine decrescente dell'importo delle vendite, con la vendita corrente identificata dal relativo SalesOrderNumber and SalesOrderLineNumber. Senza MATCHBY, la query restituirà un error poiché 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 monthand il previous uno all'interno dello stesso year.

Lo screenshot seguente mostra la matrice visiva and'espressione di calcolo visiva:

DAX calcolo visivo

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER