SQL Server Integration Services als Datenquelle für Reporting Services
Ich werde immer wieder mit Kundenanfragen konfrontiert, wie man komplexe Datasets ggf. aus verschiedenen Datenquellen innerhalb eines Reports in einem Datenbereich (data region) konsolidiert. Per Definition beinhaltet ein Dataset immer nur eine Datenquelle. Als Workaround kann man natürlich innerhalb des SQL Servers mit Linked Server arbeiten oder sich andere Hilfsmittel ausdenken (z. B. zwei nebeneinander liegende Datasets). Jedoch haben solche Maßnahmen umfangreiche Limitationen, dass ich eher davon abraten würde.
Mit Integration Services bietet sich jedoch umfangreiche Möglichkeiten, solche Implementierungen mit einfachen Mitteln umzusetzen. Dieser Artikel beinhaltet eine Schritt für Schritt Anleitung wie Sie das umsetzen können.
Sie benötigen zur Erstellen einer solchen Lösung das SQL Server Business Intelligence Development Studio (BIDS). Nachdem Sie das Programm gestartet haben, müssen Sie im ersten Schritt eine neue Solution basierend auf das Template “Integration Services Project” anlegen.
Fügen Sie in das danach geöffnete Package eine Dataflow task ein
Öffnen Sie die Dataflow task (Doppelklick auf die Task oder Registerkarte “Dataflow” auswählen) und fügen Sie dort eine oder mehrere Datasources ein und bilden Sie, wenn erforderlich, eine entsprechende Logik zum Verbinden der Datasources ab. In dem ersten Beispiel – zur Veranschaulichung der Funktionsweise – möchte ich nur mit einer einfachen Datasource arbeiten.
Dazu erstellen Sie eine neue Connection zur Adventureworks Datenbank, wählen als “Data access mode” “SQL command” aus und geben als “SQL command text” folgendes Select-Statement ein:Select ProductID, [Name] as ProductName, ProductNumber from Production.Product
Als nächster Schritt benötigen Sie eine DataReader destination, die Sie ebenfalls aus der Toolbox einfügen können. Es ist sinnvoll der DataReader destinationen einen sinnvollen Namen zuzuweisen, da Sie diesen in dem Report verwenden müssen.
Nachdem Sie das Paket fertig erstellt haben, können Sie es direkt aus dem BIDS testen. Sie erhalten jedoch bei der Ausführung des Paketes kein Ergebnis. Soll ein Ergebnis ausgegeben werden, sollten Sie im letzten Schritt des Paketes einen Data Viewer einfügen. Klicken Sie dazu mit der rechten Maustaste auf den Pfeil und wählen Sie “Data Viewer…” aus:
danach klicken Sie auf die “Add”-Schaltfläche
und bestätigen Sie dann alle geöffneten Dialoge mit OK.Danach sehen Sie im letzten Schritt Ihres Paketes ein Symbol für einen Data Viewer
und wenn Sie das Paket jetzt ausführen, sehen Sie die Daten, die das Paket zurückliefert.Danach ist das Paket in SSIS fertig erstellt und Sie können es speichern.
Damit Sie SSIS Pakete als Datasource für Reporting Services verwenden können, muss diese Funktion erst aktiviert werden. Öffnen Sie dazu bitte folgende Datei
"C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\RSReportDesigner.config"Hinweis: In einer 64bit Umgebung müssen Sie an “Program Files” noch " (x86)” anfügen und für das BIDS von SQL Server 2008 ist es statt “Microsoft Visual Studio 8” –> “Microsoft Visual Studio 9.0”.
In dieser Datei suchen Sie die Zeile:
<!-- <Extension Name="SSIS" Type="Microsoft.SqlServer.Dts.DtsClient.DtsConnection,Microsoft.SqlServer.Dts.DtsClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> -->
Die Version und der PublicKeyToken ist zwischen den verschiedenen Versionen des SQL Servers unterschiedlich.
Entfernen Sie in dieser Zeile die 4 Zeichen am Anfang “<!—“ und die drei Zeichen am Ende “—>” und speichern Sie die Datei ab.Danach fügen Sie der Solution ein neues Projekt hinzu. Am einfachsten klicken Sie dazu mit der rechten Maustaste im Solution Explorer auf die Solution, wählen dann “Add” und im nächsten Menü “New Project” aus.
Daraufhin erscheint der Dialog zum Anfügen neuer Projekte. Darin wählen Sie “Report Server Projekt” aus und können dem Projekt noch einen sinnvollen Namen geben.
Nun können Sie entweder direkt einen Bericht erstellen oder zuerst eine “Shared Datasource”. Da Datasources in Verbindung mit SSIS nur sehr selten mehrfach verwendet werden (sie sind sehr speziell und meistens nur auf einen Bericht zugeschnitten), zeige ich in diesem Beispiel, die Verwendung einer eingebetteten Datasource. Dazu erstellen Sie einen neuen Bericht. Klicken Sie dazu bitte mit der rechten Maustaste auf das Reporting Projekt, auf “Add” und danach “Neu Item”
In dem folgenden Dialog, wählen Sie das Template “Report” aus und können dem Report einen individuellen Namen geben
Wählen Sie dann im “Report Data” Bereich “New” Datasource aus
Bitte beachten Sie, dass diese Funktion so nur im BIDS 2008 zur Verfügung steht. Im BIDS 2005 steht diese Funktion unter der Registerkarte “Data” unter Dataset->New Dataset und Auswahl einer entsprechenden Datasource zur Verfügung.In dem darauf folgenden Dialog wählen Sie unter “embedded connections” den Type “SSIS” aus
.
Sollte dieser Type nicht verfügbar sein, überprüfen Sie noch einmal Schritt 8.Danach geben Sie als “Connection string”
/f “Verzeichnis+Paketname”
in diesem Beispiel:
/f "C:\Reporting_with_SSIS\Reporting_with_SSIS\Package.dtsx"
Gegebenenfalls sollten Sie die Credentials noch auf “Windows Authentication” einstellen.Danach müssen Sie eine neues Dataset erstellen. Klicken Sie dazu bitte mit der rechten Maustaste auf die entsprechende DataSource und wählen “Add Dataset…” aus.
In dem darauf folgenden Dialog geben Sie als Query den Namen der DataReader Destination ein, die Sie im Schritt 5 eingefügt haben.
Es ist sinnvoll die “Refresh Fields…” Schaltfläche zu drücken, damit Sie überprüfen können, ob die Kommunikation zum Paket funktioniert und Ihre Felder ordnungsgemäß aufgelöst werden. Dies können Sie dann anschließend im Bereich “Fields” kontrollieren.
Wurden die Felder richtig erkannt, können Sie mit “OK” den Dialog schließen und mit der Gestaltung des Berichts beginnen.Wechseln Sie dazu auf die Design Registerkarte und fügen Sie aus der Toolbox einen Table ein.
Anschließend ziehen Sie aus dem Dataset die einzelnen Bereiche in das Table control.
Im letzten Schritt des Erstellen des Berichts können Sie mit “Preview” die Funktion testen.
Damit ist die Erstellung des Berichts abgeschlossen.
Bevor Sie den Bericht im Reportserver verwenden können, müssen Sie auch dort die SSIS Datasource freischalten. Dazu müssen Sie folgende Datei entsprechend Schritt 8 anpassen:
"C:\Program Files\Microsoft SQL Server\MSRS10.SQL2008\Reporting Services\ReportServer\rsreportserver.config"
Soll das SSIS-Paket im SQL Package Store oder in SSIS abgelegt werden, ändert sich entsprechend die Commandline Optionen und der Pfad zum Paket aus Schritt 13. Es ist sinnvoll dazu das Programm DTExecUI aufzurufen, um die Commandline Optionen, die normalerweise für DTExec verwendet werden, über die grafische Oberfläche auszuwählen.
Wird das Paket direkt im SSIS Instanz des SQL Server abgelegt so müssen Sie folgende Befehlszeile verwenden:
/SQL "\servername\SSIS_DS_RS" /SERVER "servername"
Wird das Paket im SSIS Package Store abgelegt, so kommt folgende Befehlszeile zur Anwendung.
/DTS "\MSDB\servername\SSIS_DS_RS" /SERVER servername
Die hier dargestellten Befehlszeilen sind nur Beispiele und können natürlich in Ihrer Umgebung abweichen.