Agregatne funkcije
Agregatne funkcije
U većini slučajeva, grupni izveštaji treba da prikazuju neku sažetu informaciju (kao što su: “ukupno grupe”, “broj elemenata grupe” itd). FastReport pruža agregatne funkcije za izračunavanje agregatnih vrednosti preko nekog opsega podataka.
Agregatne funkcije su:
Funkcija |
Opis |
SUM |
vraća ukupno izraza |
MIN |
vraća minimalnu vrednost izraza |
MAX |
vraća maksimalnu vrednost izraza |
AVG |
vraća prosečnu vrednost izraza |
COUNT |
vraća broj redova (linija) u opsegu podataka |
Sintaksa svih agregatnih funkcija (osim COUNT) je slična onoj kod SUM funkcije:
SUM(izraz, bend, zastavice)
SUM(izraz, bend)
SUM(izraz)
Parametri su:
izraz – izraz koji treba izračunati
bend – naziv data benda unutar kojeg se vrši izračunavanje
zastavice – bit polje, sa vrednostima
1 : uključiti nevidljive bendove u izračunavanje
2 : akumulirati agregat kao tekući zbir
(ne resetovati agregat kada se trenutni opseg podataka resetuje)
3 : (obe prethodne opcije)
Izraz je jedini obavezni parametar, ostala dva su opcionalna. Ipak, da bi se izbegle greške, preporučuje se da se parametri benda uvek navedu.
Agregatna funkcija “COUNT” ima sledeću sintaksu:
COUNT(bend, zastavice)
COUNT(bend)
gde parametri imaju isto značenje kao gore.
Postoji opšte pravilo za sve agregatne funkcije: agregat se može izračunati samo preko data benda i može se koristiti samo u podnožju tog benda, koje može biti jedno od: podnožje, podnožje stranice, podnožje grupe, podnožje kolone ili podnožje izveštaja (sažeti bend).
Kako funkcionišu agregatne funkcije? Pogledaćemo to koristeći naš primer grupnog izveštaja. Dodajmo neke nove elemente u izveštaj:

Polje Grupa.“ItemsTotal” u data bendu prikazuje trenutni ukupni iznos narudžbine. Postavite “Text” objekat u podnožje grupe koje sadrži agregat SUM prikazan iznad. Prikazaće ukupno svih narudžbina koje je postavio dati kupac. Koristeći kalkulator, možemo proveriti da li je rezultat tačan:

Agregatne funkcije rade ovako: pre nego što se izveštaj prikaže, FastReport skenira sadržaj “Text” objekta da pronađe sve agregatne funkcije. Pronađeni agregati su povezani sa data bendovima u njihovim parametrima (u našem primeru “SUM” je povezan sa “MasterData1” bendom). Tokom prikazivanja izveštaja (kada se data bend prikazuje) vrednosti agregata povezanih sa njim se izračunavaju. U našem slučaju, vrednosti polja Grupa.“ItemsTotal” se akumuliraju. Kada se podnožje grupe koje prikazuje agregat prikaže, vrednost agregata se resetuje na nulu, a ciklus se ponavlja za sledeću grupu, i tako dalje.
Koja je svrha opcionalnog parametra “Flags” u agregatnim funkcijama? Izveštaji mogu imati neke, ili sve, data bendove skrivene. Međutim, možda ćemo morati da izračunamo agregate preko svih data bendova, bilo da su vidljivi ili ne. U našem primeru, postavite “Visible” svojstvo data benda na false, tako da sprečite njegovo prikazivanje. Da bismo i dalje uključili ovaj skriveni data bend u izračunavanja, moramo postaviti treći, opcionalni parametar u pozivu funkcije na broj 1, tj.:
[SUM(<Group."ItemsTotal">,MasterData1,1)]
Ovo proizvodi izveštaj koji izgleda ovako:

Kada je vrednost parametra “Flags” postavljena na 2, vrednost agregata se ne resetuje odmah nakon što se prikaže: agregat postaje “tekuće” izračunavanje za svako uzastopno prikazivanje. Hajde da modifikujemo poziv funkcije kao što je ovde prikazano:
[SUM(<Group."ItemsTotal">,MasterData1,3)]
Vrednost “3” je bitna kombinacija “1” i “2”, što znači da treba uključiti nevidljive bendove, bez resetovanja ukupnog iznosa nakon svake grupe. Kao rezultat, imamo:

Ukoliko postoji uslov za vidljivost u događaju "OnBeforePrint" benda, zastavice nemaju efekat.