Funcții Agregate
Funcții Agregate
În cele mai multe cazuri, rapoartele de grup trebuie să afișeze unele informații sumare (cum ar fi: “totalul unui grup”, “numărul de elemente din grup” etc). FastReport oferă funcții agregate pentru calcularea valorilor agregate pe o anumită perioadă de date.
Funcțiile agregate sunt:
Funcție |
Descriere |
SUM |
returnează totalul unei expresii |
MIN |
returnează valoarea minimă a unei expresii |
MAX |
returnează valoarea maximă a unei expresii |
AVG |
returnează valoarea medie a unei expresii |
COUNT |
returnează numărul de linii (rânduri) în perioada de date |
Sintaxa tuturor funcțiilor agregate (cu excepția COUNT) este similară cu cea a funcției SUM:
SUM(expresie, bandă, steaguri)
SUM(expresie, bandă)
SUM(expresie)
Parametrii sunt:
expresie – expresia care trebuie calculată
bandă – numele benzii de date în cadrul căreia se efectuează calculul
steaguri – un câmp de biți, cu valori
1 : include benzile invizibile în calcul
2 : acumulează agregatul ca un total curent
(nu resetează agregatul când perioada de date curentă se resetează)
3 : (ambele opțiuni anterioare)
O expresie este singurul parametru obligatoriu, ceilalți doi sunt opționali. Cu toate acestea, pentru a evita greșelile, se recomandă ca parametrii benzii să fie întotdeauna specificați.
Funcția agregată “COUNT” are următoarea sintaxă:
COUNT(bandă, steaguri)
COUNT(bandă)
unde parametrii au aceeași semnificație ca mai sus.
Există o regulă generală pentru toate funcțiile agregate: un agregat poate fi calculat doar pe o bandă de date și poate fi folosit doar în subsolul acelei benzi, care poate fi unul dintre: subsol, subsol de pagină, subsol de grup, subsol de coloană sau subsol de raport (bandă sumară).
Cum funcționează funcțiile agregate? Vom analiza acest lucru folosind exemplul nostru de raport de grup. Să adăugăm câteva elemente noi în raport:

Câmpul Grup.“ItemsTotal” din banda de date afișează totalul comenzii curente. Plasați un obiect “Text” în subsolul grupului care conține agregatul SUM arătat mai sus. Acesta va afișa totalul tuturor comenzilor plasate de clientul respectiv. Folosind un calculator, putem verifica că rezultatul este corect:

Funcțiile agregate funcționează astfel: înainte de a genera un raport, FastReport scanează conținutul obiectului “Text” pentru a găsi orice funcții agregate. Agregatele găsite sunt legate de benzile de date în parametrii lor (în exemplul nostru “SUM” este legat de banda “MasterData1”). În timpul generării raportului (când banda de date este afișată), valorile agregatelor legate de aceasta sunt calculate. În cazul nostru, valorile câmpului Grup.“ItemsTotal” sunt acumulate. Odată ce subsolul grupului care afișează agregatul a fost generat, valoarea agregatului este resetată la zero, iar ciclul se repetă pentru următorul grup, și așa mai departe.
Care este scopul parametrului opțional “Flags” în funcțiile agregate? Rapoartele pot avea unele sau toate benzile de date ascunse. Cu toate acestea, este posibil să fie necesar să calculăm agregate pe toate benzile de date, fie că sunt vizibile sau nu. În exemplul nostru, setați proprietatea “Vizibil” a benzii de date la false, astfel împiedicând afișarea acesteia. Pentru a include totuși această bandă de date ascunsă în calcule, trebuie să setăm al treilea parametru opțional în apelul funcției la cifra 1, adică:
[SUM(<Group."ItemsTotal">,MasterData1,1)]
Aceasta produce un raport care arată astfel:

Când valoarea parametrului “Flags” este setată la 2, valoarea agregatului nu este resetată imediat după ce este afișată: agregatul devine un calcul “curent” pentru fiecare ieșire succesivă. Să modificăm apelul funcției așa cum este arătat aici:
[SUM(<Group."ItemsTotal">,MasterData1,3)]
Valoarea “3” este o combinație de biți a “1” și “2”, ceea ce înseamnă că trebuie să includem benzile invizibile, fără a reseta totalul după fiecare grup. Ca rezultat, avem:
