Home > Artikel > Ausgabe 3/2012 > Gruppierungen in Berichten

Gruppierungen in Berichten

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Berichte bieten zwei Möglichkeiten, Daten hierarchisch zu strukturieren: per Unterbericht oder durch sogenannte Gruppierungen. Letztere ermöglicht es beispielsweise, alle Bestellungen eines Kunden anzuzeigen und zu jeder Bestellung auch noch die Bestelldetails mit den Artikeln anzuzeigen oder alle Artikelkategorien mit den dazugehörigen Artikel zu präsentieren. Gruppierungen erlauben dabei eine ganze Reihe von Einstellungen, die dieser Artikel vorstellt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1203_GruppierungenInBerichten.mdb.

Datenherkunft für Gruppierungen

Voraussetzung für die gruppierte Ansicht von Daten in einem Access-Bericht ist eine entsprechend vorbereitete Datenherkunft. Dabei kann es sich um eine Tabelle oder auch um eine Abfrage handeln – je nachdem, ob die Tabelle bereits alle für eine anschauliche Gruppierung nötigen Daten enthält. Wenn Sie beispielsweise alle Artikel der Tabelle tblArtikel der Beispieldatenbank nach Lieferanten gruppiert anzeigen möchten, sollte die Tabelle auch alle anzuzeigenden Daten liefern. Im Falle der Artikel aus Bild 1 funktioniert das: Die Tabelle selbst enthält zwar nur ein Fremdschlüsselfeld zum Festlegen eines Datensatzes der verknüpften Tabelle tblLieferanten, aber Access erkennt in Berichten automatisch auch die im Nachschlagefeld angezeigten Daten. Und dabei wird noch nicht einmal ein Kombinationsfeld angezeigt (das in einem Bericht ja ohnehin nicht funktioniert), sondern ein Textfeld.

Diese Daten reichen, um Artikel nach Lieferant gruppiert darzustellen.

Bild 1: Diese Daten reichen, um Artikel nach Lieferant gruppiert darzustellen.

Wenn die Daten für den Aufbau der Gruppierung im Bericht hingegen aus mehreren Tabellen stammen, müssen Sie eine geeignete Abfrage erstellen. Im zweiten Beispiel weiter unten werden wir in einem Bericht alle Kunden samt Bestellungen und Bestellpositionen anzeigen. Dazu benötigen wir dann bereits eine Abfrage, die auf den Tabellen tblKunden, tblBestellungen und tblBestelldetails basiert (eigentlich wäre auch noch tblArtikel gefragt, aber den Artikelnamen beziehen wir aus dem entsprechenden Nachschlagefeld der Tabelle tblBestelldetails).

Aufbau einer Gruppierung

Eine Gruppierung in einem Access-Bericht ist immer dann sinnvoll, wenn Sie Daten aus hierarchisch aufgebauten Tabellen strukturiert anzeigen möchten. Ein einfacher Fall ist das oben beschriebene Beispiel der Lieferanten und Artikel. Der Bericht soll jeweils in einem Kopfbereich alle Lieferanten anzeigen und unterhalb des Kopfbereichs, auch Gruppenkopf genannt, alle Artikel liefern, die der jeweilige Lieferant anbietet.

Um einen solchen Bericht aufzubauen, fügen Sie einem neuen, leeren Bericht in der Entwurfsansicht zunächst die Tabelle tblArtikel als Wert für die Eigenschaft Datenherkunft hinzu.

Der Bericht zeigt nicht automatisch einen entsprechenden Gruppenkopf an, da er ja noch gar nicht weiß, dass er gruppierte Daten anzeigen soll. Dies teilen wir ihm aber gleich mit, und zwar im Bereich Gruppieren, Sortieren und Summe unterhalb des Berichts (Access 2007 und jünger) beziehungsweise im Dialog Sortieren und gruppieren (Access 2003 und älter). Diesen Bereich öffnen Sie in allen aktuelleren Access-Versionen über den Kontextmenü-Eintrag Sortieren und gruppieren eines der Köpfe der Berichtsbereiche (siehe Bild 2).

Mit diesem Kontextmenüeintrag öffnen Sie den Dialog Sortieren und gruppieren.

Bild 2: Mit diesem Kontextmenüeintrag öffnen Sie den Dialog Sortieren und gruppieren.

Gruppieren unter Access 2003 und älter

Unter Access 2003 und älter finden Sie den kleinen, übersichtlichen Dialog aus Bild 3 vor, wenn Sie eine Gruppierung anlegen möchten. Dieser Dialog zeigt im oberen Teil eine Liste aller vorhandenen Sortierungen und Gruppierungen an und im unteren Bereich die Eigenschaft des jeweils oben markierten Eintrags.

Der Dialog zum Anlegen und Anpassen von Gruppierungen unter Access 2003 und älter

Bild 3: Der Dialog zum Anlegen und Anpassen von Gruppierungen unter Access 2003 und älter

Wenn Sie wissen, nach welchem Feld Sie die Gruppierung aufbauen möchten, wählen Sie dieses Feld in der Spalte Feld/Ausdruck aus. Eine Gruppierung ist immer auch eine Sortierung, also legen Sie in der rechten Spalte fest, ob die Sortierung aufsteigend oder absteigend erfolgen soll.

Bislang haben Sie nur eine Sortierung angelegt, denn es fehlt das entscheidende Element der Gruppierung: der Gruppenkopf und/oder der Gruppenfuß. Damit den beiden Eigenschaften Gruppenkopf und Gruppenfuß legen Sie fest, welche zusätzlichen Bereiche je Gruppe angezeigt werden sollen. Wenn Sie dies nicht tun, werden die Datensätze lediglich nach dem angegebenen Feld sortiert.

Stellen Sie hingegen den Wert Gruppenkopf oder Gruppenkopf auf Ja ein, wird im gleichen Moment ein entsprechender Bereich im Berichtsentwurf eingeblendet.

Diesen sollten Sie tunlichst nutzen, um dort Daten bezüglich des Gruppierungsfeldes anzugeben – beispielsweise also das Feld LieferantID. Bild 4 zeigt den Entwurf eines Bericht mit einer Gruppierung nach dem Lieferanten. Das bedeutet, dass für jeden Lieferanten ein neuer Gruppenkopf angezeigt wird, der den Namen des Lieferanten enthält. Nach dem Gruppenkopf folgen die Artikel, deren Lieferant dem im Gruppenkopf angezeigten Lieferant entsprechen – hier mit Artikelname und Einzelpreis. Lieferanten, die für keinen Artikel als Lieferant angegeben wurden, erscheinen in keinem Gruppenkopf.

Entwurf eines Berichts mit einem einfachen Gruppenkopfbereich

Bild 4: Entwurf eines Berichts mit einem einfachen Gruppenkopfbereich

Schauen Sie sich in Bild 5 an, wie der Bericht in der Seitenansicht aussieht. Wenn Sie nun noch dafür sorgen möchten, dass die Artikel einer jeden Gruppierung in alphabetischer Reihenfolge erscheinen, fügen Sie im Dialog Sortieren und gruppieren in einer weiteren Zeile das Feld Artikelname hinzu – ohne einen Gruppenkopf oder -fuß zu definieren (siehe Bild 6). Beachten Sie die Reihenfolge: Wenn Sie die Sortierung oberhalb der Gruppierung anlegen (die Reihenfolge können Sie per Drag and Drop einstellen), erhalten Sie in der Seitenansicht das Ergebnis aus Bild 7. Dort werden tatsächlich zunächst zunächst die Artikel nach dem Alphabet sortiert (und gruppiert – wenn auch ohne Gruppenkopf) und erst dann die Gruppenköpfe für die Gruppierung nach dem Feld LieferantID hinzugefügt. Das macht natürlich keinen Sinn – den Lieferant könnten Sie dann auch gleich im Detailbereich einfügen.

Diese Gruppierung mit Kopfbereich ist sinnlos.

Bild 5: Diese Gruppierung mit Kopfbereich ist sinnlos.

Festlegen einer Sortierung innerhalb der Elemente einer Gruppierung

Bild 6: Festlegen einer Sortierung innerhalb der Elemente einer Gruppierung

Einfacher Kopfbereich mit Lieferanten in der Seitenansicht

Bild 7: Einfacher Kopfbereich mit Lieferanten in der Seitenansicht

Gruppierungseigenschaften

Der Dialog Sortieren und gruppieren bietet neben Gruppenkopf und Gruppenfuß noch weitere Eigenschaften. Die Eigenschaft Gruppieren nach beispielsweise erlaubt als Einstellung Jedem Wert oder Intervall. Wenn Sie einfach nach diskreten Datensätzen wie im vorherigen Beispiel nach Lieferanten gruppieren, verwenden Sie die Einstellung Jedem Wert. Wenn Sie hingegen ganze Bereiche von Werten in einer Gruppierung zusammenfassen möchten, gelingt dies mit der Einstellung Intervall. In diesem Fall legen Sie mit der Eigenschaft Intervall das eigentliche Intervall fest.

Nach Anfangsbuchstabe gruppieren

Wenn Sie etwa die Tabelle tblKunden als Datenherkunft verwenden, können Sie die Kunden nach dem Anfangsbuchstaben gruppieren lassen. Dazu ziehen Sie das Feld Firma in den Dialog Sortieren und gruppieren, legen einen Gruppenkopf an und stellen die Eigenschaft Gruppieren nach auf den Wert Anfangszeichen ein (wird nur bei Textfeldern angeboten). Damit die Kunden innerhalb der Gruppierung auch noch alphabetisch sortiert angezeigt werden, fügen Sie das Feld Firma ein weiteres Mal zum Dialog Sortieren und Gruppieren hinzu – diesmal als reines Sortierkriterium. Im Gruppenkopf legen Sie ein neues Textfeld namens txtAnfangsbuchstabe an und stellen für seine Eigenschaft Steuerelementinhalt den Wert =Links("Firma";1) ein, was den jeweiligen Anfangsbuchstaben der Gruppe ausgibt (siehe Bild 8). Das Ergebnis zeigt Bild 9.

Einstellungen für die Ausgabe von Kundennamen nach dem Anfangsbuchstaben

Bild 8: Einstellungen für die Ausgabe von Kundennamen nach dem Anfangsbuchstaben

Ausgabe der Kundennamen nach dem Anfangsbuchstaben

Bild 9: Ausgabe der Kundennamen nach dem Anfangsbuchstaben

Alternative Intervalle einstellen

Wenn Sie im vorherigen Beispiel ein anderes Intervall als 1 einstellen, fasst die Gruppierung nicht etwa jeweils zwei Gruppen von Kundennamen zusammen (also etwa A-B, C-D und so weiter), sondern wählt die ersten beiden Anfangsbuchstaben als Kriterium für die Zusammenstellung der Gruppen zusammen! Auch das kann hilfreich sein, beispielsweise wenn Sie sehr viele Namen in einem Bericht anzeigen möchten. Sie sollten dann allerdings auch den Gruppenkopf so anpassen, dass dieser die ersten beiden Buchstaben anzeigt – die Eigenschaft Steuerelementinhalt des Steuerelements txtAnfangsbuchstabe würden Sie dann also mit dem folgenden Ausdruck füllen:

=Links("Firma";1)

Intervallgruppen

Wenn Sie tatsächlich mehrere Gruppen zu einer zusammenfassen möchten, also beispielsweise jeweils zwei Anfangsbuchstaben, dann gelingt dies nur mit einem Zahlenwert als Gruppierungskriterium. Das ist aber kein Problem: Schließlich lassen sich Buchstaben mit der Asc-Funktion in die entsprechenden ASCII-Werte umwandeln (Asc("A") liefert beispielsweise 65).

Stellen Sie also das Gruppierungskriterium auf den folgenden Ausdruck ein:

=Asc(Links([Firma];1))-1

Damit wird der Zahlenwert des ersten Buchstaben ermittelt. Das Subtrahieren von 1 am Ende der Zeile gleicht einen scheinbaren Bug von Access aus, durch den die Gruppierung je nach dem Gruppierungskriterium immer etwas beschnitten wird.

Außerdem erhält die Eigenschaft Steuerelementinhalt des Textfeldes im Gruppenkopf diesen Ausdruck:

=Links([Firma];1) & "-" & Zchn(Asc(Links([Firma];1))+1)

Das sieht recht kompliziert aus, ist es aber nicht. Der linke Teil liefert den ersten Buchstaben der Gruppe (zum Beispiel A), der rechte den zweiten (also etwa B). Der rechte Ausdruck ermittelt von innen nach außen zunächst den ersten Buchstaben der aktuellen Firma. Die Asc-Funktion ermittelt den ASCII-Code (bei A etwa 65). Zu diesem Wert wird 1 addiert, was 66 ergibt. Mit der Chr-Funktion erhalten wir den dieser Zahl entsprechenden Buchstaben, also B. Richtig rund läuft dies nur, wenn es zu jedem Buchstaben eine Firma gibt (siehe Bild 10).

Kundennamen in Gruppen von zwei Anfangsbuchstaben

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!