Mittendrin.

Zurück

Flurfunk der eXperts.

Hier erfahren Sie mehr über eXperts, Technologien und das wahre Leben in der SDX.

Dynamische Spalten mit Reporting Services

03.09.201010:17 Uhr , Viktor Ewert

Einen Report – basierend auf einer MDX-Abfrage – mit dynamischen Spalten anzulegen ist relativ gängig. Doch auch einen Report, dessen DataSet die Daten per SQL aus einer Datenbank liest, ist in einigen Schritte möglich. Hier wird am Beispiel von Reporting Services 2005 erklärt, wie man dynamische Spalten in einem Bericht implementieren kann. Dieses Vorgehen gilt analog für Reporting Services 2008 (R2).

Zuerst wird eine Stored Procedure angelegt, die ein dynamisches Result-Set zurückliefert:

   1: create procedure [dbo].[sp_get_dynamic_columns]

   2: (

   3:     @columns int

   4: )

   5: as

   6: begin

   7:   -- Abhängig vom Parameter @columns wird eine andere Anzahl Spalten zurückgeliefert.

   8:   if @columns = 3

   9:     select '3 Wertespalten' as Bezeichnung, 1 as Wert1, 2 as Wert2, 3 as Wert3;  

  10:   if @columns = 2

  11:     select '2 Wertespalten' as Bezeichnung, 1 as Wert1, 2 as Wert2;

  12:   if @columns < 2

  13:     select '1 Wertespalte' as Bezeichnung, 1 as Wert1;

  14: end

Hinweis: Anhand des ersten Statements, welches ein ResultSet zurückliefert(hier das Select nach ”if @columns = 3”), ermittelt sich Reporting Services die Metadaten für das DataSet. Hier ist darauf zu achten, dass das erste Statement die maximale Anzahl Spalten zurückliefert. Alternativ kann man das Statement auch mit dynamischem SQL erzeugen.

Im nächsten Schritt wird im Data-Bereich des zu erstellenden Reports ein DataSet angelegt. Hier wird als Command type „Stored Procedure“ ausgewählt und die erstellte Stored Procedure angeben.

clip_image002

Dann die Abfrage ausführen. Wichtig hierbei ist, die Abfrage so auszuführen, dass sie die maximale Anzahl Spalten zurückliefert die im Report möglich sein sollen. In diesem Beispiel sind es 3 Spalten.

clip_image004

Als Ergebnis werden die 3 dynamischen Spalten zurückgeliefert.

clip_image006

Hinweis: Beim aktualisieren des DataSets werden die Metadaten des Result-Set wieder ausgelesen und die DataSet Felder im Report entsprechend aktualisiert. Das ist wichtig, wenn Spalten hinzukommen sollen oder entfernt werden.

Im Layout-Bereich des Reports wird eine Tabelle angelegt, die alle Spalten des DataSets enthält. Für die dynamischen Spalten wird noch eine Expression für die Eigenschaft Visibility Hidden definiert, da die Spalten ausgeblendet werden sollen, wenn diese keinen Wert besitzen:

   1: =isnothing(sum(Fields!Wert2.Value))

Ein Preview auf den Report zeigt, dass die Spalten nun dynamisch ein-/ausgeblendet werden, je nach Auswahl des Parameter-Wert.

clip_image008

clip_image010

4 Kommentare

14.07.20117:58 Uhr
Anonym

Wenn sich die dynamischen Spalten in ihrer Breite und Formatierung nicht unterscheiden, würde ich eine Pivotisierung mittels Matrix bevorzugen um solche Probleme zu lösen.

F. Michel

14.07.201112:00 Uhr
Anonym

Hallo Herr Michel,

richtig ab der Version 2008 von Reporting-Services bekommt man die Funktion out-of-the-box mit der Tablix.

gruß
Viktor Ewert

20.02.201212:34 Uhr
Anonym

Hallo Herr Ewert,

wie kann ich den Pivotisierung mittels Matrix darstellen? die Anzahl der Spalten in der Pivot-Abfrage kann auch variieren.

Vielen Dank im Voraus
I. Doerschmann

01.03.201211:36 Uhr
Viktor Ewert

Hallo Herr Doerschmann,

ich weiß nicht genau zu welchem Aspekt in einer Matrix (in SSRS 2005) bzw. Tablix(ab SSRS 2008) Komponente sie Fragen haben, aber grundsätzlich setzt man die Komponenten ähnlich wie eine Pivottabelle in Excel ein. Dimension in Spalten und Zeilen setzen, Werte in den Wertebereich setzen und schon kann es losgehen.

mit freundlichen Grüßen
Viktor Ewert

Dein Kommentar wartet auf Freischaltung.

Artikel kommentieren

Zurück

Tag Cloud


Kontakt aufnehmen


Anrufen

Gerne beantworten wir Ihre Fragen in einem persönlichen Gespräch!


Kontakt aufnehmen

Schreiben Sie uns eine E-Mail mit Ihren Fragen und Kommentaren!