Zdieľať cez


Nepoužívajte funkciu FILTER ako argument filtra

Ako modelár údajov budete bežne písať výrazy jazyka DAX, ktoré je potrebné vyhodnotiť v upravenom kontexte filtra. Môžete napríklad napísať definíciu mierky na výpočet predaja pre "produkty s vysokou maržou". Tento výpočet popíšeme ďalej v tomto článku.

Poznámka

Tento článok je relevantný najmä pre výpočty modelu, ktoré používajú filtre na tabuľky importu.

Funkcie DAX CALCULATE a CALCULATETABLE sú dôležité a užitočné funkcie. Umožňujú vám napísať výpočty, ktoré odstraňujú alebo pridávajú filtre alebo upravujú cesty vzťahov. Vykonáva sa to zadaním argumentov filtra, ktoré sú booleovskými výrazmi, výrazmi tabuľky alebo špeciálnymi funkciami filtra. V tomto článku sa budeme venovať len booleovským výrazom a výrazom tabuľky.

Pozrime sa na nasledujúcu definíciu mierky, ktorá vypočíta predaj červených produktov pomocou výrazu tabuľky. Nahradí všetky filtre, ktoré môžu byť použité v tabuľke Produkt .

Red Sales =
CALCULATE(
    [Sales],
    FILTER('Product', 'Product'[Color] = "Red")
)

Funkcia CALCULATE akceptuje výraz tabuľky vrátený funkciou JAZYKA DAX FILTER , ktorá vyhodnotí svoj výraz filtra pre každý riadok tabuľky Product (Produkt ). Dosiahne správny výsledok – výsledok predaja pre červené produkty. Možno to však dosiahnuť oveľa efektívnejšie pomocou booleovského výrazu.

Tu je vylepšená definícia mierky, ktorá namiesto výrazu tabuľky používa booleovský výraz. Funkcia KEEPFILTERS jazyka DAX zabezpečí, že všetky existujúce filtre použité v stĺpci Color (Farba) z zachovajú a neprepíšu sa.

Red Sales =
CALCULATE(
    [Sales],
    KEEPFILTERS('Product'[Color] = "Red")
)

Argumenty filtra sa odporúča odovzdávať ako booleovské výrazy vždy, keď je to možné. Dôvodom je, že tabuľky modelu importu sú obchody stĺpcov v pamäti. Sú explicitne optimalizované na efektívne filtrovanie stĺpcov týmto spôsobom.

Na booleovské výrazy sa však vzťahujú obmedzenia, keď sa používajú ako argumenty filtra. Sú to tieto:

  • Nemôžu odkazovať na stĺpce z viacerých tabuliek
  • Nemôžu odkazovať na mierku
  • nemôžu používať vnorené funkcie CALCULATE,
  • Nemôžu používať funkcie, ktoré prehľadávaujú alebo vracajú tabuľku.

To znamená, že na zložitejšie požiadavky filtra budete musieť použiť výrazy tabuľky.

Teraz sa pozrime na inú definíciu mierky. Požiadavkou je vypočítať predaj, ale iba za mesiace, ktoré dosiahli zisk.

Sales for Profitable Months =
CALCULATE(
    [Sales],
    FILTER(
        VALUES('Date'[Month]),
        [Profit] > 0)
    )
)

V tomto príklade je nutné použiť funkciu FILTER. Dôvodom je, že je potrebné vyhodnotiť mierku Profit (Zisk ) na elimináciu mesiacov, ktoré nedosiahli zisk. V booleovskom výraze nie je možné použiť mierku, ak sa používa ako argument filtra.

Odporúčania

Na dosiahnutie najlepšieho výkonu sa odporúča použiť booleovské výrazy ako argumenty filtra vždy, keď je to možné.

Funkcia FILTER by sa preto mala použiť len v prípade potreby. Môžete ju použiť na vykonávanie zložitých porovnaní stĺpcov s filtrom. Tieto porovnania stĺpcov môžu zahŕňať: