SSRS: Gruppierung über mehrere Tabellen
avatar

Das Problem

Ich sollte einen Report erstellen, welcher aus einer Tabelle „Kunde“ die zugehörigen  Unterkünfte und Maßnahmen anzeigt, dabei nach  Unterkünften gruppiert und die Anzahl der Kunden, welche eine bestimmte Maßnahme besuchten, summiert.
Am Ende sollte noch eine Gruppierung nach Maßnahmen erfolgen.

Das Endergebnis sollte so aussehen:

13

Am meisten Kopfzerbrechen bereitete mir die Tatsache, dass eine Tabelle wie mehere Tabellen (nach der Gruppierung) dargestellt werden sollte. Es kam also keine klassische Gruppierung in Frage, denn dann wäre alles in einer Tabelle dargestellt worden.

Durch Recherchen im Internet stieß ich auf einen Artikel von Microsoft, der mein Problem knapp umriss, vieles musste ich mir aber noch selbst erarbeiten.

Da sich diese Aufgabe sicherlich häufig stellt, hielt ich es für sinnvoll darüber einen (hoffentlich) übersichtlich illustrierten Blog-Beitrag zu schreiben.

Die Lösung

Zunächst erstellte ich folgende SQL-Abfrage:

0-1

Damit war schon einmal die Gruppierung nach Unterkünften und Maßnahmen geschafft (das statische Feld „Sortierung“ wird später erläutert).

Für die Tabelle der Summen über selektierte Einrichtungen habe ich folgende SQL-Abfrage geschrieben:

0-2

Anschließend wurden beide Abfragen über ein „UNION“ verknüpft:

0-3

Diese Abfrage wurde dann in ein Dataset kopiert, so hatte ich alle Daten für den Report zusammen und es ging an den Report selbst.

Ich erstellte eine „Tablix„-Tabelle und fügte die Felder aus der Abfrage jeweils in eine eigene Spalte ein:
1
Dann wurde eine neue „Übergeordnete Gruppe“ erstellt,
2
die nach „UnterkunftNamegruppiert wurde und einen Gruppenkopf bekam:
3.pn
Das Ergebnis sah dann so aus:
4
Hier wurde die erste Spalte (welche die Grupperierung beinhaltete) gelöscht:
5
Dann fügte ich den Gruppierungsausdruck in die oberste Zeile ein und führte die 3 obersten Zellen zu einer zusammen:
7
Die überflüssige letzte Spalte wurde gelöscht und die Schrift der erster Zeile auf „fett“ geändert.
Anschließend fügte ich eine Zeile „Außerhalb von Gruppe – Unterhalb“ ein:
10
Das Ergebnis sah dann so aus:
11

Der Rand diese Zeile wurde auf „leer“ gesetzt, sodass nicht erkennbar war, dass es sich letztendlich doch um eine einzige Tabelle handelt.

Nun die Erläuterung der Spalte „Sortierung“ aus der SQL-Abfrage:
Damit die Tabelle „Summe der selektierten Einrichtungen“ immer als letztes angezeigt wurde, sortierte ich einfach nach der Spalte „Sortierung“ und dann nach der Spalte „UnterkunftName„:
12

Am Ende kam dann das gewünschte, oben dargestellte, Ergebnis heraus.

Fazit

Möglicherweise gibt es elegantere Lösungen für das dargestellte Problem, doch diese kam mir als erstes in den Sinn.
Falls jemand eine bessere Lösung findet, würde ich mich über eine Rückmeldung freuen.

Links

[1] http://msdn.microsoft.com/en-us/library/dd220467%28v=sql.105%29.aspx

Schreibe einen Kommentar