Aus kumulierten Werten Monatswerte erzeugen In diesem Demopaket finden Sie eine von vielen möglichen Lösungen, die ohne Cursor und SQL auskommt die ganz einfach und auch wirklich schnell diese Berechnung durchführt. Das Paket geht davon aus, dass Sie die AventureWorks Datenbank auf dem lokalen Rechner installiert haben. Falls dies nicht der Fall sein sollte, passen Sie die Verbindungs-Manager an Ihre Umgebung an. Rahmenbedingungen Die eigentliche Verarbeitung findet, wie könnte es auch anders sein, im Datenfluss statt. Die Datenquelle berechnet aus den Tageswerten in den beiden Tabellen kumulierte Monatswerte. Im normalen Leben werden diese Werte selbstverständlich schon berechnet geliefert. Das Ergebnis wird über die ProductID und das OrderDate aufsteigend sortiert. Eine der Transformationen, die im Datenfluss sehr viele Ressourcen benötigt ist die Sortierung. Wenn die Datenquelle bereits die Daten sortiert liefern kann, ist es in aller Regel günstiger diese Sortierung im Datenfluss weiter zu verwenden. Damit SSIS weiß, dass es sich um eine bereits sortierte Datenquelle handelt, rufen Sie mit der rechten Maustaste bei der Datenquelle den Erweiterten Editor auf.
Beim Reiter Eingabe- und Ausgabeeigenschaften OLE DB Source Output wird die Eigenschaft ISSorted auf True gesetzt. Unter dem Punkt Externe Spalten finden Sie die Spalten aus der Eingabe. Unter den Ausgabespalten tauchen die Spalten auf, die in die Datenfluss Pipeline weitergegeben werden.
Danach wird bei den Ausgabespalten die jeweilige SortKeyPosition gesetzt. Das erste Sortierkriterium wird auf 1 gesetzt, die anderen entsprechend. Es spielt keine Rolle, ob auf- oder absteigend sortiert wird. Entscheidend ist, das eine definierte Sortierreihenfolge vorhanden ist.
Beim überprüfen der Metadaten nach der Datenquelle finden Sie die Sortierung wieder.
Um die kumulierten
Werte auf Monatswerte umzurechnen, wird die Scriptkomponente für die
Transformation verwendet. Die Scripttranformation kann als Datenquelle,
Datenziel oder als Zeilentranformation eingesetzt werden. Beim Einsatz der Scriptransformation sind immer folgende Schritte in dieser Reihenfolge notwendig:
Die Logik für die
Verarbeitung ist nicht anspruchsvoll, da die Daten sortiert zeilenweise an
die Funktion Input0_ProcessInputRow übergeben werden. Durch
den Code der in den Events PreExecute und PostExecute
hinzugefügt wurde, wird in Millisekunden berechnet, wie lange der gesamte
Berechnungsvorgang wirklich dauert. Das Ergebnis wird über die Funktion
Me.ComponentmetaData.FireInformation in den Status Reiter ausgegeben.
Nach dem Ausführen des Datenflusses wird die Anzahl der verarbeiteten Zeilen ausgegeben.
Wie beim testen eines Programms muss auch das Ergebnis einer SSIS Verarbeitung geprüft werden. Deshalb finden Sie im rechten Teil der Ablaufsteuerung den deaktivierten Sequence Container, der Vergleichsdaten für die Prüfung erzeugt.
Wird der rechte Container ausgewählt und dann über die rechte Maustaste das Kontextmenü aufgerufen, so können alle Tasks innerhalb des Containers auf einmal aktiviert oder deaktiviert werden. Wenn beide Verarbeitungsschritte ausgeführt wurden, können Sie mit Hilfe des SQL Scriptes CheckResult.sql prüfen, ob die Berechnung richtig ausgeführt wurde. Die beiden Container können auch selbstverständlich beliebig oft und auch parallel ausgeführt werden.
Zusammenfassung
Die Rückrechnung von kumulierten Werten auf Monatswerten ist mit Hilfe der
Möglichkeiten von SSIS kein Problem. Die Geschwindigkeit wird in den
allermeisten Fällen einer SQL Lösung überlegen sein. Komponentenindex:
erstellt am
28.3.2006 | |