Kontext vo vzorcoch jazyka DAX

Vzťahuje sa na
Excel pre Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Kontext umožňuje vykonať dynamickú analýzu, v ktorej sa výsledky vzorca môžu zmeniť tak, aby odrážali aktuálny výber riadka alebo bunky a tiež všetky súvisiace údaje. Pochopenie kontextu a efektívne využívanie kontextu je veľmi dôležité pri vytváraní výkonných vzorcov, dynamických analýz a pri riešení problémov vo vzorcoch.

Táto časť definuje rôzne typy kontextu: kontext riadka, kontext dotazu a kontext filtra. Vysvetľuje, ako sa vyhodnocuje kontext pre vzorce vo vypočítaných stĺpcoch a v kontingenčných tabuľkách.

Posledná časť tohto článku obsahuje prepojenia na podrobné príklady, ktoré ilustrujú, ako sa výsledky vzorcov menia podľa kontextu.

Pochopenie kontextu

Vzorce v Power Pivote môžu byť ovplyvnené filtrami použitými v kontingenčnej tabuľke, vzťahmi medzi tabuľkami a filtrami použitými vo vzorcoch. Kontext je to, čo umožňuje vykonávať dynamickú analýzu. Pochopenie kontextu je dôležité pri vytváraní vzorcov a pri riešení problémov.

Existujú rôzne typy kontextu: kontext riadka, kontext dotazu a kontext filtra.

Kontext riadka je možné považovať za aktuálny riadok. Ak ste vytvorili vypočítaný stĺpec, kontext riadka pozostáva z hodnôt v každom jednotlivom riadku a hodnôt v stĺpcoch, ktoré súvisia s aktuálnym riadkom. Existujú tiež niektoré funkcie (EARLIER a EARLIEST), ktoré získajú hodnotu z aktuálneho riadka a potom túto hodnotu použijú pri vykonávaní operácie v celej tabuľke.

Kontext dotazu odkazuje na podmnožinu údajov, ktorá sa implicitne vytvorí pre každú bunku v kontingenčnej tabuľke v závislosti od hlavičiek riadkov a stĺpcov.

Kontext filtra je množina hodnôt povolených v každom stĺpci na základe obmedzení filtra použitých na riadok alebo definovaných výrazmi filtra vo vzorci.

Na začiatok stránky

Kontext riadka

Ak vytvoríte vzorec vo vypočítanom stĺpci, kontext riadka pre tento vzorec zahrnie hodnoty zo všetkých stĺpcov v aktuálnom riadku. Ak tabuľka súvisí s inou tabuľkou, obsah zahŕňa aj všetky hodnoty z tejto tabuľky, ktoré súvisia s aktuálnym riadkom.

Predpokladajme napríklad, že vytvoríte vypočítaný stĺpec =[Dopravné] + [Daň], ktorý sčíta dva stĺpce z tej istej tabuľky. Tento vzorec sa správa ako vzorce v excelovej tabuľke, ktoré automaticky odkazujú na hodnoty z rovnakého riadka. Všimnite si, že tabuľky sa líšia od rozsahov: nemôžete odkazovať na hodnotu z predchádzajúceho riadku s použitím zápisu rozsahu a rovnako nemôžete odkazovať na žiadnu ľubovoľnú jednotlivú hodnotu v tabuľke alebo bunke. Vždy musíte pracovať s tabuľkami a stĺpcami.

Kontext riadka automaticky nasleduje vzťahy medzi tabuľkami a určuje, ktoré riadky v súvisiacich tabuľkách sú priradené k aktuálnemu riadku.

Nasledujúci vzorec napríklad používa funkciu RELATED na načítanie daňovej hodnoty zo súvisiacej tabuľky na základe oblasti, do ktorej bola objednávka doručená. Hodnota dane sa určuje pomocou hodnoty pre oblasť v aktuálnej tabuľke, vyhľadaním oblasti v súvisiacej tabuľke a následným získaním sadzby dane pre daný región zo súvisiacej tabuľky.

= [Freight] + RELATED('Oblasť'[TaxRate])

Tento vzorec jednoducho získa sadzbu dane pre aktuálnu oblasť z tabuľky Región. Nie je potrebné poznať ani zadať kľúč, ktorý spája tabuľky.

Kontext viacerých riadkov

Jazyk DAX okrem toho zahŕňa funkcie, ktoré vykonávajú výpočty v tabuľke. Tieto funkcie môžu mať viacero aktuálnych riadkov a kontextov aktuálnych riadkov. V rámci programovania môžete vytvárať vzorce, ktoré sa opakujú počas vnútornej a vonkajšej slučky.

Predpokladajme napríklad, že zošit obsahuje tabuľku Produkty a tabuľku Predaj . Možno budete chcieť prejsť celú tabuľku predaja, ktorá je plná transakcií zahŕňajúcich viacero produktov, a nájsť najväčšie objednané množstvo pre každý produkt v rámci jednej transakcie.

V Exceli tento výpočet vyžaduje sériu čiastkových súhrnov, ktoré by v prípade zmeny údajov bolo potrebné znova zostaviť. Ak patríte medzi pokročilých používateľov Excelu, možno vám sa podarí vytvoriť vzorce poľa, ktoré stačia na túto prácu. Prípadne môžete v relačnej databáze písať vnorené čiastkové výbery.

Pri použití jazyka DAX však môžete vytvoriť jeden vzorec, ktorý vráti správnu hodnotu. Výsledky sa automaticky aktualizujú pri každom pridaní údajov do tabuliek.

=MAXX(FILTER(Predaj,[ProdKey]=EARLIER([ProdKey])),Predaj[ObjednanieṢ])

Podrobný postup pri tomto vzorci nájdete v téme Funkcia RANRED.

Stručne povedané, funkcia EARLIER uloží kontext riadka z operácie, ktorá predchádzala aktuálnej operácii. Funkcia vždy ukladá do pamäte dve množiny kontextu: jedna množina kontextu predstavuje aktuálny riadok pre vnútornú slučku vzorca a druhá množina kontextu predstavuje aktuálny riadok pre vonkajšiu slučku vzorca. Jazyk DAX automaticky dodáva hodnoty medzi dvoma slučkami, aby ste mohli vytvárať komplexné agregačné funkcie.

Na začiatok stránky

Kontext dotazu

Kontext dotazu odkazuje na podmnožinu údajov, ktorá sa implicitne načítava pre vzorec. Keď vložíte pole miery alebo iné pole hodnoty do bunky v kontingenčnej tabuľke, mechanizmus Power Pivot preskúma hlavičky riadkov a stĺpcov, rýchle filtre a filtre zostáv a určí kontext. Power Pivot potom vykoná potrebné výpočty na vyplnenie každej bunky v kontingenčnej tabuľke. Načítaná množina údajov je kontext dotazu pre každú bunku.

Keďže kontext sa môže meniť v závislosti od umiestnenia vzorca, výsledky vzorca sa tiež menia v závislosti od toho, či použijete vzorec v kontingenčnej tabuľke s mnohými zoskupeniami a filtrami, alebo vo vypočítanom stĺpci bez filtrov a s minimálnym kontextom.

Predpokladajme napríklad, že vytvoríte tento jednoduchý vzorec, ktorý sčíta hodnoty v stĺpci Profit tabuľky Predaj :

=SUM('Predaj'[Zisk])

Ak použijete tento vzorec vo vypočítanom stĺpci v rámci tabuľky Predaj , výsledky vzorca budú rovnaké pre celú tabuľku, pretože kontextom dotazu pre vzorec je vždy celá množina údajov tabuľky Predaj . Vaše výsledky budú ziskové pre všetky oblasti, všetky produkty, všetky roky atď.

Zvyčajne však nechcete vidieť rovnaký výsledok stokrát, ale chcete získať zisk za konkrétny rok, krajinu alebo oblasť, konkrétny produkt alebo nejakú kombináciu týchto položiek a potom získať celkový súčet.

V kontingenčnej tabuľke je možné jednoducho zmeniť kontext pridaním alebo odstránením hlavičiek stĺpcov a riadkov a pridaním alebo odstránením rýchlych filtrov. Môžete vytvoriť vzorec, ako je ten uvedený vyššie, v miere a potom ho presunúť do kontingenčnej tabuľky. Vždy, keď do kontingenčnej tabuľky pridáte záhlavia stĺpcov alebo riadkov, zmeníte kontext dotazu, v ktorom sa ukazovateľ vyhodnocuje. Operácie rezania a filtrovania ovplyvňujú aj kontext. Preto sa ten istý vzorec, ktorý sa používa v kontingenčnej tabuľke, vyhodnotí v inom kontexte dotazu pre každú bunku.

Na začiatok stránky

Kontext filtra

Kontext filtra sa pridá, keď zadáte obmedzenia filtra množiny hodnôt povolených v stĺpci alebo tabuľke pomocou argumentov vo vzorci. Kontext filtra sa použije nad ostatnými kontextmi, ako je napríklad kontext riadka alebo kontext dotazu.

Kontingenčná tabuľka napríklad vypočítava svoje hodnoty pre každú bunku na základe záhlaví riadkov a stĺpcov, ako je popísané v predchádzajúcej časti o kontexte dotazu. V rámci mierok alebo vypočítaných stĺpcov, ktoré pridáte do kontingenčnej tabuľky, však môžete zadať výrazy filtra na ovládanie hodnôt použitých vo vzorci. Môžete tiež selektívne vymazať filtre v určitých stĺpcoch.

Ďalšie informácie o vytváraní filtrov vo vzorcoch nájdete v téme Funkcie filtra.

Príklad toho, ako je možné vymazať filtre na vytvorenie celkových súčtov, nájdete v téme Funkcia ALL.

Príklady selektívneho vymazania a použitia filtrov vo vzorcoch nájdete v téme Funkcia ALLEXPEK.

Preto je potrebné skontrolovať definíciu mier alebo vzorcov použitých v kontingenčnej tabuľke, aby ste pri interpretácii výsledkov vzorcov poznali kontext filtra.

Na začiatok stránky

Stanovenie kontextu vo vzorcoch

Po vytvorení vzorca Power Pivot pre Excel najskôr skontroluje všeobecnú syntax a potom názvy stĺpcov a tabuliek, ktoré poskytnete, porovnáva s príslušnými stĺpcami a tabuľkami v aktuálnom kontexte. Ak Power Pivot nedokáže nájsť stĺpce a tabuľky určené vzorcom, zobrazí sa chyba.

Kontext sa určuje tak, ako je uvedené v predchádzajúcich častiach, a to pomocou tabuliek dostupných v zošite, vzťahov medzi tabuľkami a použitými filtrami.

Ak ste napríklad práve importovali nejaké údaje do novej tabuľky a nepoužili ste žiadne filtre, celá množina stĺpcov v tabuľke je súčasťou aktuálneho kontextu. Ak máte viac tabuliek, ktoré sú prepojené vzťahmi, a pracujete v kontingenčnej tabuľke, ktorá bola filtrovaná pridaním záhlaví stĺpcov a pomocou rýchlych filtrov, kontext zahŕňa súvisiace tabuľky a všetky filtre údajov.

Kontext je výkonný koncept, ktorý môže tiež sťažiť riešenie problémov so vzorcami. Odporúčame vám začať s jednoduchými vzorcami a vzťahmi, aby ste videli, ako kontext funguje, a potom začať experimentovať s jednoduchými vzorcami v kontingenčných tabuľkách. Nasledujúca časť obsahuje aj niekoľko príkladov toho, ako vzorce používajú rôzne typy kontextu na dynamické vrátenie výsledkov.

Príklady kontextu vo vzorcoch

  • Funkcia RELATED rozšíri kontext aktuálneho riadka o hodnoty v súvisiacom stĺpci. Vďaka tomu môžete vykonávať vyhľadávania. Príklad v tejto téme znázorňuje interakciu filtrovania a kontextu riadka.
  • Funkcia FILTER umožňuje určiť riadky, ktoré sa majú zahrnúť do aktuálneho kontextu. Príklady v tejto téme tiež ilustrujú, ako vložiť filtre do iných funkcií, ktoré vykonávajú agregačné funkcie.
  • Funkcia ALL nastavuje kontext vo vzorci. Môžete ju použiť na prepísanie filtrov, ktoré sa použijú v dôsledku kontextu dotazu.
  • Funkcia ALLEXCEPT umožňuje odstrániť všetky filtre okrem jedného, ktorý určíte. Obe témy obsahujú príklady, ktoré vás prevedú tvorbou vzorcov a pochopením zložitých kontextov.
  • Funkcie EARLIER a EARLIEST umožňujú prechádzať tabuľkami prostredníctvom výpočtov a zároveň odkazovať na hodnotu z vnútornej slučky. Ak poznáte pojem rekurzie a vnútorné a vonkajšie slučky, oceníte silu, ktorú poskytujú funkcie EARLIER a EARLIEST Ak s týmito konceptmi nemáte skúsenosti, mali by ste pozorne postupovať podľa krokov v príklade, aby ste videli, ako sa vo výpočtoch používa vnútorný a vonkajší kontext.

Na začiatok stránky

Referenčná integrita

Táto časť popisuje niektoré rozšírené koncepty týkajúce sa chýbajúcich hodnôt v tabuľkách doplnku Power Pivot, ktoré sú prepojené vzťahmi. Táto časť môže byť pre vás užitočná, ak máte zošity s viacerými tabuľkami a zložitými vzorcami a potrebujete pomoc s pochopením výsledkov.

Ak s konceptmi relačných údajov iba začínate, odporúčame vám prečítať si úvodnú tému Prehľad vzťahov.

Referenčná integrita a vzťahy doplnku Power Pivot

Power Pivot na definovanie platného vzťahu nevyžaduje medzi dvoma tabuľkami vynútenie referenčnej integrity. Namiesto toho sa vytvorí prázdny riadok na konci každého vzťahu "one-to-many" a použije sa na spracovanie všetkých nezhodujúcich sa riadkov zo súvisiacej tabuľky. Efektívne sa správa ako vonkajšie spojenie SQL.

Ak v kontingenčných tabuľkách zoskupujete údaje podľa strany "one" vzťahu, všetky nezhodné údaje na strane "many" tohto vzťahu sa zoskupia a zahrnú sa do súčtov s prázdnym záhlavím riadka. Prázdny nadpis zodpovedá údaju "neznámy člen".

Ako pochopiť neznámeho člena

Pojem neznámeho člena vám pravdepodobne pozneje, ak pracujete s viacrozmernými databázovými systémami, ako napríklad SQL Server Analysis Services. Ak je pre vás tento výraz nový, v nasledujúcom príklade sa vysvetľuje, čo je neznámy člen a ako ovplyvňuje výpočty.

Predpokladajme, že vytvárate výpočet, ktorý sčítava mesačný predaj pre každú predajňu, ale v stĺpci v tabuľke Predaj chýba hodnota pre názov predajne. Čo by ste očakávali vo vzorci vzhľadom na to, že tabuľky pre obchod a Predaj sú prepojené názvom obchodu? Ako má kontingenčná tabuľka zoskupiť alebo zobraziť údaje o predaji, ktoré nesúvisia s existujúcou predajňou?

Tento problém je bežný v skladoch údajov, kde veľké tabuľky s údajmi faktov musia logicky súvisieť s tabuľkami dimenzií, ktoré obsahujú informácie o obchodoch, oblastiach a ďalšie atribúty, ktoré sa používajú na kategorizáciu a výpočet faktov. Problém sa vyrieši tak, že všetky nové skutočnosti, ktoré nesúvisia s existujúcou entitou, sa dočasne priradia neznámemu členovi. Preto sa nesúvisiace skutočnosti zobrazia zoskupené v kontingenčnej tabuľke pod prázdnym nadpisom.

Porovnanie prázdnych hodnôt a prázdnych riadkov

Prázdne hodnoty sa líšia od prázdnych riadkov, ktoré sa pridajú za účelom prispôsobenia neznámeho člena. Prázdna hodnota je špeciálna hodnota, ktorá sa používa na vyjadrenie hodnôt null, prázdnych reťazcov a iných chýbajúcich hodnôt. Ďalšie informácie o prázdnej hodnote, ako aj o iných typoch údajov DAX, nájdete v téme Typy údajov v dátových modeloch.

Na začiatok stránky