Ne használja a FILTER-t szűrő argumentumaként

Adatmodellezőként gyakran olyan DAX-kifejezéseket ír, amelyeket egy módosított szűrőkörnyezetben kell kiértékelni. Megírhat például egy mértékdefiníciót a "magas árrésű termékek" értékesítésének kiszámításához. Ezt a számítást a cikk későbbi részében ismertetjük.

Megjegyzés:

Ez a cikk különösen fontos az importálási táblákra szűrőket alkalmazó modellszámítások esetében.

A CALCULATE és CALCULATETABLE DAX függvények fontos és hasznos függvények. Lehetővé teszik olyan számítások írását, amelyek eltávolítják vagy hozzáadják a szűrőket, vagy módosítják a kapcsolati útvonalakat. Ez a szűrőargumentumok átadásával történik, amelyek logikai kifejezések, táblakifejezések vagy speciális szűrőfüggvények. Ebben a cikkben csak a logikai és a táblakifejezéseket tárgyaljuk.

Vegye figyelembe a következő mértékdefiníciót, amely táblakifejezéssel számítja ki a vörös termékek értékesítését. Lecseréli a Termék táblára esetlegesen alkalmazott szűrőket.

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

A CALCULATE függvény elfogadja a FILTER DAX függvény által visszaadott táblakifejezést, amely kiértékeli annak szűrőkifejezését a Product tábla minden sorához. A megfelelő eredményt éri el – a piros termékek értékesítési eredményét. Ez azonban sokkal hatékonyabban érhető el logikai kifejezéssel.

Íme egy továbbfejlesztett mértékdefiníció, amely a táblakifejezés helyett logikai kifejezést használ. A K Enterprise kiadás PFILTERS DAX függvény gondoskodik arról, hogy a Szín oszlopra alkalmazott meglévő szűrők megmaradjanak, és ne legyenek felülírva.

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

Javasoljuk, hogy a szűrőargumentumokat logikai kifejezésként adja át, amikor csak lehetséges. Ennek az az oka, hogy a modelltáblák importálása memóriabeli oszloptárolók. Kifejezetten úgy vannak optimalizálva, hogy hatékonyan szűrje az oszlopokat.

Vannak azonban olyan korlátozások, amelyek a logikai kifejezésekre vonatkoznak, amikor szűrőargumentumként használják őket. Ezek:

  • Több tábla oszlopaira nem lehet hivatkozni
  • Mértékre nem lehet hivatkozni
  • Beágyazott CALCULATE függvények nem használhatók
  • Táblázatot beolvasó vagy visszaküldött függvények nem használhatók

Ez azt jelenti, hogy táblázatkifejezéseket kell használnia az összetettebb szűrőkövetelményekhez.

Fontolja meg most egy másik mértékdefiníciót. A követelmény az értékesítések kiszámítása, de csak olyan hónapokra, amelyek nyereséget értek el.

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

Ebben a példában a FILTER függvényt kell használni. Ennek az az oka, hogy a profit mértéket kell kiértékelnie, hogy kiküszöbölje azokat a hónapokat, amelyek nem érnek el nyereséget. Nem használható mérték logikai kifejezésben, ha szűrőargumentumként használják.

Javaslatok

A legjobb teljesítmény érdekében ajánlott logikai kifejezéseket használni szűrőargumentumként, amikor csak lehetséges.

Ezért a FILTER függvényt csak akkor szabad használni, ha szükséges. A szűrő összetett oszlop-összehasonlítások végrehajtására használható. Ezek az oszlop-összehasonlítások a következők lehetnek:

  • Mértékek
  • Egyéb oszlopok
  • Az OR DAX függvény vagy az OR logikai operátor (||) használata