Jaa


Paranna DAX kaavoja muuttujien avulla

Tietojen mallintajana joidenkin DAX laskutoimitusten kirjoittaminen and virheenkorjausta voi olla haastavaa. On yleistä, että monitasoisiin laskentavaatimuksiin liittyy usein monimutkaisten lausekkeiden or kirjoittamista. Yhdistelmälausekkeisiin voi sisältyä useiden sisäkkäisten funktioiden käyttö, and mahdollisesti lausekelogiikan uudelleenkäyttöä.

DAX kaavojen muuttujien avulla voit kirjoittaa monimutkaisempia and tehokkaita laskutoimituksia. Muuttujat voivat parantaa suorituskykyä, luotettavuutta, luettavuutta and vähentää monimutkaisuutta.

Tässä artikkelissa esitellään first kolme etua käyttämällä yearyear (YoY) -myynninkasvua esimerkkinä measure. (YoY-myynnin kasvun kaava on jakson myynti vähennettynä samalla ajanjaksolla lastyear, jaettuna samalla ajanjaksolla lastyear.)

Aloitetaan seuraavasta measure määrityksestä.

Sales YoY Growth % =
DIVIDE(
    ([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)

measure tuottaa oikean tuloksen, mutta katsotaan now, miten sitä voidaan parantaa.

Suorituskyvyn parantaminen

Huomaa, että kaava toistaa lausekkeen, joka laskee "saman ajanjakson lastyear". Tämä kaava on tehoton, koska se edellyttää, että Power BI evaluate saman lausekkeen kahdesti. measure määritystä voidaan tehostaa käyttämällä muuttujaa VAR.

Seuraava measure määritys merkitsee parannusta. Se käyttää lauseketta, joka määrittää "saman ajanjakson lastyear" tuloksen muuttujaan nimeltä SalesPriorYear. Muuttujaa käytetään sitten kahdesti RETURN-lausekkeessa.

Sales YoY Growth % =
VAR SalesPriorYear =
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
    DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)

measure tuottaa edelleen oikean tuloksen, and tekee sen noin puolessa kyselyn time.

Luettavuuden parantaminen

huomaa previousmeasure-määrityksessä, miten muuttujan nimen valinta tekee RETURN-lausekkeesta helpomman ymmärtää. Lauseke on lyhyt and kuvaava.

Virheenkorjauksen yksinkertaistaminen

Muuttujat voivat myös auttaa kaavan virheenkorjauksessa. Jos haluat testata muuttujalle määritettyä lauseketta, kirjoita RETURN-lauseke tilapäisesti uudelleen tulostamaan muuttuja.

Seuraava measure määritys palauttaa vain SalesPriorYear muuttujan. Huomaa, miten se kommentoi aiottua RETURN-lauseketta. Tämän tekniikan avulla voit helposti palauttaa sen takaisin virheenkorjauksen jälkeen.

Sales YoY Growth % =
VAR SalesPriorYear =
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
    --DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
    SalesPriorYear

Vähentää monimutkaisuutta

DAX earlier -muuttujia not vielä tuettu. Monimutkaiset lausekkeet, jotka ottivat käyttöön uusia filter konteksteja, edellyttivät EARLIERorEARLIESTDAX-funktioiden käyttämistä viittaamaan ulkoisiin filter konteksteihin. Valitettavasti tietojen mallintajat pitivät näitä funktioita vaikeina ymmärtää and käyttöä.

Muuttujia arvioidaan aina RETURN-lausekkeen filters ulkopuolella. Tästä syystä muuttuja tuottaa saman tuloksen muokatussa filter kontekstissa kuin EARLIEST. EARLIER or EARLIEST funktioiden käyttöä voidaan siis välttää. Se tarkoittaa, että voit now kirjoittaa yksinkertaisempia and helpommin ymmärrettäviä kaavoja.

Harkitse seuraavaa lasketun sarakkeen määritelmää, joka on lisätty Subcategory -taulukkoon. Se arvioi kunkin product aliluokan rankSubcategory Sales -sarakkeen values.

Subcategory Sales Rank =
COUNTROWS(
    FILTER(
        Subcategory,
        EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
    )
) + 1

EARLIER-funktiolla viitataan Subcategory Sales -sarakkeeseen, valuenykyisessä rivikontekstissa.

Lasketun sarakkeen määritystä voidaan parantaa käyttämällä muuttujaa EARLIER funktion sijaan. CurrentSubcategorySales -muuttuja tallentaa Subcategory Sales -sarakkeen, valuenykyisessä rivikontekstissa, and RETURN-lauseke käyttää sitä muokatussa filter kontekstissa.

Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
    COUNTROWS(
        FILTER(
            Subcategory,
            CurrentSubcategorySales < Subcategory[Subcategory Sales]
        )
    ) + 1