Reporting Services: Gruppen und Summen

Im Artikel “Reporting Services: Tabellarische Berichte” haben wir uns am Beispiel einer Kundenliste bereits angesehen, wie Sie einfache Tabellen erstellen und einfache Features wie sich wiederholende Spaltenüberschriften nutzen. In diesem Artikel wollen wir Kunden, Bestellungen und Bestellpositionen zum Thema machen und dazu wiederum eine Tabelle verwenden. Wegen der verschiedenen Ebenen soll diese allerdings Gruppierungen enthalten, die uns unter anderem Informationen über die Umsätze je Position, Bestellung und Kunde liefern.

Vorbereitungen

Als Vorbereitung benötigen Sie die Beispieldatenbank AdventureWorks. Deren Download und Installation beschreiben wir im Artikel AdventureWorks: Schnelle Beispieldatenbank (www.datenbankentwickler.net/254).

Ziel

Wir möchten einen Bericht erstellen, der die Bestellpositionen nach Bestellung und Kunde gruppiert und die Gruppensummen anzeigt. Die Detaildatensätze sollen also jeweils eine Bestellposition enthalten. Die Bestellpositionen einer Bestellung sollen einen Gruppenkopf enthalten, der das Bestelldatum enthält und einen Gruppenfuß mit der Bestellsumme. Außerdem wollen wir noch eine weitere Gruppierung hinzufügen, welche die Bestellungen nach Kunde gruppiert. Diese soll im Gruppenkopf einige wesentliche Kundendaten anzeigen wie die Kundennummer, Vor- und Nachname und die Firma. Im Gruppenfuß dieser Gruppe soll die Summe der Bestellpositionen erscheinen, also der gesamte Umsatz mit diesem Kunden.

Umsatz je Kunde anzeigen

Wir nähern uns dem Schritt für Schritt. Zunächst möchten wir die Umsatzsummen je Kunde in jeweils einer Zeile des Berichts anzeigen. Jede Zeile der Tabelle soll also einen Kunden und die Umsätze dieses Kunden liefern.

Gruppierungen per Assistent

Im ersten Anlauf wollen wir die gruppierte Tabelle per Assistent erstellen. Dazu rufen wir im SQL Server Report Builder mit dem Ribbonbefehl Datei|Neu den Dialog Neuer Bericht oder neues Dataset auf. Hier wählen wir den Eintrag Tabellen- oder Matrix-Assistent (siehe Bild 1).

Starten des Assistenten

Bild 1: Starten des Assistenten

Datenquelle festlegen

Im nun folgenden Dialog Neue Tabelle oder Matrix aktivieren wir die Option Dataset erstellen und klicken auf Weiter. Damit gelangen wir zum Schritt Verbindung mit einer Datenquelle auswählen. Hier klicken Sie auf die Schaltfläche Neu. Im Dialog Datenquelleneigenschaften definieren Sie die Datenquelle, die beispielsweise wie in Bild 2 aussieht.

Datenquelle definieren

Bild 2: Datenquelle definieren

Dataset definieren

Zurück im Assistenten sehen Sie den Schritt Abfrage entwerfen. Hier wählen Sie im linken Bereich die kompletten Tabellen oder auch nur einzelne Felder aus, die im Bericht verwendet werden sollen.

Aus Gründen der Übersicht sollten Sie nur die Felder wählen, die Sie später auch nutzen. In diesem Fall nutzen wir Felder der Tabellen Customer, Product, ProductCategory, SalesOrderDetail und SalesOrderHeader. Mit einem Klick auf die Schaltfläche Abfrage ausführen können Sie sich die zu erwartenden Daten direkt als Abfrageergebnis anschauen (siehe Bild 3).

Dataset definieren

Bild 3: Dataset definieren

Wie Sie Datenquelle und Dataset ohne Assistent anlegen, beschreiben wir im Detail Artikel SQL Server Report Builder (www.datenbankentwickler.net/258).

Gruppierungen definieren

Nachdem wir festgelegt haben, welche Daten wir im Bericht sehen wollen, folgt im nächsten Schritt die Anordnung der Felder. Hier wird es interessant, denn hier finden wir vier Listen vor:

  • Verfügbare Felder: Alle Felder, die wir im vorherigen Schritt selektiert haben.
  • Spaltengruppen:
  • Zeilengruppen:
  • Werte:

Im ersten Beispiel wollen wir nur die Umsätze nach Kunden ausgeben. Dazu reicht es aus, wenn wir einfach die anzuzeigenden Felder in den Bereich Werte ziehen. Wir wählen hier die Kundennummer (CustomerID), die Firmenbezeichnung (CustomerName) und den Umsatz je Bestellposition, also das Feld LineTotal der Tabelle SalesOrderDetail (siehe Bild 4). Für Felder mit numerischen Datentypen stellt der Assistent automatisch die Sum-Funktion als Aggregatfunktion ein. Für das Feld CustomerID wollen wir das jedoch aus nachvollziehbaren Gründen nicht.

Felder für die Tabelle auswählen

Bild 4: Felder für die Tabelle auswählen

Um dies zu ändern, klicken Sie einfach auf die Schaltfläche mit dem nach unten zeigenden Dreieck. Es erscheint eine Liste aller Aggregatfunktionen. Vielleicht suchen Sie wie in Access-Abfragen nach einem Eintrag wie Ausdruck. Diesen gibt es nicht: Damit einfach nur der Wert des Feldes angezeigt wird, klicken Sie einfach auf die Zeile, die mit dem Haken markiert ist. Dann ist keine Aggregatfunktion mehr für dieses Feld festgelegt (siehe Bild 5). Wenn Sie das Textfeld CompanyName hinzufügen, wird automatisch keine Aggregatfunktion selektiert. Erst für das Feld LineTotal legt der Assistent wieder die Aggregatfunktion Sum fest, die in diesem Fall ja auch erwünscht ist.

Einstellen der Aggregatfunktion

Bild 5: Einstellen der Aggregatfunktion

Die folgenden beiden Schritte des Assistenten bieten aufgrund der aktuellen Einstellungen keine weiteren Auswahlmöglichkeiten, sodass wir die Erstellung abschließen können. Das Ergebnis der Arbeit mit dem Assistenten sieht wie in Bild 6 aus. Die Spaltenbreiten haben wir nachträglich vergrößert.

Resultierender Entwurf des Assistenten

Bild 6: Resultierender Entwurf des Assistenten

Wenn wir den Bericht nun ausführen und in die Seitenlayout-Ansicht wechseln, erhalten wir den Bericht mit dem Ausschnitt aus Bild 7. Die angezeigten Daten entsprechen unseren Wünschen, allein am Layout könnte man noch arbeiten. Beispielsweise sollen die Spaltenüberschriften deutsche Texte erhalten und der Umsatz soll in der Währung EUR angezeigt werden.

Seitenlayout-Ansicht des Berichts

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar