Vyhnutí se použití možnosti FILTER jako argumentu filtru

Jako modelátor dat je běžné psát výrazy DAX, 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.

Funkce CALCULATE a CALCULATETABLE DAX jsou důležité a užitečné funkce. 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é výrazy a výrazy tabulek.

Představte si následující definici míry, která vypočítá prodej červeného produktu pomocí výrazu tabulky. 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í FILTER DAX, která vyhodnocuje výraz filtru pro každý řádek tabulky Product . Dosáhne správného výsledku – prodejního výsledku červených produktů. Lze však dosáhnout mnohem efektivněji pomocí logického výrazu.

Tady je vylepšená definice míry, která místo výrazu tabulky používá logický výraz. Funkce KEEPFILTERS DAX zajišťuje, ž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é. Je to proto, že tabulky modelu importu jsou úložiště sloupců 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 Zisk , aby se vyloučily měsíce, které nedosáhly zisku. Míru v logickém výrazu není možné použít, když se používá 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: