Sdílet prostřednictvím


OFFSET

platí pro:Počítaný sloupecPočítaná tabulkamíravizuální

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

Syntax

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 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.
axis (Volitelné) Osa ve vizuálním obrazci. Dostupné pouze ve vizuálních výpočtech a nahrazuje relation.
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í.

Poznámka: Pokud je zadán parametr blanks a prázdné hodnoty ve funkci ORDERBY() () u jednotlivých výrazů, blanks pro jednotlivý výraz orderBy má prioritu pro příslušný výraz orderBy a výrazy orderBy bez blanks budou respektovat parametr blanks 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é) MATCHBY() klauzule 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.

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čtu vizuálu

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER