Kontext ve vzorcích jazyka DAX

Platí pro
Excel pro Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Kontext umožňuje provádět dynamickou analýzu, ve které se výsledky vzorce mohou měnit podle aktuálního výběru řádku nebo buňky a také všech souvisejících dat. Pochopení kontextu a jeho efektivní využití jsou velmi důležité pro vytváření vysoce výkonných vzorců, dynamických analýz a řešení problémů ve vzorcích.

Tato část definuje různé typy kontextu: kontext řádku, kontext dotazu a kontext filtru. Vysvětluje, jak se vyhodnocuje kontext u vzorců v počítaných sloupcích a v kontingenčních tabulkách.

Poslední část tohoto článku obsahuje odkazy na podrobné příklady, které ilustrují, jak se výsledky vzorců mění v závislosti na kontextu.

Principy kontextu

Na vzorce v Power Pivotu můžou mít vliv filtry použité v kontingenční tabulce, relace mezi tabulkami a filtry použité ve vzorcích. Kontext je to, co umožňuje provádět dynamickou analýzu. Pochopení kontextu je důležité při sestavování vzorců a odstraňování problémů s nimi.

Existují různé typy kontextu: kontext řádku, kontext dotazu a kontext filtru.

Kontext řádku si lze představit jako "aktuální řádek". Pokud jste vytvořili počítaný sloupec, kontext řádku se skládá z hodnot v každém jednotlivém řádku a hodnot ve sloupcích, které jsou ve vztahu k aktuálnímu řádku. Existují také některé funkce (EARLIER a EARLIEST), které získávají hodnotu z aktuálního řádku a pak tuto hodnotu používají při provádění operace nad celou tabulkou.

Kontext dotazu označuje podmnožinu dat, která se implicitně vytvoří pro každou buňku kontingenční tabulky v závislosti na záhlaví řádků a sloupců.

Kontext filtru je množina hodnot povolených v jednotlivých sloupcích na základě omezení filtru, která byla použita u řádku nebo která jsou definována výrazy filtru ve vzorci.

Začátek stránky

Kontext řádku

Pokud vytvoříte vzorec v počítaném sloupci, kontext řádku pro tento vzorec zahrnuje hodnoty ze všech sloupců v aktuálním řádku. Pokud je tabulka v relaci s jinou tabulkou, obsahuje obsah také všechny hodnoty z této tabulky, které jsou v relaci s aktuálním řádkem.

Předpokládejme například, že vytvoříte počítaný sloupec =[Freight] + [Tax], který sečte dva sloupce ze stejné tabulky. Tento vzorec se chová podobně jako vzorce v excelové tabulce, které automaticky odkazují na hodnoty ze stejného řádku. Všimněte si, že tabulky se od oblastí liší: pomocí zápisu rozsahu nemůžete odkazovat na hodnotu z řádku před aktuálním řádkem ani nemůžete odkazovat na libovolnou jednotlivou hodnotu v tabulce nebo buňce. Musíte vždy pracovat s tabulkami a sloupci.

Kontext řádku automaticky sleduje relace mezi tabulkami a určuje, které řádky v souvisejících tabulkách jsou přidružené k aktuálnímu řádku.

Následující vzorec například používá funkci RELATED k načtení hodnoty daně ze související tabulky na základě oblasti, do které byla objednávka odeslána. Daňová hodnota se určí tak, že se použije hodnota pro oblast v aktuální tabulce, vyhledá se oblast v související tabulce a pak se ze související tabulky získá daňová sazba pro tuto oblast.

= [Freight] + RELATED('Region'[TaxRate])

Tento vzorec jednoduše získá daňovou sazbu pro aktuální oblast z tabulky Oblast. Klíč, který spojuje tabulky, nemusíte znát ani zadávat.

Kontext více řádků

Jazyk DAX také obsahuje funkce, které iterují výpočty nad tabulkou. Tyto funkce můžou mít víc aktuálních řádků a kontextů aktuálních řádků. V programovacích termínech můžete vytvářet vzorce, které se rekurzivně vyskytují ve vnitřní a vnější smyčce.

Předpokládejme například, že sešit obsahuje tabulky Výrobky a tabulky Prodej . Může být užitečné projít celou tabulku prodejů, která je plná transakcí zahrnujících různé produkty, a najít největší množství objednané pro každý produkt v jedné transakci.

V Excelu tento výpočet vyžaduje řadu průběžných souhrnů, které by se při změně dat musely znovu sestavit. Pokud jste pokročilým uživatelem Excelu, můžete vytvořit maticové vzorce, které by tuto úlohu zvládly. Alternativně můžete v relační databázi psát vnořené dílčí výběry.

Pomocí jazyka DAX ale můžete vytvořit jediný vzorec, který vrací správnou hodnotu, a výsledky se automaticky aktualizují při každém přidání dat do tabulek.

=MAXX(FILTER(Prodej;[KlíčProduktu]=DŘÍVE([KódProduktu]));Prodej[MnožstvíObjednávky])

Podrobný návod k tomuto vzorci najdete u funkce BEFORE.

Stručně řečeno, funkce EARLIER ukládá kontext řádku z operace, která předcházela aktuální operaci. Funkce vždy ukládá do paměti dvě sady kontextu: jedna sada kontextu představuje aktuální řádek vnitřní smyčky vzorce a druhá kontextová sada představuje aktuální řádek vnější smyčky vzorce. Jazyk DAX automaticky vkládá hodnoty mezi tyto dvě smyčky, takže můžete vytvářet složité agregace.

Začátek stránky

Kontext dotazu

Kontext dotazu označuje podmnožinu dat, která se implicitně načte pro vzorec. Když přetáhnete pole míry nebo jiné hodnoty do buňky v kontingenční tabulce, modul Power Pivot zkontroluje záhlaví řádků a sloupců, průřezy a filtry sestavy a zjistí kontext. Power Pivot pak provede výpočty potřebné k naplnění jednotlivých buněk kontingenční tabulky. Sada dat, která se načítá, představuje kontext dotazu pro každou buňku.

Vzhledem k tomu, že se kontext může měnit v závislosti na umístění vzorce, mění se i výsledky vzorce podle toho, jestli vzorec použijete v kontingenční tabulce s mnoha seskupeními a filtry nebo v počítaném sloupci bez filtrů a s minimem kontextu.

Předpokládejme například, že jste vytvořili tento jednoduchý vzorec, který sečte hodnoty ve sloupci Zisk v tabulce Prodej :

=SUMA('Prodej'[Zisk])

Pokud tento vzorec použijete v počítaném sloupci v tabulce Prodej , budou výsledky pro vzorec stejné pro celou tabulku, protože kontext dotazu pro vzorec je vždy celá sada dat tabulky Prodej . Vaše výsledky budou ziskové pro všechny regiony, všechny produkty, všechny roky a tak dále.

Obvykle ale nechcete, aby se stokrát zobrazil stejný výsledek, ale místo toho chcete získat zisk za konkrétní rok, konkrétní zemi nebo oblast, konkrétní produkt nebo nějakou jejich kombinaci a potom získat celkový součet.

V kontingenční tabulce se dá snadno měnit kontext přidáním nebo odebráním záhlaví sloupců a řádků a přidáním nebo odebráním průřezů. V míře můžete vytvořit vzorec, který se podobá tomu výše, a pak ho vložit do kontingenční tabulky. Při každém přidání záhlaví sloupců nebo řádků do kontingenční tabulky změníte kontext dotazu, ve kterém se míra vyhodnocuje. Operace krájení a filtrování také ovlivňují kontext. Proto se stejný vzorec použitý v kontingenční tabulce vyhodnocuje pro každou buňku v jiném kontextu dotazu.

Začátek stránky

Kontext filtru

Kontext filtru se přidá, když pomocí argumentů vzorce určíte omezení filtru u sady hodnot povolených ve sloupci nebo tabulce. Kontext filtru se používá nad jinými kontexty, jako je kontext řádku nebo kontext dotazu.

Kontingenční tabulka například vypočítá své hodnoty pro každou buňku na základě záhlaví řádků a sloupců, jak je popsáno v předchozí části o kontextu dotazu. V rámci měr nebo počítaných sloupců, které přidáte do kontingenční tabulky, ale můžete zadat výrazy filtru, které určují, které hodnoty budou vzorcem použity. Můžete také selektivně vymazat filtry u konkrétních sloupců.

Další informace o vytváření filtrů ve vzorcích najdete v tématu Funkce Filtr.

Příklad vymazání filtrů za účelem vytvoření celkových součtů najdete v tématu Funkce ALL.

Příklady selektivního vymazání a použití filtrů ve vzorcích najdete u funkce ALLEXCEPTION.

Proto je nutné zkontrolovat definici měr nebo vzorců použitých v kontingenční tabulce, abyste při interpretaci výsledků vzorců znali kontext filtru.

Začátek stránky

Určení kontextu ve vzorcích

Když vytváříte vzorec, Power Pivot pro Excel nejdřív zkontroluje obecnou syntaxi a pak porovná zadané názvy sloupců a tabulek s možnými sloupci a tabulkami v aktuálním kontextu. Pokud Power Pivot nenajde sloupce a tabulky určené vzorcem, zobrazí se chyba.

Kontext je určen výše popsaným způsobem popsaným v předchozích částech na základě tabulek dostupných v sešitu, relací mezi tabulkami a použitých filtrů.

Pokud jste například do nové tabulky právě importovali nějaká data, ale nepoužili jste žádné filtry, je součástí aktuálního kontextu celá sada sloupců v tabulce. Pokud máte víc tabulek propojených relacemi a pracujete v kontingenční tabulce, která byla filtrovaná přidáním záhlaví sloupců a použitím průřezů, zahrnuje kontext související tabulky a případné filtry dat.

Kontext je mocný pojem, který může také ztížit řešení potíží se vzorci. Doporučujeme začít s jednoduchými vzorci a relacemi, abyste zjistili, jak kontext funguje, a pak začít experimentovat s jednoduchými vzorci v kontingenčních tabulkách. V následující části najdete také několik příkladů, jak vzorce používají různé typy kontextu k dynamickému vracení výsledků.

Příklady kontextu ve vzorcích

  • Funkce RELATED rozšíří kontext aktuálního řádku o hodnoty ze souvisejícího sloupce. To vám umožní provádět vyhledávání. Příklad v tomto tématu ilustruje interakci filtrování a kontextu řádku.
  • Funkce FILTER umožňuje určit řádky, které chcete zahrnout do aktuálního kontextu. Příklady v tomto tématu také ilustrují, jak vložit filtry do jiných funkcí, které provádějí agregace.
  • Funkce ALL nastaví kontext ve vzorci. Můžete ho použít k přepsání filtrů, které se použijí v důsledku kontextu dotazu.
  • Funkce ALLEXCEPT umožňuje odebrat všechny filtry kromě jednoho, který určíte. Obě témata obsahují příklady, které vás provedou sestavováním vzorců a pochopením složitých souvislostí.
  • Funkce EARLIER a EARLIEST umožňují cyklicky procházet tabulky pomocí výpočtů a odkazovat přitom na hodnotu z vnitřní smyčky. Pokud jste obeznámeni s konceptem rekurze a s vnitřními a vnějšími smyčkami, oceníte sílu, kterou poskytují funkce EARLIER a EARTY. Pokud s těmito koncepty začínáte, postupujte pozorně podle kroků v příkladu, abyste viděli, jak se vnitřní a vnější kontext používá ve výpočtech.

Začátek stránky

Referenční integrita

Tato část popisuje některé pokročilé koncepty související s chybějícími hodnotami v tabulkách Power Pivotu, které jsou propojené relacemi. Tato část může být užitečná, pokud máte sešity s mnoha tabulkami a složitými vzorci a chcete porozumět výsledkům.

Pokud jsou pro vás koncepty relačních dat novinka, doporučujeme vám, abyste si napřed přečetli úvodní téma Přehled relací.

Referenční integrita a relace Power Pivotu

Power Pivot nevyžaduje k definování platné relace vynucování referenční integrity mezi dvěma tabulkami. Místo toho se na konci každé relace 1:N vytvoří prázdný řádek, který se použije ke zpracování všech neodpovídajících řádků ze související tabulky. Efektivně se chová jako vnější spojení SQL.

Pokud v kontingenčních tabulkách seskupíte data podle jedné strany relace, všechna chybějící data na straně N relace se seskupí dohromady a zahrnou se do součtů s prázdným záhlavím řádku. Prázdný nadpis zhruba odpovídá výrazu "neznámý člen".

Porozumění neznámému členu

Koncept neznámého člena je vám pravděpodobně povědomý, pokud jste pracovali s multidimenzionálními databázovými systémy, jako je například Služba Analysis Services serveru SQL. Pokud je pro vás tento termín nový, následující příklad vysvětluje, co je neznámý člen a jak ovlivňuje výpočty.

Předpokládejme, že vytváříte výpočet, který sečte měsíční prodeje pro každý obchod, ale ve sloupci v tabulce Sales chybí hodnota pro název obchodu. Vzhledem k tomu, že tabulky Store a Sales jsou propojené názvem obchodu, co byste očekávali, že se stane ve vzorci? Jak by měla kontingenční tabulka seskupit nebo zobrazit údaje o prodeji, které nesouvisejí s existujícím obchodem?

Tento problém je běžný v datových skladech, kde velké tabulky dat faktů musí logicky souviset s tabulkami dimenzí, které obsahují informace o obchodech, oblastech a dalších atributech, které se používají pro kategorizaci a výpočet faktů. Aby se problém vyřešil, všechny nové skutečnosti, které nesouvisejí s existující entitou, se dočasně přiřadí neznámému členovi. Proto se nesouvisející fakta zobrazí seskupená v kontingenční tabulce pod prázdným záhlavím.

Zpracování prázdných hodnot a prázdných řádků

Prázdné hodnoty se liší od prázdných řádků, které se přidají, aby se vešly na neznámý člen. Prázdná hodnota je speciální hodnota, která představuje hodnoty null, prázdné řetězce a další chybějící hodnoty. Další informace o prázdné hodnotě a dalších datových typech jazyka DAX najdete v tématu Datové typy v datových modelech.

Začátek stránky