Funkcije iteratori

Pored uobičajenih funkcija za agregaciju podataka DAX poseduje posebnu klasu funkcija koje menjaju kontekst izvršavanja računskih operacija, a još ih zovemo i „iteratori“. Ponekad ih zovemo i „X“ funkcijama, jer iza naziva operacije kojom se vrši agregacija podataka (SUM, AVERAGE, COUNT) stoji slovo X koje ukazuje da se radi o iteratorima (SUMX, AVERAGEX, COUNTX). U tekstu koji sledi pokazaćemo u čemu je njihova specifičnost.

Najpre, da kažemo nešto o kontekstu izračunavanja. DAX poznaje dva konteksta izračunavanja i prikaza izveštajnih dimenzija: kontekst filtera i kontekst redova. Prvi kontekst podrazumeva da se agregacija obavlja nad svim podacima, a da dodavanjem izveštajnih dimenzija vršimo njeno filtriranje. Npr. kao kada bi smo u polje vrednosti (Values) dodali izveštajnu dimenziju KOL i dobili SUM of KOL, a zatim dodali dimenziju Klasifikacija u polje redova (Rows) i time dali novi kontekst prikazanoj sumi, kontekst filtera. Kontekst redova podrazumeva da se izračunavanje vrši red po red, kao kada bi smo npr. dodali neku izračunatu kolonu koja predstavlja zbir dve druge kolone.

Funkcije iteratori automatski menjaju kontekst izračunavanja iz konteksta filtera u kontekst reda. Pošto se izračunavanje obavlja red po red one imaju neke dodatne mogućnosti u odnosu na klasične funkcije agregacije. Pođimo od funkcije SUMX i pogledajmo njenu sintaksu:

SUMX(<naziv tabele>,<izraz>)

Prvi argument ove funkcije je naziv tabele, a drugi je izraz. Izraz može biti naziv neke kolone i u tom slučaju rezultat se ne razlikuje od onog koji bi smo dobili pomoću funkcije agregacije, samo što bi se kalkulacija obavljala red po red. Odnosno, sledeće DAX formule:

SumaKolicina1:=SUM([KOL])

SumaKolicina2:=SUMX(Transakcije,[KOL])

bi dale isti rezultat. Prednost funkcija agregacije je što mogu da nam omoguće da na mestu izraza imamo „iterator“, odnosno da u ga svakom koraku računanja funkcija obrađuje. Na taj način, ako bi smo hteli da uvećamo količinu za 10%, mogli bi smo da napišemo sledeći izraz.

SumaKolicina3:=SUMX(Transankcije,[KOL]*1.1)

00125-1

Na sličan način kao prilikom sabiranja, za uprosečavanje podataka možemo da iskoristimo funkciju AVERAGEX, a za zbrajanje funkciju COUNTX. Primer upotrebe ovih funkcija možete da vidite u formulama:

ProsekKolicina:=AVERAGEX(Transakcije,[KOL])

BrojTransakcija:=COUNTX(Transakcije,[KOL])