Zdieľať cez


OFFSET

Vzťahuje sa na:vypočítaný stĺpecvypočítanej tabuľkyvizuálového výpočtu

Vráti jeden riadok, ktorý je umiestnený pred alebo za aktuálnym riadkom v rámci tej istej tabuľky, daným posunom. Ak aktuálny riadok nie je možné odvodiť do jedného riadka, môže sa vrátiť viacero riadkov.

Syntax

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

Parametre

Termín Definícia
delta Počet riadkov pred (záporná hodnota) alebo po (kladná hodnota), z ktorého sa majú získať údaje. Môže to byť akýkoľvek výraz DAX, ktorý vráti skalárnu hodnotu.
relation (Voliteľné) Výraz tabuľky, z ktorého sa vráti výstupný riadok.
Ak je zadaný, všetky stĺpce v partitionBy musia pochádzať z neho alebo zo súvisiacej tabuľky.
Ak tento argument vynecháte:
- orderBy musí byť explicitne zadaný.
– všetky výrazy orderBy a partitionBy musia byť plne kvalifikované názvy stĺpcov a musia pochádzať z jednej tabuľky.
– predvolene sa použije ALLSELECTED() všetkých stĺpcov v orderBy a partitionBy.
axis (Voliteľné) Os v tvare vizuálu. K dispozícii iba vo výpočtoch vizuálu a nahrádza relation.
orderBy (Voliteľné) Klauzula ORDERBY() obsahujúca výrazy, ktoré definujú spôsob zoradenia každej oblasti.
Ak tento argument vynecháte:
- relation musí byť explicitne zadaný.
– predvolene sa zoradí podľa každého stĺpca v relation, ktorý ešte nie je zadaný v partitionBy.
blanks (Voliteľné) Enumerácia, ktorá definuje spôsob narábania s prázdnymi hodnotami pri zoraďovaní relation alebo axis.
Podporované hodnoty sú:
  • DEFAULT (predvolená hodnota), kde sú správanie číselných hodnôt prázdne hodnoty zoradené medzi nulami a záporné hodnoty. Správanie reťazcov je prázdne hodnoty zoradené pred všetkými reťazcami vrátane prázdnych reťazcov.
  • FIRST, prázdne hodnoty sa vždy zoraďujú na začiatku bez ohľadu na vzostupné alebo zostupné poradie zoradenia.
  • LAST, prázdne hodnoty sa vždy zoraďujú na konci bez ohľadu na vzostupné alebo zostupné poradie zoradenia.

Všimnite si, že keď sú v ORDERBY() funkcie pri jednotlivých výrazoch zadané hodnoty blanksblanks na výraze orderBy má prednosť pre príslušný výraz orderBy a výrazy orderBy bez blanks zadania zachová parameter blanks v nadradenej funkcii.
partitionBy (Voliteľné) Klauzula PARTITIONBY() obsahujúca stĺpce, ktoré definujú spôsob rozdelenia relation. Ak sa vynechá, relation sa považuje za jednu oblasť.
matchBy (Voliteľné) Klauzula MATCHBY() obsahujúca stĺpce, ktoré definujú, ako sa majú zhodovať s údajmi a identifikovať aktuálny riadok.
reset (Voliteľné) K dispozícii iba vo výpočtoch vizuálu. Udáva, či sa výpočet resetuje a na akej úrovni hierarchie stĺpcov tvaru vizuálu. Prijaté hodnoty sú: odkaz na pole na stĺpec v aktuálnom tvare vizuálu, NONE (predvolené), LOWESTPARENT, HIGHESTPARENTalebo celé číslo. Správanie závisí od celočíselného znamienka:
– Ak je hodnota nula alebo je vynechaná, výpočet sa nevynuluje. Zodpovedá NONE.
– ak je kladné, celé číslo identifikuje stĺpec začínajúci od najvyššej, nezávisle od zrna. HIGHESTPARENT zodpovedá 1.
– ak je záporné, celé číslo identifikuje stĺpec začínajúci od najnižšej hodnoty vo vzťahu k aktuálnemu zrnu. LOWESTPARENT je ekvivalentom čísla -1.

Vrátená hodnota

Jeden alebo viac riadkov z relation.

Poznámky

S výnimkou stĺpcov pridaných funkciami DAX tabuľky musí mať každý stĺpec v relation, ak nie je prítomný matchBy, alebo každý stĺpec v matchBy a partitionBy, ak je prítomný matchBy , musí mať zodpovedajúcu vonkajšiu hodnotu, ktorá pomáha definovať aktuálny riadok, na ktorom sa má pracovať, s nasledujúcim správaním:

  • Ak existuje presne jeden zodpovedajúci vonkajší stĺpec, použije sa jeho hodnota.
  • Ak neexistuje žiadny zodpovedajúci vonkajší stĺpec, potom:
    • OFFSET najprv určí všetky stĺpce, ktoré nemajú žiadny príslušný vonkajší stĺpec.
    • Pre každú kombináciu existujúcich hodnôt pre tieto stĺpce v nadradenom kontexte OFFSETsa vyhodnotí OFFSET a vráti sa riadok.
    • OFFSETkonečný výstup je zjednotenie týchto riadkov.
  • Ak existuje viac ako jeden zodpovedajúci vonkajší stĺpec, vráti sa chyba.

Ak DAX funkcie tabuľky pridali všetky stĺpce relation, vráti sa chyba.

Ak existuje matchBy, OFFSET sa pokúsi použiť matchBy a partitionBy stĺpce na identifikáciu riadka. Ak matchBy nie je k dispozícii a stĺpce zadané v orderBy a partitionBy nemôžu jednoznačne identifikovať každý riadok v relation, potom:

  • OFFSET sa pokúsi nájsť najmenší počet ďalších stĺpcov potrebných na jedinečnú identifikáciu každého riadka.
  • Ak sa tieto stĺpce dajú nájsť, OFFSET automaticky pripojí tieto nové stĺpce k orderBy, a každá oblasť sa zoradí pomocou tejto novej množiny stĺpcov OrderBy.
  • Ak sa takéto stĺpce nedajú nájsť, vráti sa chyba.

Prázdna tabuľka sa vráti, ak:

  • Zodpovedajúca vonkajšia hodnota stĺpca OrderBy alebo PartitionBy neexistuje v rámci relation.
  • Hodnota delta spôsobí posun do riadka, ktorý v oblasti neexistuje.

Ak OFFSET použijete v rámci vypočítaného stĺpca definovaného v tej istej tabuľke ako relation, a orderBy sa vynechá, vráti sa chyba.

reset možno použiť iba vo vizuálnych výpočtoch a nemožno ho použiť v kombinácii s orderBy alebo partitionBy. Ak je prítomná reset, možno zadať axis ale relation nedá.

Príklad 1 – vypočítaný stĺpec

Nasledujúci DAX dotaz:

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

Vráti tabuľku, ktorá sumarizuje celkový predaj pre každú kategóriu produktov a kalendárny rok, ako aj celkový predaj pre túto kategóriu v predchádzajúcom roku.

Príklad 2 – mierka

Nasledujúci DAX dotaz:

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

Používa OFFSET() v mierke na vrátenie tabuľky, ktorá zosumarizuje celkový predaj za jednotlivé kalendárne roky a celkový predaj za predchádzajúci rok.

Príklad 3 – vypočítaný stĺpec

Nasledujúci DAX dotaz:

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

Vráti tabuľku FactInternetSales s pridaním stĺpca, ktorý pre každý predaj označuje jeho predchádzajúcu čiastku predaja toho istého produktu v zostupnom poradí čiastky predaja, pričom aktuálny predaj je identifikovaný jeho hodnotami SalesOrderNumber a SalesOrderLineNumber. Bez MATCHBYby dotaz vrátil chybu, pretože v tabuľke FactInternetSales neexistujú žiadne kľúčové stĺpce.

Príklad 4 – výpočet vizuálu

Nasledujúci výpočet vizuálu DAX dotaz:

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

Vráti rozdiel v celkovom predaji medzi jednotlivými mesiacmi a predchádzajúcimi v rámci toho istého roka.

Snímka obrazovky nižšie znázorňuje maticu vizuálu a výraz výpočtu vizuálu:

výpočtu vizuálu

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER