Arno Cebulla

In Reporting Services ab Version 2008 R2 lassen sich in einer Tabelle kommaseparierte Gruppenzusammenfassungen erzeugen. Das Ergebnis soll nachher so aussehen:

 

 

 

 

In dieser Inventar-Liste wird der Inhalt der Gruppe „Ort“ in der Spalte „Orte“ als kommaseparierte Zusammenfassung angezeigt.

Zunächst wird ein DataSet „Inventar“ mit folgendem einfachen Query erstellt:

SELECT     ‚Möbel‘ AS Kategorie, ‚Stuhl‘ AS Bezeichnung, ‚Küche‘ AS Ort, 2 AS Menge UNION  SELECT     ‚Möbel‘, ‚Stuhl‘, ‚Esszimmer‘, 8 UNION  SELECT     ‚Möbel‘, ‚Stuhl‘, ‚Wohzimmer‘, 2 UNION  SELECT     ‚Möbel‘, ‚Tisch‘, ‚Küche‘, 1 UNION SELECT     ‚Möbel‘ , ‚Tisch‘, ‚Esszimmer‘, 1 UNION SELECT     ‚Elektrogeräte‘, ‚Kühlschrank‘, ‚Küche‘, 1 UNION SELECT     ‚Elektrogeräte‘, ‚Kühlschrank‘, ‚Keller‘, 1 UNION  SELECT     ‚Elektrogeräte‘, ‚Kühlschrank‘, ‚Garage‘, 1 

Als erster Schritt wird das Matrix-Element auf den Report gezogen. Die Felder Ort und Menge werden eingefügt:

Als nächstes wird nun die Gruppe „Orte“ eingefügt. Hierfür wird auf der vorhandenen Gruppe „Ort“ eine übergeordnete Gruppe eingefügt:

Gruppiert wird diese Gruppe mit folgendem Ausdruck:

=JOIN(LookupSet(Fields!Kategorie.Value & Fields!Bezeichnung.Value,Fields!Kategorie.Value & Fields!Bezeichnung.Value,Fields!Ort.Value, „Inventar“),“,“) 

 Was passiert nun hier im Einzelnen?

  • Funktion „JOIN“: Die Syntax hierzu lautet JOIN(<SourceArray>,<Delimiter>) . Diese Funktion separiert eine Auflistung durch ein bestimmtes Zeichen. JOIN wird häufig verwendet, um Multivalue-Parameter anzuzeigen. Wäre in diesem Beispiel „Ort“ ein Parameter mit Multivalue und sollte kommasepariert angezeigt werden, würde der Ausdruck so lauten: JOIN(Parameter!Ort.Value,“,“).
  • Funktion „LookupSet“: Syntax: LookupSet(<Expression1>,<Expression2>,<Expression3>,<Scope>). Die Funktion führt ein 1-to-many-Lookup aus. In diesem Beispiel wird die Kombination aus den Gruppen Kategorie und Bezeichnung des Resultsets (Expression1) gegen die gleiche Kombinationen des gesamten DataSets (Expression2) gestellt. Angezeigt werden soll der Ort (Expression3). Der Scope ist der Name des DataSets „Inventar“ und bezieht sich auf Expression2 und Expression3. Natürlich kann sich der Scope auch auf ein anderes vorhandenes DataSet beziehen.

Die Kombination dieser beiden Funktionen ergibt dann den Ausdruck, um die kommaseparierten Orte anzuzeigen. Wenn dann die anderen beiden Gruppen eingefügt werden und die Drilldown-Funktion implementiert wird, ergibt sich die am Anfang dieses Eintrags gezeigte Tabelle:

Die Summen werden dann entsprechend der jeweils angezeigten Gruppe gebildet.