Task ‘ReportGenerator’

Während der Ausführung von SSIS Paketen ist es häufig notwendig sich die Daten innerhalb eines Datenflusses anzeigen zu lassen. Hierfür eignet sich der DatenViewer, mit dem die Daten als Raster, Diagramm, Punktdiagramm oder Säulendiagramm dargestellt werden können.

DataViewer

Die Daten können allerdings nur während des Debugs angezeigt werden und die gegebenen Funktionen, z.B. beim durchsuchen des Rasters, reichen nicht immer aus um sich ein vernünftigen Eindruck zu verschaffen.

Eine etwas andere Lösung versuche ich mit dem Task ‘ReportGenerator’ zu bieten, der bei Codeplex zu finden ist. Mit dem Task können Daten innerhalb des Datenflusses über das Recordsetziel in eine Variable gespeichert werden und dann mit Hilfe eines lokalen Reports direkt während der Ausführung betrachtet oder als als Excel oder PDF gerendert werden. Die gespeicherten Reports können mit dem aktuellen Datum als Präfix versehen und somit historisiert werden.

Auf der Codeplex Seite reportgeneratortask.codeplex.com sind auch einige Demo Reports und SSIS Pakete zu finden, die ich auf Basis der AdventureWorks 2008 Datenbank erstellt habe.

Erstellen Lokaler Reports

Um die Daten eines Recordsets an einem Report zu binden, muss zuerst ein lokaler Report erstellt werden. Lokale Reports werden von dem ReportViewer Control verwendet um Reports ohne die SQL Server Reporting Services zu generieren.

Lokale Reports können mit dem Visual Studio erstellt werden und auf Datenbanken, Dienste oder Objekte als Datenquellen zugreifen. Eine gute Beschreibung über das ReportViewer Control und über lokale Reports ist auf der Seite gotreportviewer.com zu finden.

Um später über den Task die Daten an den Report zu binden, muss man sich den vom VisualStudio verwendeten Namen für das Dataset merken. Der Name kann über die Eigenschaften einer anzuzeigenden Tabelle oder eines anzuzeigenden Charts innerhalb erfahren werden.

Rendern lokaler Reports

Um innerhalb eines SSIS Paketes nun einen lokalen Report zu rendern, müssen zuerst die Daten innerhalb eines Datenflusses mit dem Task “Recordsetziel” gespeichert werden.

image

Das Recordset, hier im Beispiel “myRecordset” genannt, speichert die Daten in einer lokalen Variable. Die Variable sollte zuvor angelegt werden, da sie Paketweit zur Verfügung stehen muss, also nicht im Bereich “Datenflusstask”.

image

In der Ablaufsteuerung wird nun der Task ‘ReportGenerator’ konfiguriert. “Variable” ist der Name der Variable in der das Recordset gespeichert wurde und “Dataset Name” der Name des Datasets innerhalb des verwendeten lokalen Berichts.

 image

Der Report kann auch während der Ausführung angezeigt werden oder mit dem aktuellen Datum und der aktuellen Uhrzeit als Präfix gespeichert werden.

Untitled-9