Táto časť popisuje, ako vytvoriť filtre vo vzorcoch jazyka DAX (Data Analysis Expressions). V rámci vzorcov môžete vytvoriť filtre na obmedzenie hodnôt zo zdrojových údajov, ktoré sa použijú vo výpočtoch. Urobíte to tak, že špecifikujete tabuľku ako vstupnú hodnotu vzorca a potom definujete výraz filtra. Výraz filtra, ktorý zadáte, sa použije na zadanie dotazu na údaje a vráti len podmnožinu zdrojových údajov. Filter sa použije dynamicky pri každej aktualizácii výsledkov vzorca v závislosti od aktuálneho kontextu údajov.
Obsah tohto článku
Vytvorenie filtra v tabuľke použitej vo vzorci
Filtre môžete použiť vo vzorcoch, ktoré berú tabuľku ako vstup. Namiesto zadania názvu tabuľky použijete funkciu FILTER na definovanie podmnožiny riadkov zo zadanej tabuľky. Táto podmnožina sa potom odovzdá inej funkcii na vykonávanie operácií, ako sú napríklad vlastné agregácie.
Predpokladajme napríklad, že máte tabuľku údajov, ktorá obsahuje informácie o objednávkach o predajcoch, a chcete vypočítať, koľko sa jednotlivým predajcom predali. Sumu predaja však chcete zobraziť len pre predajcov, ktorí predali viacero jednotiek vašich produktov s vyššou hodnotou. Nasledujúci vzorec, založený na vzorovom zošite jazyka DAX, obsahuje príklad, ako vytvoriť tento výpočet pomocou filtra:
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Množstvo] > 5 &&
"ResellerSales_USD"[ProductStandardCost_USD] > 100),
'ResellerSales_USD'[SalesAmt]
)
Prvá časť vzorca špecifikuje jednu z agregačných funkcií Power Pivotu, ktorá použije tabuľku ako argument. Funkcia SUMX vypočíta súčet v tabuľke.
Druhá časť vzorca informuje o
SUMXtom,FILTER(table, expression),ktoré údaje sa majú použiť.SUMXVyžaduje sa tabuľka alebo výraz, ktorého výsledkom je tabuľka. Tu namiesto použitia všetkých údajov v tabuľke použijete funkciuFILTERna určenie riadkov tabuľky, ktoré sa použijú.
Výraz filtra má dve časti: prvá časť obsahuje názov tabuľky, na ktorú sa filter vzťahuje. Druhá časť definuje výraz, ktorý sa má použiť ako podmienka filtra. V tomto prípade filtrujete predajcov, ktorí predali viac ako 5 jednotiek, a produkty, ktoré stoja viac ako 100 EUR. Operátor && je logický operátor AND, čo označuje, že na to, aby riadok patril do filtrovanej podmnožiny, musia byť pravdivé obe časti podmienky.Tretia časť vzorca určuje funkciu,
SUMXktoré hodnoty sa majú sčítať. V tomto prípade používate len sumu predaja.
Všimnite si, že funkcie ako FILTER, ktoré vrátia tabuľku, nikdy nevrátia tabuľku alebo riadky priamo, ale vždy sú vložené do inej funkcie. Ďalšie informácie o funkcii FILTER a ďalších funkciách používaných na filtrovanie vrátane ďalších príkladov nájdete v téme Funkcie filtrovania (DAX).Poznámka
Výraz filtra je ovplyvnený kontextom, v ktorom je použitý. Ak napríklad použijete filter v miere a ukazovateľ sa použije v kontingenčnej tabuľke alebo kontingenčnom grafe, podmnožina údajov, ktorá sa vráti, môže byť ovplyvnená ďalšími filtrami alebo rýchlymi filtrami, ktoré používateľ použil v kontingenčnej tabuľke. Ďalšie informácie o kontexte nájdete v kontexte vo vzorcoch jazyka DAX.
Filtre, ktoré odstraňujú duplicity
Okrem filtrovania konkrétnych hodnôt môžete vrátiť jedinečnú množinu hodnôt z inej tabuľky alebo stĺpca. Môže to byť užitočné, keď chcete spočítať počet jedinečných hodnôt v stĺpci alebo použiť zoznam jedinečných hodnôt na iné operácie. Jazyk DAX poskytuje dve funkcie na vrátenie odlišných hodnôt: funkciu DISTINCT a funkciu VALUES.
- Funkcia DISTINCT preskúma jeden stĺpec, ktorý zadáte ako argument funkcie, a vráti nový stĺpec, ktorý obsahuje iba odlišné hodnoty.
- Funkcia VALUES tiež vráti zoznam jedinečných hodnôt, ale vráti aj neznámeho člena. Je to užitočné, keď používate hodnoty z dvoch tabuliek, ktoré sú spojené určitým vzťahom, pričom v jednej tabuľke chýba hodnota, ktorá sa v druhej tabuľke nachádza. Ďalšie informácie o neznámom člene nájdete v kontexte vo vzorcoch jazyka DAX.
Obe tieto funkcie vrátia celý stĺpec hodnôt. Funkcie sa preto používajú na získanie zoznamu hodnôt, ktorý sa potom presunie do inej funkcie. Pomocou tohto kódu Product Key môžete napríklad získať zoznam jednotlivých produktov predávaných konkrétnym predajcom a potom pomocou funkcie COUNTROWS spočítať produkty v tomto zozname:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Ako kontext ovplyvňuje filtre
Po pridaní vzorca DAX do kontingenčnej tabuľky alebo kontingenčného grafu môže kontext ovplyvniť výsledky vzorca. Ak pracujete v tabuľke doplnku Power Pivot, kontextom je aktuálny riadok a jeho hodnoty. Ak pracujete v kontingenčnej tabuľke alebo kontingenčnom grafe, kontext znamená množinu alebo podmnožinu údajov, ktorá je definovaná operáciami, ako sú rýchle filtrovanie alebo filtrovanie. Návrh kontingenčnej tabuľky alebo kontingenčného grafu tiež vyžaduje svoj vlastný kontext. Ak napríklad vytvoríte kontingenčnú tabuľku, ktorá zoskupuje predaj podľa oblasti a roka, v kontingenčnej tabuľke sa zobrazia iba údaje, ktoré sa týkajú týchto oblastí a rokov. Preto sa všetky ukazovatele, ktoré pridáte do kontingenčnej tabuľky, vypočítavajú v kontexte záhlaví stĺpcov a riadkov a všetkých filtrov vo vzorci miery.
Ďalšie informácie nájdete v kontexte vo vzorcoch jazyka DAX.
Odstránenie filtrov
Pri práci so zložitými vzorcami budete možno chcieť presne vedieť, aké sú aktuálne filtre, alebo môžete upraviť filtrovaciu časť vzorca. Jazyk DAX poskytuje niekoľko funkcií, ktoré umožňujú odstrániť filtre a určiť, ktoré stĺpce sa zachovajú ako súčasť aktuálneho kontextu filtra. V tejto časti sa nachádza prehľad toho, ako tieto funkcie ovplyvňujú výsledky vo vzorci.
Prepísanie všetkých filtrov funkciou ALL
Funkciu ALL môžete použiť na prepísanie filtrov, ktoré boli použité predtým, a vrátenie všetkých riadkov v tabuľke do funkcie, ktorá vykonáva agregáciu alebo inú operáciu. Ak použijete jeden alebo viacero stĺpcov namiesto tabuľky ako argumenty , ALLfunkcia ALL vráti všetky riadky, pričom ignoruje kontextové filtre.
Poznámka
Ak máte skúsenosti s terminológiou relačných databáz, môžete si predstaviť ALL generovanie prirodzeného vonkajšieho spojenia zľava všetkých tabuliek.
Predpokladajme napríklad, že máte tabuľky Predaj a Produkty a chcete vytvoriť vzorec, ktorý vypočíta celkový predaj aktuálneho produktu vydelený hodnotou predaja všetkých produktov. Je potrebné vziať do úvahy, že ak sa vzorec použije v miere, používateľ kontingenčnej tabuľky môže používať rýchly filter na filtrovanie konkrétneho produktu, pričom názov produktu je uvedený v riadkoch. Ak teda chcete získať skutočnú hodnotu menovateľa bez ohľadu na filtre alebo rýchle filtre, musíte pridať funkciu ALL na prepísanie všetkých filtrov. Nasledujúci vzorec je príkladom použitia funkcie ALL na prepísanie vplyvov predchádzajúcich filtrov:
=SUM (Predaj[Množstvo])/SUMX(Predaj[Množstvo], FILTER(Predaj; VŠETKO(Produkty)))
- Prvá časť vzorca s názvom SUM (Predaj[Množstvo]) vypočíta čitateľ.
- Súčet berie do úvahy aktuálny kontext, čo znamená, že ak pridáte vzorec do vypočítaného stĺpca, použije sa kontext riadka, a ak pridáte vzorec do kontingenčnej tabuľky ako mieru, použijú sa všetky filtre použité v kontingenčnej tabuľke (kontext filtra).
- V druhej časti vzorca sa vypočíta menovateľ. Funkcia ALL prepíše všetky filtre, ktoré je možné použiť na tabuľku
Products.
Ďalšie informácie vrátane podrobných príkladov nájdete v téme Funkcia ALL.
Prepísanie špecifických filtrov pomocou funkcie ALLEXCEPT
Funkcia ALLEXCEPT tiež prepíše existujúce filtre, ale môžete určiť, že niektoré z existujúcich filtrov sa majú zachovať. Stĺpce, ktoré pomenujete ako argumenty funkcie ALLEXCED, určujú, ktoré stĺpce sa budú naďalej filtrovať. Ak chcete prepísať filtre z väčšiny stĺpcov, ale nie zo všetkých, funkcia ALLEXCEPT je pohodlnejšia ako ALL. Funkcia ALLEXCEPT je užitočná najmä pri vytváraní kontingenčných tabuliek, ktoré môžu byť filtrované podľa mnohých rôznych stĺpcov, a chcete ovládať hodnoty, ktoré sa použijú vo vzorci. Ďalšie informácie vrátane podrobného príkladu použitia funkcie ALLEXCEPT v kontingenčnej tabuľke nájdete v téme Funkcia ALLEXPEK.