Del via


FORSKYVNING

Gjelder beregnet beregning av beregnet tabellfor beregnet kolonne

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

Term Definisjon
delta Antall rader før (negativ verdi) eller etter (positiv verdi) gjeldende rad som dataene skal hentes fra. Det kan være alle DAX-uttrykk som returnerer en skalarverdi.
Forhold (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>.
akse (Valgfritt) En akse i den visuelle figuren. Bare tilgjengelig i visuelle beregninger, og erstatter <relasjon>.
Orderby (Valgfritt) En ORDERBY()-setningsdel som inneholder uttrykkene som definerer hvordan hver partisjon sorteres.
Hvis utelatt:
- <relasjon> må angis eksplisitt.
– Standarder for bestilling av hver kolonne i <relasjon> som ikke allerede er angitt i <partitionBy>.
Tomme (Valgfritt) En opplisting som definerer hvordan du håndterer tomme verdier når du sorterer.
Denne parameteren er reservert for fremtidig bruk.
For øyeblikket er den eneste støttede verdien DEFAULT, der virkemåten for numeriske verdier er tomme verdier, sortert mellom null og negative verdier. Virkemåten for strenger er tomme verdier ordnes før alle strenger, inkludert tomme strenger.
partitionBy (Valgfritt) En PARTITIONBY()-setningsdel som inneholder kolonnene som definerer hvordan <relasjonen> partisjoneres.
Hvis den utelates, <behandles relasjonen> som én enkelt partisjon.
matchBy (Valgfritt) En MATCHBY()-setningsdel som inneholder kolonnene som definerer hvordan dataene skal samsvare og identifisere gjeldende rad.
Tilbakestille (Valgfritt) Bare tilgjengelig i visuelle beregninger. Angir om beregningen tilbakestilles, og på hvilket nivå i kolonnehierarkiet for visualobjektfiguren. Godtatte verdier er: NONE, LOWESTPARENT, HIGHESTPARENT eller et heltall. Virkemåten avhenger av heltallstegnet:
– Hvis null eller utelatt, tilbakestilles ikke beregningen. Tilsvarer INGEN.
– Hvis det er positivt, identifiserer heltallet kolonnen fra det høyeste, uavhengige kornet. HIGHESTPARENT tilsvarer 1.
– Hvis negativt, identifiserer heltallet kolonnen som starter fra det laveste, i forhold til gjeldende korn. LOWESTPARENT tilsvarer -1.

Returverdi

Én eller flere rader fra <relasjon>.

Merknader

Bortsett fra kolonner som legges til av DAX-tabellfunksjoner, må hver kolonne i <relasjon, når <matchBy> ikke finnes, eller hver kolonne i <matchBy> og <partitionBy>, når <matchBy> er til stede, ha en tilsvarende ytre verdi for å definere gjeldende rad som skal brukes, 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:
    • FORSKYVNING bestemmer først alle kolonner som ikke har noen tilsvarende ytre kolonne.
    • For hver kombinasjon av eksisterende verdier for disse kolonnene i FORSKYVNINGs overordnede kontekst evalueres FORSKYVNING og en rad returneres.
    • OFFSETs endelige utdata er en sammensluting av disse radene.
  • Hvis det er mer enn én tilsvarende ytre kolonne, returneres en feil.

Hvis alle <relasjonskolonnene> ble 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 <relasjon>, kan du:

  • OFFSET vil prøve å finne minst antall ekstra kolonner som kreves for å identifisere hver rad unikt.
  • Hvis slike kolonner blir funnet, vil OFFSET automatisk tilføye disse nye kolonnene i <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 <relasjonen>.
  • Deltaverdien <> fører til et skifte til en rad som ikke finnes i partisjonen.

Hvis FORSKYVNING brukes i en beregnet kolonne som er definert i samme tabell som <relasjon>, og <orderBy> utelates, returneres en feil.

<tilbakestilling> kan bare brukes i visuelle beregninger, og kan ikke brukes i kombinasjon med <orderBy> eller <partitionBy>. Hvis <tilbakestilling> finnes, kan aksen> angis, <men <relasjonen> 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 FORSKYVNING() 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 MATCHBY vil spørringen returnere en feil siden det ikke er noen nøkkelkolonner i FactInternetSales-tabellen.

Eksempel 4 – visuell beregning

Følgende DAX-spørring for visualobjektberegning:

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-visualobjektberegning

INDEKS
ORDERBY
PARTITIONBY
MATCHBY
VINDUET
RANGERING
RADNUMMER