Del via


OFFSET

gjelder:beregnet kolonneberegnet tabellmålevisualobjektberegning

Returnerer en enkelt rad som er plassert enten før eller etter gjeldende rad i samme tabell, med en gitt forskyvning. Hvis gjeldende rad ikke kan utledes til én rad, kan flere rader returneres.

Syntaks

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

Parametere

Vilkår Definisjon
delta Antall rader før (negativ verdi) eller etter (positiv verdi) gjeldende rad som dataene skal hentes fra. Det kan være et hvilket som helst DAX uttrykk som returnerer en skalarverdi.
relation (Valgfritt) Et tabelluttrykk som utdataraden returneres fra.
Hvis angitt, må alle kolonnene i partitionBy komme fra den eller en relatert tabell.
Hvis utelatt:
- orderBy må angis eksplisitt.
– Alle orderBy- og partitionBy uttrykk må være fullstendige kolonnenavn og komme fra én enkelt tabell.
– standarder for ALLSELECTED() for alle kolonner i orderBy og partitionBy.
axis (Valgfritt) En akse i den visuelle figuren. Bare tilgjengelig i visuelle beregninger, og erstatter relation.
orderBy (Valgfritt) En ORDERBY() setning som inneholder uttrykkene som definerer hvordan hver partisjon sorteres.
Hvis utelatt:
- relation må angis eksplisitt.
– Standarder for bestilling av hver kolonne i relation som ikke allerede er angitt i partitionBy.
blanks (Valgfritt) En opplisting som definerer hvordan du håndterer tomme verdier når du sorterer relation eller axis.
De støttede verdiene er:
  • DEFAULT (standardverdien), der virkemåten for numeriske verdier er tomme verdier, er sortert mellom null og negative verdier. Virkemåten for strenger er tomme verdier ordnes før alle strenger, inkludert tomme strenger.
  • FIRSTer blanks alltid sortert i begynnelsen, uavhengig av stigende eller synkende sorteringsrekkefølge.
  • LASTer tomme celler alltid ordnet på slutten, uavhengig av stigende eller synkende sorteringsrekkefølge.

Obs! Når blanks parameteren og tomrommene i ORDERBY()-funksjonen på individuelle uttrykk er angitt, prioriteres blanks enkelt orderBy-uttrykk for det relevante orderBy-uttrykket, og orderBy-uttrykk uten at blanks angis, respekterer blanks parameteren for den overordnede funksjonen.
partitionBy (Valgfritt) En PARTITIONBY() setningsdel som inneholder kolonnene som definerer hvordan relation partisjoneres. Hvis utelatt, behandles relation som én enkelt partisjon.
matchBy (Valgfritt) En MATCHBY() setningsdel som inneholder kolonnene som definerer hvordan dataene skal samsvare og identifisere gjeldende rad.
reset (Valgfritt) Bare tilgjengelig i visuelle beregninger. Angir om beregningen tilbakestilles, og på hvilket nivå i kolonnehierarkiet for visualobjektfiguren. Godtatte verdier er: en feltreferanse til en kolonne i gjeldende visuelle figur, NONE (standard), LOWESTPARENT, HIGHESTPARENTeller et heltall. Virkemåten avhenger av heltallstegnet:
– Hvis null eller utelatt, tilbakestilles ikke beregningen. Tilsvarer NONE.
– Hvis det er positivt, identifiserer heltallet kolonnen fra den høyeste, uavhengige av korn. HIGHESTPARENT tilsvarer 1.
– Hvis negativt, identifiserer heltallet kolonnen fra det laveste, i forhold til gjeldende korn. LOWESTPARENT tilsvarer -1.

Returverdi

Én eller flere rader fra relation.

Merknader

Bortsett fra kolonner som legges til av DAX tabellfunksjoner, må hver kolonne i relation, når matchBy ikke finnes, eller hver kolonne i matchBy og partitionBy, når matchBy finnes, ha en tilsvarende ytre verdi for å definere gjeldende rad som skal fungere, med følgende virkemåte:

  • Hvis det er nøyaktig én tilsvarende ytre kolonne, brukes verdien.
  • Hvis det ikke finnes noen tilsvarende ytre kolonne, gjør du følgende:
    • OFFSET bestemmer først alle kolonner som ikke har noen tilsvarende ytre kolonne.
    • For hver kombinasjon av eksisterende verdier for disse kolonnene i OFFSEToverordnede kontekst, evalueres OFFSET og en rad returneres.
    • OFFSET's endelige utdata er en union av disse radene.
  • Hvis det er mer enn én tilsvarende ytre kolonne, returneres en feil.

Hvis alle kolonnene i relationble lagt til av DAX tabellfunksjoner, returneres en feil.

Hvis matchBy finnes, prøver OFFSET å bruke matchBy og partitionBy kolonner til å identifisere raden. Hvis matchBy ikke finnes, og kolonnene som er angitt i orderBy og partitionBy ikke unikt kan identifisere hver rad i relation, kan du:

  • OFFSET vil prøve å finne det minste antallet ekstra kolonner som kreves for å identifisere hver rad unikt.
  • Hvis du finner slike kolonner, vil OFFSET automatisk tilføye disse nye kolonnene til orderBy, og hver partisjon sorteres ved hjelp av dette nye settet med OrderBy-kolonner.
  • Hvis slike kolonner ikke blir funnet, returneres en feil.

En tom tabell returneres hvis:

  • Den tilsvarende ytre verdien for en OrderBy- eller PartitionBy-kolonne finnes ikke i relation.
  • Den delta verdien fører til et skifte til en rad som ikke finnes i partisjonen.

Hvis OFFSET brukes i en beregnet kolonne som er definert i samme tabell som relation, og orderBy utelates, returneres en feil.

reset kan bare brukes i visuelle beregninger, og kan ikke brukes sammen med orderBy eller partitionBy. Hvis reset finnes, kan axis angis, men relation kan ikke.

Eksempel 1 – beregnet kolonne

Følgende DAX spørring:

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

Returnerer en tabell som oppsummerer det totale salget for hver produktkategori og kalenderår, i tillegg til det totale salget for denne kategorien i forrige år.

Eksempel 2 – mål

Følgende DAX spørring:

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

Bruker OFFSET() i et mål for å returnere en tabell som oppsummerer det totale salget for hvert kalenderår og det totale salget for forrige år.

Eksempel 3 – beregnet kolonne

Følgende DAX spørring:

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

Returnerer FactInternetSales-tabellen med å legge til en kolonne, som indikerer, for hvert salg, det forrige salgets beløp, av samme produkt, i synkende rekkefølge av salgsbeløp, med gjeldende salg identifisert av SalesOrderNumber og SalesOrderLineNumber. Uten MATCHBYvil spørringen returnere en feil siden det ikke finnes noen nøkkelkolonner i FactInternetSales-tabellen.

Eksempel 4 – visuell beregning

Følgende visuelle beregning DAX spørring:

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

Returnerer differansen i totalt salg mellom hver måned og den forrige i samme år.

Skjermbildet nedenfor viser den visuelle matrisen og beregningsuttrykket for visualobjekter:

DAX beregning av visualobjekter

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER