Nepoužívejte FILTER jako argument filtru
Jako modelátor dat je běžné psát DAX výrazy, které je potřeba vyhodnotit v upraveném kontextu filtru. Můžete například napsat definici míry pro výpočet prodeje pro "produkty s vysokou marží". Tento výpočet si popíšeme dále v tomto článku.
Poznámka
Tento článek je zvlášť relevantní pro výpočty modelu, které používají filtry na import tabulek.
Důležité a užitečné funkce jsou CALCULATE a CALCULATETABLEDAX. Umožňují psát výpočty, které odebírají nebo přidávají filtry, nebo upravují cesty relací. Provádí se předáním argumentů filtru, což jsou logické výrazy, výrazy tabulky nebo speciální funkce filtru. V tomto článku probereme jenom logické a tabulkové výrazy.
Představte si následující definici míry, která vypočítá prodej červených produktů pomocí tabulkového výrazu. Nahradí všechny filtry, které se můžou použít v tabulce Product.
Red Sales =
CALCULATE(
[Sales],
FILTER('Product', 'Product'[Color] = "Red")
)
Funkce CALCULATE přijímá výraz tabulky vrácený funkcí FILTERDAX, která vyhodnotí výraz filtru pro každý řádek tabulky Product. Dosáhne správného výsledku – prodejního výsledku červených produktů. Pomocí logického výrazu by toho však bylo možné dosáhnout mnohem efektivněji.
Tady je vylepšená definice míry, která místo výrazu tabulky používá logický výraz. Funkce KEEPFILTERSDAX zajistí, že se zachovají všechny existující filtry použité ve sloupci Color a nepřepíší se.
Red Sales =
CALCULATE(
[Sales],
KEEPFILTERS('Product'[Color] = "Red")
)
Doporučuje se předávat argumenty filtru jako logické výrazy, kdykoli je to možné. Důvodem je, že tabulky importovaných modelů jsou sloupcová úložiště v paměti. Jsou explicitně optimalizované tak, aby efektivně filtrovaly sloupce tímto způsobem.
Existují však omezení, která platí pro logické výrazy, když se používají jako argumenty filtru. Oni:
- Nelze odkazovat na sloupce z více tabulek.
- Nelze odkazovat na míru
- Nelze použít vnořené funkce CALCULATE
- Nelze použít funkce, které prohledávají nebo vracejí tabulku.
To znamená, že pro složitější požadavky filtru budete muset použít výrazy tabulky.
Zvažte teď jinou definici míry. Požadavek je vypočítat prodej, ale pouze pro měsíce, které dosáhly zisku.
Sales for Profitable Months =
CALCULATE(
[Sales],
FILTER(
VALUES('Date'[Month]),
[Profit] > 0
)
)
V tomto příkladu musí být použita funkce FILTER. Je to proto, že vyžaduje vyhodnocení míry Profit, aby se vyloučily měsíce, které nedosáhly zisku. Není možné použít míru v logickém výrazu, když je využita jako argument filtru.
Doporučení
Pro zajištění co nejlepšího výkonu se doporučuje používat logické výrazy jako argumenty filtru, kdykoli je to možné.
Proto by měla být funkce FILTER použita pouze v případě potřeby. Můžete ho použít k filtrování složitých porovnání sloupců. Tato porovnání sloupců můžou zahrnovat:
- Opatření
- Další sloupce
- Použití funkce ORDAX nebo logického operátoru OR (||)
Související obsah
- funkce filtru (DAX)
- Studijní cesta: Použití DAX v Power BI Desktopu
- Otázky? Zkuste se zeptat komunity Power BI
- Návrhy? Přispívat nápady ke zlepšení Power BI