Funkce CALCULATE() je velmi užitečná funkce jazyka DAX, pomocí které můžeme při tvorbě výpočtů manipulovat s vnějšími filtry, ve kterých jsou měřítka v reportech vyhodnocena. Jednou z funkcí, kterou můžeme použít pro úpravu filtrů ve funkci CALCULATE(), je funkce REMOVEFILTERS(). REMOVEFILTERS() odstraňuje existující filtry v době vyhodnocení výrazu ze sloupců nebo tabulek, v závislosti na způsobu jejího použití. Tento článek obsahuje jednoduchý příklad s odstraněním filtrů z jednoho sloupce ve funkci CALCULATE(). Příklad je vytvořen ve cvičném souboru Adventure Works DW 2020.pbix, který je volně dostupný ke stažení na internetu. Soubor s řešením je dostupný ke stažení níže pod tímto příspěvkem.
Příklad odstranění filtru z jednoho sloupce v jazyku DAX
Měřítko:
Pokud chceme při výpočtu ignorovat všechny filtry z jednoho sloupce, můžeme použít kombinaci DAX funkcí CALCULATE() a REMOVEFILTERS(). Prvním argumentem funkce CALCULATE() bude samotný výpočet, který v tomto příkladu představuje sumu hodnot ze sloupce Sales[Sales Amount]. Jedná se tedy o stejný výpočet, který je uveden v definici prvního měřítka s názvem [Prodeje]. Tento výpočet vložíme do funkce CALCULATE(). Ve funkci CALCULATE() můžeme následně manipulovat s filtry. K odstranění filtrů z jednoho sloupce můžeme použít funkci REMOVEFILTERS(). Argumentem funkce REMOVEFILTERS() bude sloupec, ze kterého chceme filtry odstranit. V tomto příkladu budeme odstraňovat filtry aplikované v reportu na sloupec s názvem Product[Category], který obsahuje názvy kategorií produktů. Definice měřítka bude vypadat následovně.
Měřítko:
Nyní, když máme vytvořená dvě nová měřítka, můžeme je použít v reportu. Do vizuálu tabulky vložíme do řádků hodnoty ze sloupce 'Product'[Category] a dvě nově vytvořená měřítka. Výsledek je zobrazen na následujícím obrázku.
Měřítko [Prodeje] vrací v každém řádku tabulky hodnotu odpovídající prodejům produktů v dané kategorii. Kategorie v řádcích působí jako filtr na výsledek měřítka [Prodeje]. Při vyhodnocení stejného výpočtu v měřítku [Prodeje všechny kategorie] je tento filtr odstraněn právě díky funkci REMOVEFILTERS() s argumentem ve formě stejného sloupce, jako je sloupec použitý v řádcích tabulky. Měřítko [Prodeje všechny kategorie] proto vrací sumu prodejů za všechny kategorie, bez ohledu na filtry působící na výpočet z řádků tabulky. Pokud do reportu přidáme průřez, ve kterém použijeme filtr aplikovaný opět na stejný sloupec, tedy na sloupec s kategoriemi produktů, výsledek bude vypadat následovně.
V průřezu filtrujeme pouze dvě kategorie, kategorii Bikes a kategorii Clothing. Měřítko [Prodeje všechny kategorie] opět vrací hodnotu prodejů za všechny kategorie. To znamená že funkce REMOVEFILTERS() odstraňuje filtry také z použitého průřezu, a odstranila by filtry z jakéhokoliv jiného vizuálu, který bychom v reportu mohli použít a který by filtroval sloupec uvedený jako argument ve funkci REMOVEFILTERS(). Nyní můžeme vložit do řádků tabulky hodnoty z jiného sloupce, než z kterého odstraňujeme filtry. Použijeme například barvy produktů, namísto názvů kategorií. Výsledek obou měřítek je nyní stejný.
Výsledek obou měřítek je stejný, protože v měřítku [Prodeje všechny kategorie] odstraňujeme filtry pouze ze sloupce Product[Category]. Nyní ovšem na měřítka působí filtr z jiného sloupce, ze sloupce Product[Color], který je vložený v řádcích tabulky. Tento filtr není odstraněn, a proto je výsledek obou měřítek stejný. Pokud v průřezu zafiltrujeme pouze hodnotu Clothing, výsledek obou měřítek je již jiný.
Měřítko [Prodeje] vrací v prvním řádku tabulky sumu prodejů produktů v barvě Black a z kategorie Clothing. Ve druhém řádku vrací měřítko [Prodeje] hodnotu prodejů modrých produktů z kategorie Clothing, a tak dále. Měřítko [Prodeje všechny kategorie], ve kterém odstraňujeme filtry ze sloupce s kategoriemi, vrací v prvním řádku tabulky prodeje všech produktů ze všech kategorií, v barvě Black. Ve druhém řádku tabulky vrací měřítko [Prodeje všechny kategorie] hodnotu prodejů všech produktů v barvě Blue, opět bez ohledu na filtr nastavený v průřezu na kategorii produktů Clothing. Další zajímavý pohled na obě měřítka zobrazuje následující obrázek.
V řádcích vizuálu jsou roky a kategorie produktů v hierarchii. Měřítko [Prodeje] vrací v každém řádku hodnotu prodejů za produkty v dané kategorii a za odpovídající rok. Ve zvýrazněném řádku představuje hodnota měřítka [Prodeje] sumu prodejů za produkty v kategorii Bikes ve fiskálním roce 2018. Hodnota měřítka [Prodeje všechny kategorie] vrací ve stejném řádku hodnotu představující prodeje produktů ve fiskálním roce 2018, ale za všechny kategorie. Výsledek měřítka [Prodeje všechny kategorie] je tedy ovlivněn filtrem každého roku, ale filtry ze sloupce s kategoriemi ignoruje. Při pohledu na hodnoty v tabulce si můžeme snadno představit jednu z možností, jak je možné prakticky využít výsledek měřítka [Prodeje všechny kategorie].
Jak můžeme vidět na obrázku výše, pokud vydělíme výsledek měřítka [Prodeje] výsledkem měřítka [Prodeje všechny kategorie], dostaneme v každém řádku tabulky procentuální podíl prodejů v dané kategorii za aktuální rok. Praktické příklady výpočtů v jazyku DAX můžete najít na stránce DAX příklady.
Komentáře
Okomentovat