Häufig muss während der Ladeprozesse in SAP BW HANA die Währung umgerechnet werden. So wird zum Beispiel bei einem Konzern mit Gesellschaften in verschiedenen Ländern die Landeswährung in die Konzernwährung umgerechnet.
Mittlerweile ist es ohne Weiteres möglich, viele typische Anforderungen im ETL Prozess mit SQLScript umzusetzen. Die Anwender werden dabei durch vordefinierte Funktionen unterstützt. In diesem Artikel beleuchten wir die Währungsumrechnung. Weitere Informationen zu Einsatzgebieten für SQLScript finden Sie in unserem Whitepaper.
Mit der Nutzung von SQLScript anstatt von ABAP profitieren Sie von Code Pushdown. Dabei werden Berechnungen auf der Ebene der Datenbank durchgeführt. So wird verhindert, dass die Daten zuerst von der Datenbank zum ABAP-Server geladen werden, um anschließend dort die Kalkulationen durchzuführen.
Als Ergebnis können Sie eine bessere Performance erzielen. Denn mit SQLScript greifen Sie direkt auf die Daten der HANA-Datenbank zu und vermeiden unnötige Übertragungen zwischen der Datenbank und dem Anwendungsserver. Gerade bei Berechnungen mit großen Datenmengen können Sie auf diese Weise viel Zeit einsparen.
Um die Währungsumrechnung in SQLScript durchführen zu können, müssen die folgenden Währungstabellen in HANA verfügbar sein:
Für die Durchführung der Währungsumrechnung wird die SQLScript Funktion CONVERT_CURRENCY verwendet. Nachfolgend werden die Parameter dieser Funktion dargestellt. In der Spalte Referenz ist angegeben, ob Sie bei dem Parameter auf eine Spalte in der Datentabelle verweisen können oder eine fixe Konstante angeben müssen.
Parameter |
Referenz |
Beschreibung |
AMOUNT |
Ja |
Zu konvertierende Summe |
SOURCE_UNIT |
Ja |
Zu konvertierende Währung |
TARGET_UNIT |
Ja |
Zielwährung |
REFERENCE_DATE |
Ja |
Stichtag für die Kursermittlung |
SCHEMA |
Nein |
Datenbankschema der Konvertierungstabellen |
CLIENT |
Ja |
Mandant, in dem die Konvertierung durchgeführt wird |
ERROR_HANDLING |
Nein |
Legt die Fehlerbehandlung fest. Zum Beispiel, wenn eine Währung unbekannt ist. Folgende Optionen sind möglich: fail on error - die Konvertierung bricht mit einem Fehler ab (Standardwert) set to null - NULL wird als Ergebnis ausgegeben keep unconverted - die Originalsumme wird ausgegeben |
CONVERSION_TYPE |
Nein |
Definiert den verwendeten Kurstyp |
Neben den Standard TCUR* Tabellen können Sie auch eigene Tabellen verwenden. Diese müssen Sie mithilfe der folgenden Parameter definieren.
Parameter |
Referenz |
Beschreibung |
PRECISIONS_TABLE |
Nein |
Dezimalstellen der Währungen (Standard TCURX) |
CONFIGURATION_TABLE |
Nein |
Kurstypen für Währungsumrechnung (Standard TCURV) |
NOTATION_TABLE |
Nein |
Notierungsrichtung für Währungsumrechnung (Standard TCURN) |
RATES_TABLE |
Nein |
Umrechnungskurse (Standard TCURR) |
PREFACTORS_TABLE |
Nein |
Umrechnungsfaktoren (Standard TCURF) |
An dieser Stelle präsentieren wir Ihnen einige Beispiele zur Verdeutlichung des Konzepts. Im ersten Beispiel wird die Belegwährung in die Hauswährung Euro umgerechnet. Dabei wird der Stichtag manuell festgelegt.
outTab =
SELECT calmonth, comp_code, doc_currcy,
'EUR' AS loc_currcy,
recordmode,
deb_cre_dc,
CONVERT_CURRENCY( AMOUNT => deb_cre_dc,
SOURCE_UNIT => doc_currcy,
SCHEMA => 'SAPABAP1',
TARGET_UNIT => 'EUR',
REFERENCE_DATE => '2020-08-10',
CLIENT => '100',
CONVERSION_TYPE => 'EURX')
AS deb_cre_lc,
record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
ERRORTAB= SELECT * FROM :ERRORTAB;
Alternativ können Sie das aktuelle Datum als Stichtag nutzen:
outTab =
SELECT calmonth, comp_code, doc_currcy,
'EUR' AS loc_currcy,
recordmode,
deb_cre_dc,
CONVERT_CURRENCY( AMOUNT => deb_cre_dc,
SOURCE_UNIT => doc_currcy,
SCHEMA => 'SAPABAP1',
TARGET_UNIT => 'EUR',
REFERENCE_DATE => current_date,
CLIENT => '100',
CONVERSION_TYPE => 'EURX')
AS deb_cre_lc,
record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
ERRORTAB= SELECT * FROM :ERRORTAB;
Sie können auch Variablen in der Währungsumrechnung verwenden. So wird im folgenden Beispiel das aktuelle Datum als Stichtag für die Währungsumrechnung genutzt:
DECLARE lv_date nvarchar(8);
SELECT to_nvarchar (current_date,'YYYYMMDD')INTO lv_date FROM DUMMY;
outTab =
SELECT calmonth, comp_code, doc_currcy,
'EUR' AS loc_currcy,
recordmode,
deb_cre_dc,
CONVERT_CURRENCY( AMOUNT => deb_cre_dc,
SOURCE_UNIT => doc_currcy,
SCHEMA => 'SAPABAP1',
TARGET_UNIT => 'EUR',
REFERENCE_DATE => :lv_date,
CLIENT => '100',
CONVERSION_TYPE => 'EURX')
AS deb_cre_lc,
record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
ERRORTAB= SELECT * FROM :ERRORTAB;
Alternativ können Sie auch den Monat des jeweiligen Datensatzes als Stichtag nutzen:
outTab =
SELECT calmonth, comp_code, doc_currcy,
'EUR' AS loc_currcy,
recordmode,
deb_cre_dc,
CONVERT_CURRENCY( AMOUNT => deb_cre_dc,
SOURCE_UNIT => doc_currcy,
SCHEMA => 'SAPABAP1',
TARGET_UNIT => 'EUR',
REFERENCE_DATE => CONCAT(calmonth, '01'),
CLIENT => '100',
CONVERSION_TYPE => 'EURX')
AS deb_cre_lc,
record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
ERRORTAB= SELECT * FROM :ERRORTAB;
Wie Sie sehen, kann die Währungsumrechnung sehr einfach in SQLScript durchgeführt werden. So können Sie die Geschwindigkeitsvorteile der HANA Datenbank voll ausreizen. Dabei erlaubt die vordefinierte Funktion auch viele Konfigurationsmöglichkeiten.
Haben Sie Fragen zu SQLScript? Oder möchten Sie Ihre Transformationsroutinen auf SQLScript umstellen und suchen erfahrene Entwickler mit SQLScript Know-How? Zögern Sie bitte nicht, uns zu kontaktieren.
Weitere Information hierzu finden Sie im Buch "SQLScript für SAP HANA" (SAP PRESS, ISBN 978-3-8362-7408-1) von Jörg Brandeis