none
Wie kann aus einem SSRS Report ein SSIS Paket gestartet werden? oder umgekehrt RRS feed

  • Frage

  • Mit SSIS selektiere ich aus einer Oracel Datenbank  Datensätze, verändere sie und gib sie in einer Textdatei aus. Dieses Paket funktioniert. Nun muss ich aber die selektierten Sätze in einem Report ausgeben und zum Schluss in ein bestimmtes Feld ein Update Kennzeichen setzen, dass ich diese Sätze schon einmal selektiert habe. Wie ist die Vorgensweise?  Der Report als solches funktioniert. Dass SSIS Paket auch, nur das Update der Datensätze noch nicht. Rufe man den Report auf und kann dort das SSIS Paket starten ? Wie geht das ?   Im SSIS habe ich nichts gefunden um daraus einen Report aufzurufen?

    Hoffentlich kann mir jemand weiterhelfen?

    Vielen Dank


    • Bearbeitet hppr Montag, 29. April 2013 14:09
    Montag, 29. April 2013 09:22

Alle Antworten

  • Hallo!
    Erst einmal zum möglichen Vorgehen, was vielleicht nicht die beste Lösung ist. Du kannst aus dem Report heraus eine Prozedur aufrufen. Hierzu gibst Du einfach anstelle des SELECT ein EXEC <Prozedur> an. Dort kannst du auch Parameter übergeben, falls notwendig.

    In der Prozedur kannst Du alles machen was benötigt wird, z. B. auch über master..xp_cmdshell und dtexec einzelne Pakete ausführen.
    Voraussetzung hierfür sind allerdings die notwendigen Berechtigungen, dass heißt in der Regel, dass der Report mit einem Konto ausgeführt wird, welches sysadmin ist.
    Falls Du den Report auch mit Konten ausführen möchtest, die nicht sysadmin sind, musst Du unter den Eigenschaften des Reports im Bereich Datenquellen entsprechende Anmeldeinformationen hinterlegen.

    Das letzte Statement in der Prozedur ist dann ein SELECT, welches Dir die Daten zurückgibt.
    Beachte aber die Probleme, die auftreten können, wenn mehrere Leute parallel den Report aufrufen.

    Mir ist nicht klar geworden, warum Du die Oracle-Daten in eine Textdatei auslagerst, anstatt sie über einen Verbindungsserver oder ODBC-Datenquelle direkt aus dem Report abzurufen.
    Die Kennzeichen für die Selektion kannst du dann auch in der Prozedur wegschreiben. Auf Oracle liegen die Daten, auf dem SQL Server liegen die Informationen über die Selektionen. Alternativ könntest Du die Oracle Daten auch in einer SQL Server Tabelle speichern, falls Du den Stand einfrieren musst.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu/

    Dienstag, 30. April 2013 06:30
  • Hallo

    Danke dass du dir mal mein Problem angesehen hast.   Das mit den Berechtigungen sollte kein Problem sein. Das kann ich alles regeln.  Der Report soll zeitgesteuert ablaufen  Täglich um 20:00 Uhr und somit besteht nicht die Gefahr, dass der Report parallel ausgeführt wird.  Warum brauche ich die Ausgabe in eine Textdatei? In dieser erstellten Datei sind Reisezeiten von Mitarbeitern aus der Reisekostenabrechnung und diese sollen an die Zeitwirtschaft übergeben werden. Die Zeitwirtschaft greift nicht direkt auf die Datenbank des Reiseprogramms zu, sondern benötigt diese Importdatei.

    Die  Ausgabe auf einem Drucker oder in eine PDF Dokument benötige ich, weil die Mitarbeiter in der Personalabteilung wissen möchte, welche Daten importiert wurden. Dient hauptsächlich der Kontrolle.  Auf dieser Liste stehen mehr Informationen, als in der Importdatei.  z. B noch Name Vorname Reisenummer usw.  In der Reiseimportdatei steht eigentlich nur Personal-Nr. Reisdatum  und Zeitpaare. Deshalb kann ich nicht aus der Importdatei den Report erstellen.

    Zum Schluss sollen die selektierten Oracle Daten ein Kennzeichen erhalten, dass diese Daten bereits in die Zeitwirtschaft übergeben worden sind.

    Was ich jetzt nicht weiß, was du mit de EXEC Prozedur meinst, wie heir die Syntax ist  und wie ich den  der zeitliche Ablauf regeln kann, damit nur die Datensätze upgedatet werden die im 1. Schritt selektiert wurden.

    1. Select der Reisedaten

    2. Ausgabe der Liste

    3. Dann Update Kennzeichen setzen.

    Weiß du wo ich Beispiele für EXEC <Prozedur> finde?  oder ist das schon spezielles Reporting Wissen?  Kann zwar Bericht erstellen, aber viel mehr weiß ich nicht.

    Ich hoffe, das mein Problem jetzt verständlicher ist.  Letzendlich scheint es generell möglich zu sein, allerdings feht das genaue WIE:-))

    Vielen Dank


    • Bearbeitet hppr Dienstag, 30. April 2013 12:17
    Dienstag, 30. April 2013 12:14
  • Wenn Du noch nie mit Prozeduren gearbeitet hast, wird der Rest wohl schwierig werden. Mit Reporting hat das in erster Linie nichts zu tun.

    Sieh Online-Doku:
    http://msdn.microsoft.com/de-de/library/ms187926.aspx
    CREATE PROCEDURE (Transact-SQL)

    Was meinst Du mit "Update Kennzeichen setzen" ? Greifst Du in die Oracle-Datenbank durch und setzt dort ein Update ab?

    Ich würde den Ablauf auch etwas ändern:

    1.) Select der Reisedaten, diese werden mit Tagesdatum in eine SQL Server Tabelle geschrieben
    2.) Update der Oracle-Daten, welche eben selektiert wurden
    3.) Erstellung der TXT-Datei aus der SQL Server Tabelle zu dem Tagesdatum
    4.) Report über die SQL Server Tabelle zu dem Tagesdatum mit ergänzenden Informationen

    Dann könntest Du die Schritte 1 bis 3 in ein SSIS-Paket packen und den Schritt 4 als Report zeitgesteuert laufen lassen.
    Sollte das SSIS z. b. um 19:00 Uhr laufen, könnte der Report um 20:00 Uhr laufen. Sollte der Report keine Daten finden, da das SSIS-Paket länger dauerte, kann er jederzeit wiederholt werden, da die Daten ja im SQL Server historisiert sind.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu/

    Dienstag, 30. April 2013 13:02
  • Hallo Christoph

    Dein Vorschlag hört sich gut an und ist wohl unterm Strich auch einfacher und klarer:-)) . Dann mach ich mich mal an die Arbeit

    Grüße Herbert

    Dienstag, 30. April 2013 13:13