Izvještaj sa grupama
Izvještaj sa grupama
U prethodnom primjeru konstruisali smo izvještaj sa dva nivoa na osnovu podataka iz dvije tabele. Drugi izvještaj koji izgleda isto može se konstruisati u FastReport-u, ovaj put na osnovu skupa podataka dobijenog iz spojene upita.
Da bismo to uradili, potrebna je SQL upit koja vraća podatke iz obje tabele i sortirana na određeni način je potrebna. U našem primjeru, tabele će biti spojene na "acSubject" polju iz kupaca i "acConsignee" polju iz tabele narudžbi. Upit može biti:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject
Linija "order by" je potrebna za sortiranje zapisa po polju “acSubject” (kupac).
Kako se može dizajnirati višeslojni izvještaj koristeći ove podatke? Postoji posebna traka, “Grupni zaglavlje”. Uslov (vrijednost polja baze podataka ili izraz) je definisan za traku; traka se prikazuje svaki put kada se vrijednost uslova promijeni. Sljedeći primjer ilustruje ovo.
Hajde da kreiramo novi projekat u Delphiju i postavimo komponentu “TfrxDlDBQuery”. Postavite svojstva nove komponente nazvane "DlDBQuery1" kao prikazano ovdje:
SQL =
'select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject'
Korisničko ime = 'Grupa'
Dodajte “Grupni zaglavlje” traku u izvještaj. Postavite uslov (u ovom slučaju “Group.acSubject” podatkovno polje) u editoru “Grupnog zaglavlja” trake:

Također povežite podatkovnu traku sa “Grupa” izvorom podataka i rasporedite neke objekte kao što je prikazano (napomena da grupno zaglavlje mora biti postavljeno iznad podatkovne trake):

“Grupni zaglavlje” traka se prikazuje samo kada se polje na koje je povezano promijeni u vrijednosti. Inače se prikazuje podatkovna traka povezana sa “Grupa” skupom podataka. Ako uporedimo ovaj izvještaj sa izvještajem majstor-detalj konstruisanim ranije, očigledno je da brojevi narudžbi nisu uopšte sortirani. Ovo se može lako ispraviti promjenom 'order by' klauzule SQL upita:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject, tHE_Order.acKey

Izvještaji sa ugniježdenim grupama mogu se dizajnirati na sličan način. Dubina ugniježdenja grupa je neograničena. Izvještaji koji koriste grupe imaju neke prednosti u odnosu na izvještaje tipa majstor-detalj:
- cijeli izvještaj treba samo jedan skup podataka (upit)
- broj nivoa grupisanja podataka je neograničen
- sortiranje podataka postaje moguće
- optimalnija upotreba resursa baze podataka (upit vraća samo jedan skup podataka za izlaz, sa filtriranjem koje se vrši putem upita).
Jedini nedostatak je potreba za pisanjem upita na SQL jeziku. Međutim, osnovno poznavanje SQL-a je praktično obavezno za svakog programera koji radi sa bazama podataka.