Sdílet prostřednictvím


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.

  1. 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.
    image

  2. Fügen Sie in das danach geöffnete Package eine Dataflow task ein
    image

  3. Ö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

    image

  4. 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.
    image

  5. 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:
    image image
    danach klicken Sie auf die “Add”-Schaltfläche
    image
    und bestätigen Sie dann alle geöffneten Dialoge mit OK.

  6. Danach sehen Sie im letzten Schritt Ihres Paketes ein Symbol für einen Data Viewer
    image
    und wenn Sie das Paket jetzt ausführen, sehen Sie die Daten, die das Paket zurückliefert.

  7. Danach ist das Paket in SSIS fertig erstellt und Sie können es speichern.

  8. 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.

  9. 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.
    image

  10. 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.
     image

  11. 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”
    image
    In dem folgenden Dialog, wählen Sie das Template “Report” aus und können dem Report einen individuellen Namen geben
    image

  12. Wählen Sie dann im “Report Data” Bereich “New” Datasource aus
    image
    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.

  13. In dem darauf folgenden Dialog wählen Sie unter “embedded connections” den Type “SSIS” aus
    image.
    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"
    image
    Gegebenenfalls sollten Sie die Credentials noch auf “Windows Authentication” einstellen.

  14. 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.
    image 
    In dem darauf folgenden Dialog geben Sie als Query den Namen der DataReader Destination ein, die Sie im Schritt 5 eingefügt haben.
    image
    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.
    image 
    Wurden die Felder richtig erkannt, können Sie mit “OK” den Dialog schließen und mit der Gestaltung des Berichts beginnen.

  15. Wechseln Sie dazu auf die Design Registerkarte und fügen Sie aus der Toolbox einen Table ein.
    image

  16. Anschließend ziehen Sie aus dem Dataset die einzelnen Bereiche in das Table control.
    image

  17. Im letzten Schritt des Erstellen des Berichts können Sie mit “Preview” die Funktion testen.
    image

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.