Izveštaj sa grupama
Izveštaj sa grupama
U prethodnom primeru konstruisali smo izveštaj sa dva nivoa na osnovu podataka iz dve tabele. Drugi izveš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 obe tabele i sortira ih na određeni način . U našem primeru, tabele će biti spojene na "acSubject" polju iz tabele kupaca i "acConsignee" polju iz tabele narudžbina. 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 obavezna da bi se sortirali zapisi po polju “acSubject” (kupac).
Kako se može dizajnirati višeslojni izveštaj koristeći ove podatke? Postoji posebna traka, “Grupni zaglavlje”. Uslov (vrednost polja baze podataka ili izraz) je definisan za traku; traka se prikazuje svaki put kada se vrednost uslova promeni. Sledeći primer ilustruje ovo.
Hajde da kreiramo novi projekat u Delphiju i postavimo komponentu “TfrxDlDBQuery”. Postavite svojstva nove komponente nazvane "DlDBQuery1" kao prikazano ovde:
SQL =
'select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject'
Korisničko ime = 'Grupa'
Dodajte traku “Grupni zaglavlje” u izveštaj. Postavite uslov (u ovom slučaju polje podataka “Group.acSubject”) u editoru trake “Grupni zaglavlje”:

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

Traka “Grupni zaglavlje” se prikazuje samo kada se polje na koje je povezano menja u vrednosti. U suprotnom, traka podataka povezana sa “Grupa” skupom podataka se prikazuje. Ako uporedimo ovaj izveštaj sa izveštajem majstor-detalj konstruisanim ranije, očigledno je da brojevi narudžbina nisu uopšte sortirani. Ovo se može lako ispraviti promenom '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

Izveštaji sa ugnježdenim grupama mogu se dizajnirati na sličan način. Dubina ugnježdenja grupa je neograničena. Izveštaji koji koriste grupe imaju neke prednosti u odnosu na izveštaje tipa majstor-detalj:
- ceo izveštaj zahteva 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.