Das dynamische Pivotieren oder Transponieren von Daten in Informatica PowerCenter kann je nach Anforderung eine Herausforderung darstellen, da PowerCenter nicht direkt eine Transformation für dynamische Pivotierungen bereitstellt. Aber durch geschickte Nutzung von vorhandenen Transformationen wie Normalizer, Expression, Router, und Aggregator lässt sich eine Pivotierung implementieren.
Hier sind zwei Ansätze, um in Informatica PowerCenter Daten zu pivotieren bzw. zu transponieren: eine Methode zum Pivotieren von Zeilen in Spalten und eine Methode zum Pivotieren von Spalten in Zeilen:
1. Pivotieren von Zeilen in Spalten (Daten werden von mehreren Zeilen in mehrere Spalten umgewandelt)
Dies ist der häufigste Anwendungsfall, bei dem eine Eingabetabelle mit mehreren Zeilen in eine Ausgabe mit weniger Zeilen, aber mehr Spalten, umgewandelt wird.
Beispiel:
- Input-Daten:
ID | Monat | Umsatz |
1 | Jan | 100 |
2 | Feb | 150 |
3 | Mar | 200 |
Output-Daten (pivotiert):
ID | Umsatz_Jan | Umsatz_Feb | Umsatz_Mar |
1 | 100 | 150 | 200 |
Vorgehensweise:
- Source Definition: Die Daten kommen aus der Eingabequelle in der Form von mehreren Zeilen (z. B. Monat und Umsatz).
- Normalizer Transformation: Normalerweise wird diese verwendet, um Spalten in Zeilen zu transponieren, aber hier würde der Normalizer nicht direkt helfen.
- Expression Transformation: Erstelle eine Expression Transformation, um basierend auf dem Wert des Monats dynamisch Felder zu setzen.
- Router Transformation: Verwende eine Router Transformation, um Zeilen nach den Monatswerten zu verteilen (z. B. eine Gruppe für jeden Monat).
- Aggregator Transformation: Verwende eine Aggregator Transformation, um die Daten pro
ID
zu gruppieren und den Wert für jeden Monat in ein separates Feld zu aggregieren. - Zieldefinition: Definiere die Ausgabespalten entsprechend der pivotierten Daten.
Beispiel für Router-Logik:
- Erstelle Gruppen in der Router-Transformation:
Gruppe_Jan
mit BedingungMonat = 'Jan'
Gruppe_Feb
mit BedingungMonat = 'Feb'
Gruppe_Mar
mit BedingungMonat = 'Mar'
Beispiel für Expression-Logik:
- Erstelle Output-Felder in der Expression für jeden Monat:
- Umsatz_Jan = IIF(Monat = ‚Jan‘, Umsatz, 0)
- Umsatz_Feb = IIF(Monat = ‚Feb‘, Umsatz, 0)
- Umsatz_Mar = IIF(Monat = ‚Mar‘, Umsatz, 0)
Beispiel für Aggregator-Logik:
- Gruppiere die Daten im Aggregator basierend auf
ID
und berechne:SUM(Umsatz_Jan)
,SUM(Umsatz_Feb)
,SUM(Umsatz_Mar)
2. Pivotieren von Spalten in Zeilen (Transponieren)
Hierbei handelt es sich um die Umwandlung von mehreren Spalten in mehrere Zeilen.
Beispiel:
- Input-Daten:
ID | Umsatz_Jan | Umsatz_Feb | Umsatz_Mar |
1 | 100 | 150 | 200 |
- Output-Daten (transponiert):
ID | MONAT | UMSATZ |
1 | Jan | 100 |
2 | Feb | 150 |
3 | Mar | 200 |
Vorgehensweise:
- Source Definition: Die Daten kommen aus der Eingabetabelle in Form von wenigen Zeilen und mehreren Spalten (z. B. Umsatz_Jan, Umsatz_Feb, Umsatz_Mar).
- Normalizer Transformation: Verwende die Normalizer Transformation, um Spalten in Zeilen zu transponieren.
- Konfiguration des Normalizers:
- Setze die Spaltenanzahl (Occurs) auf
3
für die Umsatz-Spalten (Umsatz_Jan
,Umsatz_Feb
,Umsatz_Mar
). - Der Normalizer wird die drei Umsatz-Spalten in drei separate Zeilen umwandeln.
- Definiere in der Normalizer-Transformation generierte Ports wie
Umsatz
undMonat
.
- Setze die Spaltenanzahl (Occurs) auf
- Expression Transformation: Nach dem Normalizer kannst du eine Expression Transformation hinzufügen, um den Wert des Monats korrekt zuzuweisen:
Monat =
DECODE(GENERATED_COLUMN_NAME, 1, ‚Jan‘, 2, ‚Feb‘, 3, ‚Mar‘)
Schritt-für-Schritt für Normalizer:
- In der Normalizer-Transformation definiere ein Feld
Umsatz
mit einer Occurs-Anzahl von3
. - Der Normalizer erzeugt dann dynamisch Zeilen für jeden Wert in
Umsatz
. - Die generierte Spalte kann zur Kennzeichnung der Monate genutzt werden, indem du über eine Expression den korrekten Monat setzt.
Zusammenfassung der beiden Ansätze:
- Zeilen zu Spalten Pivotierung: Benutze Router, Expression, und Aggregator Transformationen.
- Spalten zu Zeilen Transponierung: Verwende den Normalizer, um dynamisch Spalten in Zeilen umzuwandeln.
Wichtige Hinweise:
- Der Normalizer ist besonders nützlich, wenn die Anzahl der Spalten, die in Zeilen umgewandelt werden, statischist.
- Für dynamische Pivotierungen, bei denen sich die Anzahl der Spalten oder die Struktur häufig ändert, kann es notwendig sein, das Mapping regelmäßig anzupassen.
- Bei komplexeren Anforderungen, bei denen die Pivotierung dynamischer sein soll (ohne feste Spaltenanzahl), kann es sinnvoll sein, Stored Procedures oder vorbereitete SQL-Statements in der Datenbank zu verwenden und die Ergebnisse dann in Informatica zu verarbeiten.
Durch den Einsatz dieser Techniken kannst du Daten in Informatica PowerCenter pivotieren oder transponieren und an die spezifischen Anforderungen deines ETL-Prozesses anpassen.