Report mit Gruppen

Navigation:  Bericht im FR-Designer > Sortierung, Ergebnisse >

Report mit Gruppen

Previous pageReturn to chapter overviewNext page

Im vorherigen Beispiel haben wir einen zwei-ebenen Report erstellt, mit Daten aus zwei Tabellen. FastReport erlaubt die Erstellung eines analogen Reports auf Basis nur eines Datensatzes.

 

Hierfür ist es notwendig eine Anfrage mit SQL zu starten. Diese gibt uns die Daten beider Tabellen wieder, sortiert nach bestimmten Bedingungen. In unserem Fall die Übereinstimmungen der Felder CustNo in beiden Tabellen. Die SQL Abfrage kann folgenderweise aussehen:

 

select * from customer, orders

where orders.CustNo = customer.CustNo

orderby customer.CustNo

 

Die Zeile "order by" benötigt man zur Sortierung anhand von CustNo. Die Anfrage zeigt die Daten so an:

 

CustNoCompany…OrderNoSaleDate

1221 Kauai Dive Shoppe102301.07.1988

1221 Kauai Dive Shoppe112324.08.1993

1231Unisco106028.02.1989

1351Sight Diver100312.04.1988

1351Sight Diver105206.01.1989

1351Sight Diver105504.02.1989

 

Wie kann man mithilfe dieser Daten einen Mehrebenen Report erstellen? In FastReport gibt es dafür ein spezielles Band "Gruppenkopf". Beim Band wird eine Bedingung eingegeben (die Bedeutung des DB-Feldes oder ein Ausdruck) bei dessen Änderung das Band ausgeführt wird. Hier ein Beispiel.

 

 

Query1:

DatabaseName = 'DBDEMOS'

SQL =

select * from customer, orders

where orders.CustNo = customer.CustNo

order by customer.CustNo

 

 

Jetzt gehen wir in den Designer und verknüpfen unsere Datenquelle mit dem Report. Fügen wir nun zwei neue Bänder in den Report ein: "Gruppenkopf" und "Daten 1. Ebene". Im Editor des Bandes  "Gruppenkopf" geben wir folgende Bedingung ein: ins Datenfeld Group.CustNo:

 

screenshot - 18.05.2009 , 16_06_50

 

Das Datenband veknüpfen wir mit der Datenquelle Group und ordnen die Objekte auf folgende weise an (beachten Sie das der "Gruppenkopf" über den Datenband sein muss):

 

clip0174

 

Beim Starten erhalten wir folgenden Report:

 

_img126

 

Wie man sieht wird das Band "Gruppenkopf" nur in dem Fall ausgeführt, wenn das Feld, mit dem es verknüpft ist, den Wert ändert. Sonst wird das mit der Gruppe verknüpfte Datenband ausgeführt. Wenn man diesen Report mit dem Report "Master-Detail", den wir weiter oben erstellt haben, vergleicht, so sieht man, dass die Bestellnummern nicht aufsteigend sortiert sind. Dies kann man ändern, indem man die Anfrage in SQL ändert:

 

 

select * from customer, orders

where orders.CustNo = customer.CustNo

orderby customer.CustNo, orders.OrderNo

 

Auf die gleiche Weise kann man Reporte mit verschachtelten Gruppen konstruieren, wobei deren Anzahl nicht beschränkt ist. Auf diese Weise haben Reporte mit Gruppen gewisse Vorteile gegenüber den Reporten "Master-Detail":

 

- man benötigt nur eine Tabelle (Anfrage) für den Report;

- die Anzahl der Ebenen bei den Gruppierungen der Daten ist unbegrenzt;

- zusätzliche Möglichkeiten der Sortierung;

- optimalere Nutzung der Ressourcen der Datenbank (die Anfrage zeigt nur die Daten an, die man benötigt, ohne diese zu filtern).

 

Das einzig Negative ist, dass die Anfragen in SQL sein müssen. Wobei Grundkenntnisse in SQL in der Regel jeder besitzt, der auch mit Datenbanken arbeitet.