Home
Datenquellen
Controllflow
DataFlow
SSIS
ToC
Impressum
Die Unpivot Transformation

Es gibt eine Menge Programme, die liefern die Daten im folgenden Format:

Fname;email;Firma;Wert1;Wert2;Wert3;Wert4;Wert5;Wert6
willfried;willfried@wfaerber.de;faerber;5;6;7;8;;
sebastian;sf@wfaerber@de;müller;10;20;30;40;50;60

Die Daten sind wie eine Excel Tabelle aufgebaut. Dieses Format ist sehr Platz sparend. Allerdings in einer relationalen Datenbank sollte dieses Format nicht gespeichert werden. Es entspricht nicht den Regeln der Datenbank Normalisierung.

Jede Zeile wird in den "Fname", die "Email" Adresse, die "Firma" und genau einem Wert zerlegt. Aus einer Eingabezeile werden nach der Verarbeitung bis zu sechs Zeilen.

Die Ausgabe sieht dann so aus:

Fname;email;Firma;Key; Wert
willfried;willfried@wfaerber.de;faerber;Wert1;5
willfried;willfried@wfaerber.de;faerber;Wert2;6
willfried;willfried@wfaerber.de;faerber;Wert3;7
willfried;willfried@wfaerber.de;faerber;Wert4;8
willfried;willfried@wfaerber.de;faerber;Wert5;
willfried;willfried@wfaerber.de;faerber;Wert6;
sebastian;sf@wfaerber@de;müller;Wert1;10
sebastian;sf@wfaerber@de;müller;Wert2;20
sebastian;sf@wfaerber@de;müller;Wert3;30
sebastian;sf@wfaerber@de;müller;Wert4;40
sebastian;sf@wfaerber@de;müller;Wert5;50
sebastian;sf@wfaerber@de;müller;Wert6;60

Der eine oder andere wird sicher denken, für diese Transformation ist Script Kode notwendig. Mit Hilfe SSIS Unpivot Transformation geht es auch ohne eine Zeile Kode. Die Transformation steht im Dataflow zur Verfügung.

Data Flow

Damit die Transformation funktioniert müssen bestimmte Werte eingestellt werden:

  • Auswahl der Zeilen für die Transformation
  • Festlegen der "Pass Through" Spalten
  • Festlegen der "Destination Colum"
  • Festlegen der "Pivot Key Value"
  • Festlegen des "Pivot key value column name"

Um Missverständnisse zu vermeiden möchte ich folgende Definition machen:

Destination Column
Der Name der Spalte, in der der Wert gespeichert wird

Pivot key value column name
Der Name der Spalte, die eine Referenzierung auf die ursprüngliche Spalte enthält.

Pivot Key Value
Die Spalte, deren Werte gedreht werden sollen. Von horizontal nach vertikal.

Auswahl der Zeilen für die Transformation
Die Spalten, die nicht eingelesen werden sollen werden im Fenster nicht in der ersten Spalte und der Spalte "Pass Through" markiert.

Festlegen der "Pass Through" Spalten
Die Spalten, die in jede Zeile übernommen werden, werden in der Spalte "Pass Through" markiert; die erste Spalte wird nicht markiert.

Festlegen der "Destination Colum"
Der Wert, der in "Destination Column" eingetragen wird, wird als Ausgabespaltennamen verwendet.

Festlegen der "Pivot Key Value"
Für den "Pivot Key Value" wird per default auf dem Namen der Eingabespalte gesetzt. Bitte setzen Sie diesen Wert manuell auf einen eindeutigen Namen.

Festlegen des "Pivot key value column name"
Als letztes wird der "Pivot key value column name" auf einen aussagekräftigen Namen festgelegt. Dieser Name wird für die Spaltenüberschrift verwendet.

Bitte achten Sie darauf, dass die Namen der Spalten "Destination Column", "Pivot Key Value" und "Pivot key value column name" unterschiedlich sind.

Das war es …

Unpivot Transformation Editor

Nach der Transformation ...

Data Flow

In der Ausgabedatei befinden sich folgende Werte:

Key;Wert;Fname;email;Firma
Wert1;5;willfried;willfried@wfaerber.de;faerber
Wert2;6;willfried;willfried@wfaerber.de;faerber
Wert3;7;willfried;willfried@wfaerber.de;faerber
Wert4;8;willfried;willfried@wfaerber.de;faerber
Wert5;;willfried;willfried@wfaerber.de;faerber
Wert6;;willfried;willfried@wfaerber.de;faerber
Wert1;10;sebastian;sf@wfaerber@de;müller
Wert2;20;sebastian;sf@wfaerber@de;müller
Wert3;30;sebastian;sf@wfaerber@de;müller
Wert4;40;sebastian;sf@wfaerber@de;müller
Wert5;50;sebastian;sf@wfaerber@de;müller
Wert6;60;sebastian;sf@wfaerber@de;müller

Dabei fällt auf, dass zuerst die Pivot Key Value Spalte und dann die Destination column ausgegeben wird. Wenn sie die Reihenfolge der Spalten in der Ausgabe ändern wollen, dann müssen Sie die Struktur der Ausgabedatei manuell mit der Hand definieren.

Können auch mehrere Spalten zusammengefasst werden?

Wie sieht es aus, wenn Sie nicht nur eine sondern zum Beispiel zwei Werte einer Zeile zuordnen müssen. Denken Sie nur an die Ist- und Planwerte. Für die Beispieldatei bedeutet dies: aus einer Eingabezeile werden nach der Verarbeitung bis zu drei Zeilen.

Als Ausgabedaten erwarten wir

Fname;email;Firma;Wert;W1;W2
willfried;willfried@wfaerber.de;faerber;K1;5;6
willfried;willfried@wfaerber.de;faerber;K2;7;8
willfried;willfried@wfaerber.de;faerberK3;;;
sebastian;sf@wfaerber@de;müller;K1;10;20
sebastian;sf@wfaerber@de;müller;K2;30;40
sebastian;sf@wfaerber@de;müller;K3;50;60

Damit diese Aufgabe gelöst werden kann, müssen folgende Bedingungen erfüllt sein:

  • Alle Pivot Spalten müssen den gleichen Datentypen haben, zum Beispiel String
  • Alle Mitglieder einer Gruppe von Pivot Spalten die zusammen gehören, bekommen den unterschiedliche Namen in Destination Column.
  • Alle Pivot Spalten, die eine Gruppe bilden, bekommen den gleichen Pivot Key Value. Dieser Punkt ist entscheidend, sonst bekommen Sie eine Fehlermeldung und es funktioniert nicht.
    Deshalb empfehle ich Ihnen grundsätzlich den Wert dieser Spalte immer manuell zu setzen.

Die Definition im Editor muss so aussehen:

Unpivot Transformation Editor

Falls Sie an dieser Stelle einen Fehler machen wird die Unpivot Transformation so markiert.

Unpivot

Die ausführliche Fehlermeldung bekommen Sie, wenn Sie die Unpivot Transformation auswählen und mit der rechten Maus im Kontextmenü den Punkt Show Advanced Editor... auswählen. Auf dem Tabellenblatt Input Columns finden Sie unten die ausführliche Fehlermeldung.

Advanced Editor for Unpivot

Das Ergebnis der Transformation sieht so aus:

Wert;W1;Fname;email;Firma;W2
K1;5;willfried;willfried@wfaerber.de;faerber;6
K2;7;willfried;willfried@wfaerber.de;faerber;8
K3;;willfried;willfried@wfaerber.de;faerber;
K1;10;sebastian;sf@wfaerber@de;müller;20
K2;30;sebastian;sf@wfaerber@de;müller;40
K3;50;sebastian;sf@wfaerber@de;müller;60

Auch hier fällt wieder auf, dass die Reihenfolge der Spalten nicht der Reihenfolge entspricht, die wir erwarten würden.

Die Unpivot Transformation kann nicht dynamisch über Expressions konfiguriert werden.

Hier können Sie die zwei Demopakete einschließlich der Eingabedatei herunterladen.

Bitte passen Sie die Connection Manager an Ihre Umgebung an.

Komponentenindex:

  • Datenflusstask
  • Flatfilequelle
  • UnPivot Transformation
  • Flatfileziel