OFSET
Platí pro: Výpočet počítané tabulky Počítaná tabulka Výpočet vizuálu
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>. |
prázdná místa | (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: