POSUN

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

Pojem 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.
Vztah (Volitelné) Výraz tabulky, ze kterého se vrátí výstupní řádek.
Pokud je zadáno, 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áno.
– Všechny <výrazy orderBy> a <partitionBy> musí být plně kvalifikované názvy sloupců a pocházejí z jedné tabulky.
– Výchozí hodnota je ALLSELECTED() všech sloupců v <pořadíBy> a <partitionBy>.
osa (Volitelné) Osa ve vizuálním obrazci. K dispozici pouze ve vizuálních výpočtech <a nahrazuje relaci>.
Orderby (Volitelné) Klauzule ORDERBY() obsahující výrazy definující způsob řazení jednotlivých oddílů.
Pokud tento parametr vynecháte,
<musí být explicitně zadán vztah>.
– Výchozí nastavení řazení podle každého sloupce ve <vztahu> , který ještě není zadán v <partitionBy>.
Mezery (Volitelné) Výčet, který definuje, jak zpracovat prázdné hodnoty při řazení.
Tento parametr je vyhrazen pro budoucí použití.
V současné době je jedinou podporovanou hodnotou VÝCHOZÍ, 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ů.
partitionBy (Volitelné) Klauzule PARTITIONBY() obsahující sloupce definující způsob <rozdělení relace> .
Pokud tento parametr vynecháte, <považuje se relace> za jeden oddíl.
matchBy (Volitelné) Klauzule POZVYHLEDAT() obsahující sloupce, které definují, jak se shodují s daty, a identifikují aktuální řádek.
resetování (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. Přijaté hodnoty jsou: NONE, LOWESTPARENT, HIGHESTPARENT nebo celé číslo. Chování závisí na celočíselném znaménku:
– Pokud je nula nebo vynechána, výpočet se neobnoví. Ekvivalent funkce NONE.
- Pokud je kladné, celé číslo identifikuje sloupec začínající od nejvyššího, nezávisle na agregačním intervalu. FUNKCE HIGHESTPARENT je ekvivalentní hodnotě 1.
- Pokud je záporné, celé číslo identifikuje sloupec počínaje nejnižší hodnotou vzhledem k aktuálnímu agregačnímu intervalu. NEJNIŽŠÍPARENT je ekvivalentní hodnotě -1.

Vrácená hodnota

Jeden nebo více řádků z <relace>.

Poznámky

S výjimkou sloupců přidaných funkcemi tabulky DAX musí mít každý sloupec v <relaci, pokud <matchBy> není k dispozici, nebo každý sloupec v <matchBy> a <partitionBy>, pokud <je k dispozici matchBy>, 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:
    • Funkce POSUN 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é kontextu POSUN se vyhodnotí posun a vrátí se řádek.
    • Konečný výstup posunu je sjednocením těchto řádků.
  • Pokud existuje více než jeden odpovídající vnější sloupec, vrátí se chyba.

Pokud funkce tabulky DAX přidaly všechny sloupce relačních <>relací, vrátí se chyba.

Pokud <je k dispozici shodaBy> , posun se pokusí použít <sloupce matchBy> a <partitionBy> k identifikaci řádku.
Pokud <matchBy> není k dispozici a sloupce zadané v orderBy <> a <partitionBy> nemohou jednoznačně identifikovat každý řádek v <relaci>, pak:

  • POSUN 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, funkce OFFSET tyto nové sloupce automaticky připojí k <orderBy> a 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 <relace>.
  • Rozdílová <> hodnota způsobí posun na řádek, který v rámci oddílu neexistuje.

Pokud je posun použit v počítaném sloupci definovaném ve stejné tabulce jako <relace> a <orderBy> vynecháte, vrátí se chyba.

<Resetování> lze použít pouze ve vizuálních výpočtech a nelze ho použít v kombinaci s <orderBy> nebo <partitionBy>. Pokud <je k dispozici resetování>, je možné zadat osu>, <ale <relační nemůže>.

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í funkce 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 funkce POZVYHLEDAT by 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í dotaz jazyka DAX pro výpočet vizuálu:

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 visual calculation

INDEX
ORDERBY
PARTITIONBY
MATCHBY
OKNO
HODNOST
ROWNUMBER