Funkce KEEPFILTERS() se používá pro úpravu chování logických filtrů nebo filtrů ve formě tabulek definovaných ve funkci CALCULATE() a CALCULATETABLE(). Filtr vložený do funkce KEEPFITLERS() je vyhodnocen v logickém AND vztahu s aktivními vnějšími filtry. Nedojde tedy k přepsání vnějších filtrů aplikovaných na stejné sloupce, ale k jejich průniku.
Tento článek obsahuje pouze jednoduchý příklad použití funkce KEEPFILTERS(). K dispozici je nový, podrobnější příspěvek k funkci KEEPFILTERS(), který je dostupný pod následujícím odkazem:
https://www.tkadlcikpetr.cz/2024/12/priklady-pouziti-dax-funkce-keepfilters.html
Příklad použití funkce KEEPFILTERS
Pokud uvnitř funkce CALCULATE() použijeme logický filtr pro úpravu výsledku prvního výrazu, dojde před aplikováním nového filtru na použitý sloupec nejdříve k odstranění všech původních filtrů nastavených na tento sloupec. Funkce KEEPFILTERS() může změnit toto chování, a nastavit logický AND vztah mezi původní vnější filtry a filtry definované uvnitř CALCULATE(). Toto chování si můžeme znázornit na následujícím příkladu.
Měřítka:
Do vizuálu tabulky v Power BI vložíme do řádků barvy z tabulky 'Product' a dvě nově vytvořená měřítka.
Výsledek měřítka [Prodeje (Modrá barva)] je v každém řádků stejný, a představuje sumu prodejů všech produktů s modrou barvou. Na měřítko [Prodeje (Modrá barva)] působí v každém řádku tabulky filtr, který obsahuje jednu konkrétní barvu, podle toho, ve kterém řádku se výpočet odehrává. Tento filtr je v každém řádku vizuálu přepsán filtrem, který je definovaný na stejný sloupec uvnitř funkce CALCULATE(). Nyní si můžeme vytvořit nové měřítko, kde původní filtr vložíme do funkce KEEPFILTERS().
Měřítko:
Pokud filtr definovaný uvnitř funkce CALCULATE() obalíme do funkce KEEPFILTERS(), nedojde k přepsání vnějších filtrů aplikovaných na stejný sloupec, ale k jejich průniku. Takto definované měřítko můžeme pro porovnání vložit do stejného vizuálu.
Nově přidané měřítko [Prodeje (Modrá barva KeepFilters)] vrací stejnou hodnotu jako původní měřítko, ale pouze v řádku s hodnotou "Blue". Pokud se podíváme například na první řádek tabulky na obrázku výše, tak v tomto řádku je aktivní filtr, ve kterém je vyhodnoceno měřítko, nastaven na barvu "Black". Filtr nastavený uvnitř měřítka [Prodeje (Modrá barva KeepFilters)] na barvu "Blue" je pak díky funkci KEEPFILTERS() vyhodnocen v logickém AND vztahu s tímto původním vnějším filtrem. Jelikož neexistují žádné produkty, které by měli současně modrou a černou barvu, výsledek měřítka v prvním řádku vizuálu je BLANK.
Ve druhém řádku tabulky je vnější filtr nastaven na barvu "Blue". Vnitřní filtr v měřítku [Prodeje (Modrá barva KeepFilters)] je nastavený také na hodnotu "Blue". Protože se oba filtry shodují, výsledek měřítka v druhém řádku tabulky jsou prodeje modrých produktů. V dalších řádcích tabulky se vnitřní a vnější filtry vzájemně vylučují, a hodnota měřítka je proto stejně jako v prvním řádku tabulky BLANK.
Do funkce KEEPFILTERS() můžeme vkládat také tabulky nebo funkce vracející tabulky. I v tomto případě platí, že výsledné filtry ve formě tabulek uvnitř funkce KEEPFILTERS() budou vyhodnoceny v logickém AND vztahu s vnějšími filtry.
Komentáře
Okomentovat