Sdílet prostřednictvím


OFFSET

Platí pro:Počítaný sloupecPočítaná tabulkaMěřitVizuální výpočet

Vrátí jeden řádek, který je umístěn buď před nebo za aktuálním řádkem ve stejné tabulce, o daný posun. Pokud aktuální řádek nelze odvodit na jeden řádek, může být vráceno více řádků.

Syntaxe

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

Parametry

Semestr Definice
delta Počet řádků před (záporná hodnota) nebo za (kladná hodnota) aktuálního řádku, ze kterého chcete získat data. Může to být libovolný výraz DAX, který vrací skalární hodnotu.
relation (Volitelné) Výraz tabulky, ze kterého se vrátí výstupní řádek. Pokud se tento parametr používá ve vizuálních výpočtech, přijímá v obrazci vizuálu osu.
Pokud je zadán, musí všechny sloupce v partitionBy pocházet z ní nebo související tabulka.
Pokud tento parametr vynecháte:
- orderBy musí být explicitně zadán.
– Všechny výrazy orderBy a partitionBy musí být plně kvalifikované názvy sloupců a pocházet z jedné tabulky.
– výchozí hodnota je ALLSELECTED() všech sloupců v orderBy a partitionBy.
orderBy (Volitelné) Klauzule ORDERBY() obsahující výrazy definující způsob řazení jednotlivých oddílů.
Pokud tento parametr vynecháte:
- relation musí být explicitně zadán.
– Výchozí nastavení řazení podle každého sloupce v relation, který ještě není zadán v partitionBy.
blanks (Volitelné) Výčet, který definuje, jak zpracovat prázdné hodnoty při řazení relation nebo axis.
Podporované hodnoty jsou:
  • DEFAULT (výchozí hodnota), kde chování číselných hodnot je prázdné hodnoty seřazené mezi nulou a zápornými hodnotami. Chování řetězců je prázdné hodnoty seřazené před všemi řetězci, včetně prázdných řetězců.
  • FIRST, prázdné hodnoty jsou vždy seřazeny na začátku bez ohledu na vzestupné nebo sestupné pořadí řazení.
  • LAST, prázdné hodnoty jsou vždy seřazeny na konci bez ohledu na vzestupné nebo sestupné pořadí řazení.

Všimněte si, že pokud blanks jsou zadány parametry a prázdné hodnoty ve ORDERBYfunkci () u jednotlivých výrazů, blanks má u jednotlivých výrazů orderBy prioritu pro příslušný výraz orderBy a výrazy orderBy bez blanks zadání budou respektovat blanks parametr nadřazené funkce.
partitionBy (Volitelné) Klauzule () obsahující sloupce definující způsob rozdělení . Pokud tento parametr vynecháte, relation se považuje za jeden oddíl.
matchBy (Volitelné) Klauzule (MATCHBY) obsahující sloupce, které definují, jak se shodují s daty a identifikují aktuální řádek.
reset (Volitelné) K dispozici pouze ve vizuálních výpočtech. Určuje, jestli se výpočet resetuje a na jaké úrovni hierarchie sloupců obrazce vizuálu. Akceptované hodnoty jsou: odkaz na pole na sloupec v aktuálním obrazci vizuálu, NONE (výchozí), LOWESTPARENT, HIGHESTPARENTnebo celé číslo. Toto chování závisí na celočíselném znaménku:
– pokud je nula nebo vynechána, výpočet se neobnoví. Ekvivalent NONE.
– pokud je kladné, celé číslo identifikuje sloupec začínající od nejvyššího, nezávisle na agregačním intervalu. HIGHESTPARENT odpovídá 1.
– pokud je záporné, celé číslo identifikuje sloupec počínaje nejnižší hodnotou vzhledem k aktuálnímu agregačnímu intervalu. LOWESTPARENT je ekvivalentní -1.

Návratová hodnota

Jeden nebo více řádků z relation.

Poznámky

S výjimkou sloupců přidaných funkcemi tabulky DAX musí mít každý sloupec v relation, pokud matchBy neexistuje, nebo každý sloupec v matchBy a partitionBy, pokud je matchBy k dispozici, musí mít odpovídající vnější hodnotu, aby bylo možné definovat aktuální řádek, na kterém se má pracovat, s následujícím chováním:

  • Pokud je právě jeden odpovídající vnější sloupec, použije se jeho hodnota.
  • Pokud neexistuje odpovídající vnější sloupec, postupujte takto:
    • OFFSET nejprve určí všechny sloupce, které nemají odpovídající vnější sloupec.
    • Pro každou kombinaci existujících hodnot pro tyto sloupce v nadřazeném kontextu OFFSETse vyhodnotí OFFSET a vrátí se řádek.
    • OFFSETkonečný výstup je sjednocením těchto řádků.
  • Pokud existuje více než jeden odpovídající vnější sloupec, vrátí se chyba.

Pokud byly všechny sloupce relationpřidány funkcemi tabulky DAX, vrátí se chyba.

Pokud matchBy existuje, OFFSET se pokusí k identifikaci řádku použít matchBy a partitionBy sloupce. Pokud matchBy neexistuje a sloupce zadané v orderBy a partitionBy nemohou jednoznačně identifikovat každý řádek v relation, pak:

  • OFFSET se pokusí najít nejmenší počet dalších sloupců potřebných k jednoznačné identifikaci každého řádku.
  • Pokud tyto sloupce najdete, OFFSET tyto nové sloupce automaticky připojí k orderBya každý oddíl se seřadí pomocí této nové sady sloupců OrderBy.
  • Pokud tyto sloupce nelze najít, vrátí se chyba.

Prázdná tabulka se vrátí, pokud:

  • Odpovídající vnější hodnota sloupce OrderBy nebo PartitionBy neexistuje v rámci relation.
  • Hodnota delta způsobí posun na řádek, který v rámci oddílu neexistuje.

Pokud OFFSET použijete v počítaném sloupci definovaném ve stejné tabulce jako relationa orderBy vynecháte, vrátí se chyba.

reset lze použít pouze ve vizuálních výpočtech a nelze jej použít v kombinaci s orderBy nebo partitionBy. Pokud je reset, je možné zadat axis, ale relation nelze.

Pokud je hodnota reset absolutní (tj. kladné celé číslo HIGHESTPARENT nebo odkaz na pole) a výpočet se vyhodnotí na cílové úrovni v hierarchii nebo nad ní, výpočet se pro každý jednotlivý prvek resetuje. To znamená, že funkce se vyhodnocuje v rámci oddílu, který obsahuje pouze tento konkrétní prvek.

Příklad 1 – počítaný sloupec

Následující dotaz DAX:

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átí tabulku, která shrnuje celkové prodeje pro každou kategorii produktů a kalendářní rok a také celkový prodej pro danou kategorii v předchozím roce.

Příklad 2 – míra

Následující dotaz DAX:

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

Pomocí OFFSET() v míře vrátí tabulku, která shrnuje celkové prodeje za každý kalendářní rok a celkový prodej za předchozí rok.

Příklad 3 – počítaný sloupec

Následující dotaz DAX:

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átí tabulku FactInternetSales s přidáním sloupce, který označuje, že pro každý prodej, částku předchozího prodeje stejného produktu v sestupném pořadí prodeje, s aktuálním prodejem, který je identifikován jeho SalesOrderNumber a SalesOrderLineNumber. Bez MATCHBYby dotaz vrátil chybu, protože v tabulce FactInternetSales nejsou žádné klíčové sloupce.

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

Následující vizuální výpočet DAX dotazu:

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

Vrátí rozdíl v celkovém prodeji mezi každým měsícem a předchozím prodejem v rámci stejného roku.

Následující snímek obrazovky ukazuje vizuální matici a výraz výpočtu vizuálu:

DAX Výpočet vizuálu

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER