Извештај со Групи
Извештај со Групи
Во претходниот пример конструиравме извештај со два нивоа базиран на податоците од две табели. Друг извештај кој изгледа исто може да се конструира во FastReport, овој пат базиран на сет на податоци добиен од споена упит.
За да се направи ова, потребен е SQL упит кој враќа податоци од двете табели и сортирани на одреден начин е потребен. Во нашиот пример, табелите ќе бидат споени на полето "acSubject" од купувачи и "acConsignee" поле од табелата за нарачки. Упитот може да биде:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject
Редот "order by" е потребен за да се сортираат записите на полето “acSubject” (купувач).
Како може да се дизајнира многу-нивовен извештај користејќи ги овие податоци? Постоји специјален бенд, “Групен Заглавие”. Услов (вредност на поле во базата на податоци или израз) е специфициран за бендот; бендот се издава секој пат кога вредноста на условот се менува. Следниот пример илустрира ова.
Да создадеме нов проект во Delphi и да поставиме компонентата “TfrxDlDBQuery”. Поставете ги својствата на новата компонента именувана "DlDBQuery1" како што е прикажано тука:
SQL =
'select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject'
UserName = 'Group'
Додајте бенд “Групно заглавие” во извештајот. Поставете услов (во овој случај полето за податоци “Group.acSubject”) во уредникот на бендот “Групно заглавие”:

Исто така поврзете го бендот за податоци со изворот на податоци “Група” и распоредете некои објекти како што е прикажано (забележете дека групното заглавие мора да биде поставено над бендот за податоци):

Бендот “Групно заглавие” се издава само кога полето на кое е поврзано се менува во вредност. Во спротивно, бендот за податоци поврзан со сетот на податоци “Група” се прикажува. Ако го споредиме овој извештај со извештајот за главен-детаљ конструиран порано, е очигледно дека бројките на нарачките воопшто не се сортирани. Ова може лесно да се исправи со промена на клаузулата 'order by' во SQL упитот:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject, tHE_Order.acKey

Извештаи со вложени групи можат да се дизајнираат на сличен начин. Длабочината на вложување на групите е неограничена. Извештаите кои користат групи имаат некои предности во однос на извештаите од типот главен-детаљ:
- целокупниот извештај потребен е само еден сет на податоци (упит)
- бројот на нивоа на групирање на податоците е неограничен
- сортирањето на податоците станува возможно
- повеќе оптимална употреба на ресурсите на базата на податоци (упитот враќа само еден сет на податоци за излез, со филтрирање направено од упитот).
Единствениот недостаток е потребата да се пишуваат упити на SQL јазикот. Сепак, основното познавање на SQL е практично задолжително за секој програмер кој работи со бази на податоци.