Funkce REMOVEFILTERS() se používá pro odstraňování filtrů ve funkci CALCULATE(). Funkce REMOVEFILTERS() má stejné chování jako funkce ALL(), pokud je ALL() použita jako funkce pro úpravu filtrů ve funkci CALCULATE(). V tomto příspěvku najdete příklady použití funkce REMOVEFILTERS() bez argumentu, s argumentem ve formě tabulky a s argumentem ve formě sloupce.
Příklady použití funkce REMOVEFILTERS
Funkce REMOVEFILTERS bez argumentu
Měřítka:
Měřítko [Prodeje] je definované jako suma hodnot ze sloupce 'Sales'[SalesAmount]. Měřítko [Prodeje (REMOVEFILTERS)] počítá také sumu hodnot ze sloupce 'Sales[SalesAmount], ale před vyhodnocením výrazu v prvním argumentu funkce dojde díky funkci REMOVEFILTERS() k odstranění všech filtrů z celého modelu. Rozdíl můžeme vidět na následujícím obrázku, kde jsou použita obě měřítka v jedné tabulce. Tabulka obsahuje kategorie produktů v řádcích a je filtrována pomocí průřezu s roky z kalendářní tabulky.
V prvním řádku výše zobrazené tabulky je kategorie Audio ze sloupce 'ProductCategory'[ProductCategory]. Vyhodnocení měřítka [Prodeje] v prvním řádku probíhá v kontextu filtru roků 2011 a 2012, díky filtru nastavenému v průřezu, a v kontextu filtru kategorie Audio, díky filtru který působí na měřítko z řádku zobrazené tabulky.
Funkce REMOVEFILTERS s argumentem ve formě tabulky
Měřítko:
Nově vytvořené měřítko můžeme vložit do stejného vizuálu a porovnat výsledek s měřítkem [Prodeje].
Měřítko [Prodeje] je vyhodnoceno v každém řádku v kontextu filtru dané kategorie a v kontextu filtrovaných roků 2011 a 2012. Výraz v měřítku [Prodeje (REMVOEFILTERS Calendar)] je pak vyhodnocen v kontextu filtru kategorií, které jsou v řádcích tabulky, ale filtr přicházející z průřezu je díky výrazu REMOVEFILTRES('Calendar') odstraněn. Výraz REMOVEFILTRES('Calendar') odstraní před vyhodnocením výrazu v měřítku všechny filtry z tabulky 'Calendar'. Protože je sloupec s roky v průřezu z této tabulky, dojde před vyhodnocením výrazu v měřítku [Prodeje (REMVOEFILTERS Calendar)] k odstranění tohoto filtru.
Funkce REMOVEFILTERS s argumentem ve formě sloupce
Funkce REMOVEFILTERS() s argumentem ve formě sloupce odstraní před vyhodnocením prvního argumentu funkce CALCULATE() všechny filtry aplikované na sloupec uvedený jako argument této funkce. Pro znázornění si opět můžeme vytvořit nové měřítko.
Měřítko:
V měřítku [Prodeje (REMOVEFILTERS ClassName)] dojde před vyhodnocením výrazu v prvním argumentu k odstranění filtrů ze sloupce 'Product'[ClassName]. Pro znázornění vložíme hodnoty z tohoto sloupce do průřezu, a do řádku v tabulce vložíme hodnoty ze sloupce 'Product'[BrandName], tedy hodnoty z jiného sloupce stejné tabulky, tabulky 'Product'.
Měřítko [Prodeje] je v prvním řádku tabulky vyhodnoceno v kontextu filtru značky Fabrikam ze sloupce 'Product'[BrandName] a v kontextu filtru třídy Deluxe ze sloupce 'Product'[ClassName], tedy filtru vybraného v průřezu.
Funkce REMOVEFILTERS a rozšířené tabulky
Měřítko:
Pokud takto definované měřítko vložíme do vizuálu tabulky, kde jsou v řádcích hodnoty ze sloupce 'Product'[BrandName], výsledek měřítka bude podle očekávání v každém řádku stejný.
Výsledek měřítka [Prodeje (REMOVEFILTERS Product)] je v každém řádku zobrazené tabulky stejný, protože sloupec 'Product'[BrandName], který je v řádcích tabulky a který tvoří kontext filtru při vyhodnocení měřítka, je součástí tabulky 'Product', ze které jsou před vyhodnocením prvního výrazu v měřítku [Prodeje (REMOVEFILTERS Product)] odebrány všechny filtry ze všech sloupců.
Pokud bychom k tabulce přidali průřez s hodnotami ze sloupce 'ProductCategory'[ProductCategory], který je v jiné tabulce, než ze které odstraňujeme filtry pomocí výrazu REMOVEFILTERS('Product'), výsledek může být překvapivý.
Měřítko [Prodeje (REMOVEFILTERS Product)] vrací opět v každém řádku tabulky stejnou hodnotu, která se rovná celkovým prodejů všech produktů bez ohledu na filtr přicházející z řádků tabulky nebo z průřezu. I když v měřítku odstraňujeme filtry z tabulky 'Product', došlo k odstranění filtrů také z tabulky 'ProductCategory'. Z této tabulky jsme použili sloupec 'ProductCategory'[ProductCategory] v průřezu, kde jsou vybrané hodnoty Cell phones a Computers. Tento filtr je však před výpočtem výrazu v měřítku [Prodeje (REMOVEFILTERS Product)] odstraněn, protože odstraněním filtru z tabulky 'Product' dojde k odstranění filtrů z dané tabulky a z její rozšířené verze, do které patří také tabulka 'ProductCategory' a všechny sloupce v této tabulce.
Pro zdůraznění rozdílu mezi odstraněním filtru z celé tabulky a odstraněním filtru ze sloupce si můžeme definovat v modelu následující měřítko.
Měřítko:
V měřítku [Prodeje (REMOVEFILTERS BrandName)] je ve funkci REMOVEFILTERS() uveden konkrétní sloupec, ze kterého chceme odstranit filtr. Takto definované měřítko přidáme pro porovnání do dříve vytvořeného vizuálu.
Nově definované měřítko ignoruje filtry aplikované na sloupec 'Product'[BrandName], který je vložený v řádcích tabulky. Měřítko v každém řádku tabulky vrací sumu za prodeje všech produktů v kategoriích Cell phones a Computers.
Rozdíl mezi měřítkem [Prodeje (REMOVEFILTERS Product)], ve kterém odstraňujeme filtry z tabulky 'Product', a měřítkem [Prodeje (REMOVEFILTERS BrandName)], ve kterém odstraňujeme filtr z konkrétního sloupce, je zřejmý. [Prodeje (REMOVEFILTERS Product)] ignoruje filtry ze všech sloupců tabulky 'Product', ale také z tabulek, které patří do její rozšířené verze. Měřítko [Prodeje (REMOVEFILTERS BrandName)] ignoruje filtry pouze ze sloupce 'Product'[ProductBrand], a všechny ostatní filtry při vyhodnocení prvního výrazu ve funkci CALCULATE() ponechává.
Funkce REMOVEFILTERS() odstraní filtry ze sloupců nebo tabulek použitých jako argumenty této funkce. Pokud funkci REMOVEFILTERS() použijeme bez argumentu, dojde k odstranění filtrů ze všech sloupců v celém modelu. Použití funkce REMOVEFILTERS() je poměrně intuitivní až do chvíle, kdy použijeme tuto funkci s argumentem ve formě tabulky. Pokud použitá tabulka obsahuje ve své rozšířené verzi také další tabulky, funkce REMOVEFILTERS() odstraní i případné filtry z těchto tabulek patřících do rozšířené verze použité tabulky.
Praktické příklady, některé také s použitím funkce REMOVEFILTERS(), můžete najít na stránce DAX - příklady.
Komentáře
Okomentovat