Queryvariablen vom Typ SAP HANA Exit

Ab SAP BW 7.50 besteht die Möglichkeit, Queryvariablen auch durch einen SAP HANA Exit in SQLScript zu implementieren. Damit kann die Variable vorbelegt oder berechnet werden, ohne dass der ABAP-Stack involviert ist. Das Vorgehen dazu habe ich in der aktuellen Ausgabe meines Buches „SQLScript für SAP HANA“ noch nicht beschrieben, weshalb ich es hier nachholen will.

Der große Vorteil dieser Queryvariablen liegt darin, dass die Ausführung komplett in der SAP HANA erfolgen kann. Damit ist es möglich, die Variablenlogik auch in den zu einer Query generierten, externen Views zu nutzen. Der Verarbeitungstyp SAP HANA Exit ist nur für Merkmalsvariablen mit genau einem Wert möglich. Diese können in den BW-Modeling Tools im BW angelegt werden. Der zughörige Code wird in einer AMDP-Klasse hinterlegt, die den BAdI RSROA_VAR_HANA_EXIT_BADI implementiert. Zuvor muss eine entsprechende Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT erfolgen. Das Vorgehen dazu ist am Ende dieses Beitrags unter „Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT“ erklärt.

Der Verarbeitungszeitpunkt des Exits hängt von der Eingabebereitschaft der Variablen ab. Im Falle einer eingabebereiten Variablen berechnet der Exit einen Vorschlagswert vor der Anzeige der Parameterscreens. Falls die Variable nicht eingabebereit ist, so wird der Exit nach Erfassung der Input-Variablen durchlaufen. Entsprechend kann sich die Logik im Exit darauf beziehen.

Beschreibung des Konzepts

Ein Exit sie alle zu berechnen

Leider erinnert das Konzept der SAP HANA Exits für Queryvariablen wieder stark an das alte, ABAP-basierte Vorgehen. Hierbei gab es genau einen Exit für alle Variablen. Entsprechend musste dann irgend wie verzweigt werden, je nachdem, welche Variable gerade gefüllt werden soll.

Das gleiche Konzept wurde auch bei der SAP HANA Variante umgesetzt. Das bedeutet, es muss stets abgefragt werden, für welche Variable jetzt die Werte beschafft werden sollen. Aber immerhin, es kann mehrere BAdI-Implementierungen geben.

Die AMDP-Methoden

IF_RSROA_VAR_HANA_EXIT~PROCESS

Die AMDP-Methode PROCESS berechnet den Wert der Variablen und liefert ihn im Parameter C_VALUE zurück. Dazu können die Informationen aus den IMPORT-Parametern verwenden werden. Allerdings sind die Parameter mit den anderen Variablen relativ generisch gehalten. Dies können Sie auch gut an dem Screenshot mit der Signatur der Methode sehen:

Schnittstelle / Signatur der AMDP-Methode PROCESS
Parameter der Methode IF_RSROA_VAR_HANA_EXIT~PROCESS

Neben den üblichen Informationen aus dem Kontext der Variablen kommen auch noch die Werte von bis zu 20 anderen Variablen mit in diesen Exit. Welche das genau sind, hängt wiederum von dem anderen Exit ab.

IF_RSROA_VAR_HANA_EXIT~GET_PROPERTIES

Diese AMDP-Prozedur liefert für jede Variable vom Typ SAP HANA Exit das passende Mapping von anderen Variablen zu den Parametern I_VAR_VALUE_XX der AMDP-Prozedur PROCESS. Die Signatur dafür sieht so aus:

Parameter der Methode IF_RSROA_VAR_HANA_EXIT~GET_PROPERTIES
Parameter der Methode IF_RSROA_VAR_HANA_EXIT~GET_PROPERTIES

Die Tabelle C_TS_VNAM_INDEX besteht aus zwei Spalten:

  • VNAM ist der Name der Variable, deren Wert in PROCESS übergeben werden soll
  • INDEX ist die zugehörige Nummer XX des Parameters I_VAR_VALUE_XX

Darüber hinaus wird dieser SAP HANA Exit noch aufgerufen, um zu ermitteln, ob die Implementierung für eine Kombination aus Reportingkomponente (I_COMPID) und Variable (I_VNAM) überhaupt aktiv ist. Entsprechend wird das Flag C_IS_ACTIVE gefüllt.

Ein einfaches Beispiel für einen SAP HANA Exit für eine Queryvariable

Die Bearbeitung des Quellcodes on AMDP-Prozeduren erfolge immer in den ABAP Development Tools (ADT) in der Eclipse Entwicklungsumgebung. Das folgende Beispiel bildet die Variable ZJB_CONCAT durch Verketteung der beiden Variablen ZJB_VAL1 und ZJB_VAL2 mit dem Präfix „Concatenated: „.

Die zugehörigen Variablen werden in den BW-Modeling Tools angelegt. Bei ZJB_CONCAT ist wichtig, den Verarbeitungstyp SAP HANA Exit zu wählen: 

Parameterabfrage für einen neue Variable
Parameterabfrage für einen neue Variable

 

Danach muss für unser Beispiel noch die Eingabebereitschaft ausgestellt werden, da wir uns auf zwei eingabebereite Variablen beziehen.

 

Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT

Benötigte Zeit: 20 Minuten.

Der Erweiterungsspot RSROA_VARIABLES_HANA_EXIT muss genau einmal implementiert werden. Dazu wird eine Erweiterungsimplementierung angelegt, ein BAdI sammt zugehöriger BAdI-Klasse implementiert. Das Vorgehen ist im Folgenden beschrieben.


  1. Implementierung des Erweiterungsspots

    Rufen Sie die Transaktion SE80 auf und wählen Sie das Erweiterungs-Infosystem. Wählen Sie den Objekttyp Erweiterungsspot aus und geben sie den Namen RSROA_VARIABLES_HANA_EXIT ein.
    Durch Rechtsklick auf den Namen öffnet sich ein Kontextmenü (siehe Screenshot). Wählen Sie dort Implementieren aus.

  2. Informationen für die Erweiterungsimplementierung erfassen

    Geben Sie einen Namen für die Erweiterungsimplementierung ein

  3. Implementierung des BAdI RSROA_VAR_HANA_EXIT_BADI anlegen

    Als nächstes müssen Sie die BAdI-Implementierung anlegen. Dazu geben Sie in dem Fenster einen geeigneten Namen für die BAdI-Implementierung und die zu generierende Klasse an.

  4. Implementierungsklasse für das Interface IF_RSROA_VAR_HANA EXIT anlegen

    In dem folgenden Pop-Up wählen Sie bitte aus, dass die Beispielklasse kopiert werden soll. Damit haben Sie alle notwendigen Interfaces samt etwas Beispielcode bereits in Ihrer BAdI-Klasse.

  5. Erweiterungsimplementierung aktivieren

    Jetzt müssen Sie Ihre Erweiterungsimplementierung samt BAdI-Klasse nur noch aktivieren.

  6. Status der Erweiterungsimplementierung prüfen

    Über die Checkbox können Sie festlegen, ob Ihre Erweiterungsimplementierung aktiv sein soll. Der aktuelle Status steht darunter.

HANA SQL-Konsole

Um die Sprache SQLScript zu lernen, ist die SQL-Konsole der unterschiedlichen Entwicklungsumgebungen (IDE) das ideale Werkzeug. In diesem Beitrag möchte ich kurz beschreiben, warum die SQL-Konsole nicht nur ein Werkzeug für Nerds ist. Sie ist den anderen Oberflächen, insbesondere der AMDP-Entwicklungsumgebung für BW-Transformationen zum Lernen von SQLScritp sogar erheblich überlegen.

Die zeitliche Trennung von Ursache und Wirkung

Meine Tante hatte in der Mitte des letzten Jahrhunderts das Programmieren von Computern an Großrechnern erlernt. Damals musste man seine Programme noch auf Lochkarten stanzen. Diese wurden dann als Stapel in das System eingelesen und verarbeitet. Die Studenten bekamen dafür im Rechenzentrum nachts jeweils eine kleine Zeitscheibe zugeteilt, da tagsüber der Rechner für wichtigere Aufgaben gebraucht wurde. Nachts wurden also die Programme ausgeführt und am nächsten Morgen konnten die Studenten dann Ihr Ergebnis abholen. Wenn ein Fehler aufgetreten ist, so musste dieser bis zu ihrer nächsten Zeitscheibe korrigiert werden und so weiter…

So kann man das Programmieren auch lernen. Aber schneller geht es, wenn man ein Programm nach Korrekturen immer wieder zeitnah ausführen kann. Ohne lange Wartezeiten und ohne komplizierte Eingabeverfahren der Daten. 

Fehler machen, Fehler erkennen, Fehler korrigieren, Wiederholen… und das innerhalb kurzer Zeit.

Kurze Feedbackzyklen beim SQLScript Programmieren

Und was hat das jetzt mit SQLScript zu tun? Wer die Sprache dadurch lernen will, indem er AMDP-Transformationsroutinen für das SAP BW schreibt, der hat ein ähnliches Problem. Um den Code auszuführen braucht es eine Menge Voraussetzungen:

  • Einen InfoProvider als Datenquelle
  • Einen InfoProvider als Ziel
  • Geeignete Daten in der Quelle
  • Die Transformation zwischen Quelle und Ziel
  • Eine zugehörige AMDP-Routine, z.B. eine Endroutine
  • Ein Datentransferprozess (DTP)

Und erst wenn wir das alles zusammen haben, können wir loslegen. Das Ergebnis können wir dann mit der SE16 im Datenziel betrachten. Und für die nächste Ausführung muss dann noch der vorherige Request gelöscht werden. Dazu kommt, dass zumindest bei manchen Systemständen nach Änderungen der AMDP-Routine noch der DTP erneut aktiviert werden muss… Nicht ganz so schlimm wie Lochkarte, aber zum lernen auch nicht wirklich gut. 

Für erfahrene SQLScript-Entwickler ist diese Umgebung durchaus zumutbar, da hier die Anzahl der Iterationen entsprechend geringer ist. Aber wenn man beispielsweise mal eben ausprobieren möchte, wie man am besten für ein Datum den darauffolgenden Kalendermonat ermittelt, der braucht eine geeignete Spielwiese ohne viel Overhead. 

Schneller lernen mit der SQL-Konsole

In der SQL-Konsole kann man direkt SQL-Komandos eingeben, die dann auf der HANA Datenbank ausgeführt werden. Um SQLScript-Code zu erfassen, muss dieses von einem anonymen Block umgeben werden. Aber das ist kein Hexenwerk und schnell gelernt. Den erfassten Code kann man immer wieder ausführen. 

Somit lassen sich Abfragen elegant und schnell wiederholen, bis sie das richtige Ergebnis liefern. 

Warum wird die SQL-Konsole so wenig genutzt?

Häufig ist die HANA SQL-Konsole für die Entwickler auf den SAP BW bzw. SAP NetWeaver Systemen nicht erreichbar, da nur eine Verbindung mit dem Anwendungsserver besteht und nicht mit der Datenbank. Auf diese haben traditionell nur Administratoren Zugriff. 

Eine Lösung dieses Problems kann ein kostenloses HANA-System auf der SAP Cloud Platform sein. Oder eine lokale Installation der SAP HANA, Express Edition. 

Wollen Sie mehr Informationen?

Unverbindliche Anfrage