DAX funkce CALCULATE s KEEPFILTERS

DAX funkce CALCULATE s KEEPFILTERS

Funkce KEEPFILTERS() může být mimo jiné použita jako funkce 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.

Příklad 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:

Prodeje = SUM(Sales[Sales Amount])
Prodeje BLUE Color =
CALCULATE
(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)

Do vizuálu tabulky v Power BI vložíme do řádků barvy z tabulky 'Product' a dvě nově vytvořená měřítka.

DAX funkce CALCULATE s KEEPFILTERS 2

Výsledek měřítka [Prodeje BLUE Color] je v každém řádků stejný, a představuje sumu prodejů všech produktů s modrou barvou. Na měřítko [Prodeje BLUE Color] 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:

Prodeje BLUE Color KEEPFILTERS =
CALCULATE
(
SUM(Sales[Sales Amount]),
KEEPFILTERS('Product'[Color] = "Blue")
)

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.

DAX funkce CALCULATE s KEEPFILTERS 3

Nově přidané měřítko [Prodeje BLUE Color 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 BLUE Color 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 BLUE Color 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.

č. 24

Komentáře