Változók használata a DAX-képletek javításához
Adatmodellezőként kihívást jelenthet néhány DAX-számítás írása és hibakeresése. Gyakori, hogy az összetett számítási követelmények gyakran összetett vagy összetett kifejezések írását is magukban foglalják. Az összetett kifejezések számos beágyazott függvény használatát és a kifejezéslogika újrafelhasználását is magukban foglalhatják.
Ha változókat használ a DAX-képletekben, összetettebb és hatékonyabb számításokat írhat. A változók javíthatják a teljesítményt, a megbízhatóságot, az olvashatóságot és csökkenthetik az összetettséget.
Ebben a cikkben az első három előnyt mutatjuk be egy példamérték használatával az évenkénti (YoY) értékesítések növekedéséhez. (A YoY-értékesítések növekedésének képlete az időszaki értékesítések, mínusz az előző év azonos időszakának értékesítéseinek mínusza, osztva az előző év azonos időszakának értékesítésével.)
Kezdjük a következő mértékdefinícióval.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
A mérték a megfelelő eredményt adja, de most nézzük meg, hogyan javítható.
A teljesítmény javítása
Figyelje meg, hogy a képlet megismétli az "előző év azonos időszakát" kiszámító kifejezést. Ez a képlet nem hatékony, mivel a Power BI-nak kétszer kell kiértékelnie ugyanazt a kifejezést. A mértékdefiníció hatékonyabbá tehető egy változó, a VAR használatával.
A következő mértékdefiníció javulást jelent. Kifejezéssel rendeli hozzá az "előző év azonos időszaka" eredményt egy SalesPriorYear nevű változóhoz. A változót ezután kétszer használja a RETURN kifejezés.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
A mérték továbbra is a megfelelő eredményt adja, és ezt a lekérdezési idő körülbelül felében teszi.
Az olvashatóság javítása
Az előző mértékdefinícióban figyelje meg, hogy a változónév kiválasztása egyszerűbbé teszi a RETURN kifejezést. A kifejezés rövid és önleíró.
A hibakeresés egyszerűsítése
A változók segíthetnek a képletek hibakeresésében is. Egy változóhoz rendelt kifejezés teszteléséhez ideiglenesen újraírhatja a RETURN kifejezést a változó kimenetének érdekében.
Az alábbi mértékdefiníció csak a SalesPriorYear változót adja vissza. Figyelje meg, hogyan fűzi hozzá a kívánt RETURN kifejezést. Ez a technika lehetővé teszi, hogy a hibakeresés befejezése után egyszerűen visszaállítsa azt.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Egyszerű használat
A DAX korábbi verzióiban a változók még nem támogatottak. Az új szűrőkörnyezeteket bevezetett összetett kifejezéseknek a külső szűrőkörnyezetekre való hivatkozáshoz az EARLIER vagy a EARLIEST DAX függvényt kellett használniuk. Sajnos az adatmodellezők nehéznek találták ezeket a függvényeket megérteni és használni.
A változók kiértékelése mindig azon szűrőken kívül történik, amelyekre a RETURN kifejezés vonatkozik. Ezért ha módosított szűrőkörnyezetben használ változót, az ugyanazt az eredményt éri el, mint az EARLIEST függvény. Az EARLIER vagy a EARLIEST függvények használata ezért elkerülhető. Ez azt jelenti, hogy mostantól kevésbé összetett és könnyebben érthető képleteket írhat.
Vegye figyelembe az alkategóriatáblához hozzáadott alábbi számított oszlopdefiníciót . Kiértékeli az egyes termék alkategóriák rangsorát a Sales (Értékesítések ) oszlop értékei alapján.
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
Az EARLIER függvény az aktuális sorkörnyezetBen az Alkategória Értékesítés oszlopértékére hivatkozik.
A számított oszlopdefiníció az EARLIER függvény helyett egy változóval javítható. A CurrentSubcategorySales változó a Subcategory Sales oszlop értékét az aktuális sorkörnyezetben tárolja, a RETURN kifejezés pedig egy módosított szűrőkörnyezetben használja.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Kapcsolódó tartalom
- VAR DAX-cikk
- Tanulás elérési út: A DAX használata a Power BI Desktopban
- Kérdése van? Kérdezze meg a Power BI-közösség