Агрегатни Функции
Агрегатни Функции
Во повеќето случаи, групните извештаи треба да прикажуваат некои резиме информации (како: “вкупно на групата”, “број на елементи во групата” итн). FastReport обезбедува агрегатни функции за пресметување агрегатни вредности преку некој опсег на податоци.
Агрегатните функции се:
Функција |
Опис |
СУМ |
враќа вкупно на израз |
МИН |
враќа минимална вредност на израз |
МАКС |
враќа максимална вредност на израз |
AVG |
враќа просечна вредност на израз |
БРОЈ |
враќа број на редови (редови) во опсегот на податоци |
Синтаксата на сите агрегатни функции (освен БРОЈ) е слична на онаа на функцијата СУМ:
СУМ(израз, бенд, флагови)
СУМ(израз, бенд)
СУМ(израз)
Параметрите се:
израз – изразот што треба да се пресмета
бенд – името на податочниот бенд во кој се извршува пресметката
флагови – битно поле, со вредности
1 : вклучи невидливи бендови во пресметката
2 : акумулирај агрегатот како тековна сума
(не ресетирај го агрегатот кога тековниот опсег на податоци се ресетира)
3 : (обе од двете претходни опции)
Изразот е единствениот задолжителен параметар, другите два се опционални. Сепак, за да се избегнат грешки, се препорачува параметрите на бендот секогаш да се даваат.
Агрегатната функција “БРОЈ” има следна синтакса:
БРОЈ(бенд, флагови)
БРОЈ(бенд)
каде што параметрите имаат исто значење како погоре.
Постоји општо правило за сите агрегатни функции: агрегатот може да се пресмета само преку податочен бенд и може да се користи само во фудерот на тој бенд, кој може да биде еден од: фудер, фудер на страница, фудер на група, фудер на колона или фудер на извештај (резиме бенд).
Како функционираат агрегатните функции? Ќе погледнеме ова користејќи го нашиот пример со групен извештај. Да додадеме некои нови елементи во извештајот:

Полето Група.“ItemsTotal” во податочниот бенд прикажува тековната вкупна нарачка. Поставете објект “Текст” во фудерот на групата што содржи агрегатот СУМ прикажан погоре. Тоа ќе ја прикаже вкупната сума на сите нарачки направени од дадениот клиент. Користејќи калкулатор, можеме да провериме дека резултатот е точен:

Агрегатните функции работат на следниов начин: пред да се излезе извештај, FastReport скенира содржината на објектот “Текст” за да најде било какви агрегатни функции. Најдените агрегати се поврзани со податочните бендови во нивните параметри (во нашиот пример “СУМ” е поврзан со бендот “MasterData1”). За време на излезот на извештајот (кога се прикажува податочниот бенд) се пресметуваат вредностите на агрегатите поврзани со него. Во нашиот случај, вредностите на полето Група.“ItemsTotal” се акумулираат. Откако ќе се излезе фудерот на групата што го прикажува агрегатот, вредноста на агрегатот се ресетира на нула, а циклусот се повторува за следната група, и така натаму.
Која е целта на опционалниот параметар “Флагови” во агрегатните функции? Извештаите можат да имаат некои, или сите, од податочните бендови скриени. Сепак, можеби ќе треба да пресметаме агрегати преку сите податочни бендови, без разлика дали се видливи или не. Во нашиот пример, поставете “Видливо” својството на податочниот бенд на лажно, така што ќе се спречи неговото прикажување. За да се вклучи овој скриен податочен бенд во пресметките, мораме да го поставиме третиот, опционален параметар во повикот на функцијата на бројот 1, т.е.:
[СУМ(<Група."ItemsTotal">,MasterData1,1)]
Ова произведува извештај што изгледа вака:

Кога вредноста на параметарот “Флагови” е поставена на 2, вредноста на агрегатот не се ресетира веднаш по неговото прикажување: агрегатот станува “тековна” пресметка за секој последователен излез. Да ја измениме повикот на функцијата како што е прикажано тука:
[СУМ(<Група."ItemsTotal">,MasterData1,3)]
Вредноста “3” е битна комбинација на “1” и “2”, што значи дека треба да ги вклучиме невидливите бендови, без да го ресетираме вкупното по секоја група. Како резултат, имаме:

Ако постои услов за видливост во настанот "OnBeforePrint" на бендот, флаговите немаат ефект.