OFFSET
platí pro:Počítaný sloupec
Počítaná tabulka
míra
vizuá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:
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 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 , HIGHESTPARENT nebo 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 relation
př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
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
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 relation
a 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:
výpočtu vizuálu