Raporti me Grupa
Raporti me Grupa
Në shembullin e mëparshëm ne ndërtuam një raport me dy nivele të bazuar në të dhënat nga dy tabela. Një raport tjetër që duket i njëjtë mund të ndërtohet në FastReport, këtë herë i bazuar në një dataset të marrë nga një pyetje të bashkuar.
Për ta bërë këtë, një pyetje SQL që kthen të dhëna nga të dy tabelat dhe e renditur në një mënyrë të veçantë nevojitet. Në shembullin tonë, tabelat do të bashkohen në fushën "acSubject" nga klientët dhe fushën "acConsignee" nga tabela e porosive. Pyetja mund të jetë:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject
Linia "order by" është e nevojshme për të renditur rekordet në fushën “acSubject” (klient).
Si mund të dizajnohet një raport me shumë nivele duke përdorur këto të dhëna? Ka një grup të veçantë, “Grupi i Kryesë”. Një kusht (vlera e fushës së bazës së të dhënave ose një shprehje) është e specifikuar për grupin; grupi del çdo herë që vlera e kushtit ndryshon. Shembulli në vazhdim ilustron këtë.
Le të krijojmë një projekt të ri në Delphi dhe të vendosim komponentin “TfrxDlDBQuery”. Vendosni pronat e komponentit të ri të quajtur "DlDBQuery1" si tregohet këtu:
SQL =
'select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject'
UserName = 'Grupi'
Shtoni një grup “Grupi i Kryesë” në raport. Vendosni një kusht (në këtë rast fushën e të dhënave “Group.acSubject”) në redaktuesin e grupit “Grupi i Kryesë”:

Po ashtu lidhni grupin e të dhënave me burimin e të dhënave “Grupi” dhe rregulloni disa objekte siç tregohet (vini re se grupi i kryesë duhet të vendoset mbi grupin e të dhënave):

Grupi “Grupi i Kryesë” del vetëm kur fusha me të cilën është lidhur ndryshon në vlerë. Përndryshe, grupi i të dhënave i lidhur me datasetin “Grupi” shfaqet. Nëse e krahasojmë këtë raport me raportin master-detail të ndërtuar më parë, është e qartë se numrat e porosive nuk janë renditur fare. Kjo mund të korrigjohet lehtësisht duke ndryshuar klauzolën 'order by' të pyetjes SQL:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject, tHE_Order.acKey

Raportet që kanë grupe të ngulitura mund të dizajnohen në një mënyrë të ngjashme. Thellësia e nguljes së grupeve është e pakufizuar. Raportet që përdorin grupe kanë disa avantazhe mbi raportet e tipit master-detail:
- i gjithë raporti ka nevojë vetëm për një dataset (pyetje)
- numri i niveleve të grupimit të të dhënave është i pakufizuar
- renditja e të dhënave bëhet e mundur
- përdorim më optimal i burimeve të bazës së të dhënave (pyetja kthen vetëm një dataset për daljen, me filtrimin të bërë nga pyetja).
Disavantazhi i vetëm është nevoja për të shkruar pyetje në gjuhën SQL. Megjithatë, një njohuri bazike e SQL është praktikisht e detyrueshme për çdo programues që punon me baza të dhënash.