Nachdem Sie in einem früheren Artikel die Vorteile von SQL Script und die Entscheidungskriterien für eine Umsetzung mittels SQL Script kennengelernt haben, zeige ich Ihnen in diesem Artikel, wie Sie SAP BW Transformationsroutinen mit SQL Script anlegen können.
SQL Transformationen profitieren zwar vom Code-Pushdown, allerdings muss man dabei auf vordefinierte ABAP-Bausteine verzichten und die gewünschte Logik in SQL Script selbst implementieren. Ich zeige Ihnen anhand eines konkreten Anwendungsfalls, wie Sie Fiskalperioden in Kalendermonate umrechnen.
Transformationsroutine erstellen
Die Fiskalperioden liegen in der Version V3 vor. Um die entsprechenden Kalendermonate abzuleiten, müssen wir drei Monate zurückrechnen und zusätzlich die Jahresverschiebung berücksichtigen.
In der untenstehenden Tabelle finden Sie unser Beispiel mit den Fiskalperioden und die entsprechenden Kalendermonate, die es nun zu ermitteln gilt.
Fiskalperiode | Kalendermonat |
2019001 | 201810 |
2019002 | 201811 |
2019003 | 201812 |
2019004 | 201901 |
2019005 | 201902 |
2019006 | 201903 |
2019007 | 201904 |
2019008 | 201905 |
2019009 | 201906 |
2019010 | 201907 |
2019011 | 201908 |
2019012 | 201909 |
Diese Logik setzen wir in Form einer Transformationsroutine um. Dazu legen wir in den BW Modeling Tools wie gewohnt eine Transformation an. Achten Sie darauf, dass zunächst sowohl ABAP-Laufzeit als auch HANA-Laufzeit unterstützt wird. Diese Information können Sie unter Laufzeitstatus ablesen.
Um die Fiskalperioden in Kalendermonate umzuwandeln, legen wir eine Expertenroutine an, in welcher wir Zugriff auf die Quell- und Zielfelder haben. Folgen Sie dem Menüpfad Bearbeiten → Routinen → Expertenroutine um eine Expertenroutine anzulegen.
Sie werden gefragt, ob Sie die bestehende Transformation löschen und durch eine Expertenroutine ersetzen möchten. Bestätigen Sie diese Abfrage mit Ja. Anschließend werden Sie gefragt, ob Sie eine ABAP-Routine oder ein AMDP Script anlegen möchten. Um vom HANA Code Pushdown zu profitieren, wählen Sie bitte die Option AMDP Script aus.
Anschließend müssen Sie in BW Modeling Tools ein bestehendes ABAP-Projekt auswählen oder ein neues Projekt anlegen. Danach können Sie innerhalb der Methode PROCEDURE Ihre Logik implementieren. Als Übergabeparameter haben Sie die Tabellen outTab und errorTab zur Verfügung. Beachten Sie bitte, dass die Reihenfolge der SQL Statements mit der Tabellendefinition übereinstimmen muss. Die Tabellendefinition sehen Sie am Anfang der Klassendefinition.
In unserem Fall lautet die Logik wie folgt:
outTab =
SELECT company, fiscper, fiscvarnt,
CASE
WHEN SUBSTRING(fiscper,5,3) = 001 then CONCAT(SUBSTRING(fiscper,1,4) - 1, SUBSTRING(fiscper,5,3) - 3 + 12)
WHEN SUBSTRING(fiscper,5,3) = 002 then CONCAT(SUBSTRING(fiscper,1,4) - 1, SUBSTRING(fiscper,5,3) - 3 + 12)
WHEN SUBSTRING(fiscper,5,3) = 003 then CONCAT(SUBSTRING(fiscper,1,4) - 1, SUBSTRING(fiscper,5,3) - 3 + 12)
ELSE CONCAT(SUBSTRING(fiscper,1,5), SUBSTRING(fiscper,5,3) - 3)
END AS calmonth,
currency, recordmode, amount, record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
Steigern Sie die Leistung Ihres BW mit SQLScript
Wenn Sie keine Fehlerbehandlung implementieren möchten, können Sie auch eine leere errorTab Tabelle übergeben.
errorTab =
SELECT '' AS ERROR_TEXT,
'' AS SQL__PROCEDURE__SOURCE__RECORD
FROM DUMMY
WHERE DUMMY <> 'X';
Aktivieren Sie anschließend die AMDP-Klasse und die Transformation. Beachten Sie, dass nach der Implementierung der AMDP-Routine nur die HANA-Laufzeit unterstützt wird.
Sie können die HANA-Transformation über Zusätze → Generierte HANA-Transformation anzeigen einsehen.
Wechseln Sie dort über Zusätze → Expertenmodus ein in den Expertenmodus, um das Berechnungsszenario anzuzeigen.
Dort können Sie neben der XML-Darstellung des Berechnungsszenarios auch die Skriptdefinition einsehen.
Wenn Sie nun ein DTP anlegen, sehen Sie, dass dieser in HANA ausgeführt wird.
Aktivieren Sie bitte den DTP und führen Sie diesen aus. Die Kalendermonate werden der definierten Logik entsprechend gefüllt. Auf dem folgenden Bild sehen Sie das Ergebnis.
Bildquelle: Pexels, CC0 License