Sie verwenden keine aktuelle Browser-Version. Deshalb wird die Webseite möglicherweise nicht korrekt dargestellt. Hier finden Sie weitere Hinweise.

HDB Tabellenpflege im BW – am Beispiel einer Pruning Tabelle

SAP Analytics Featured Image

Inhaltsverzeichnis

Ausgangssituation

Beim Einsatz von HANA nativer Modellierung auf der Datenbank eines SAP BW Systems stellt sich immer wieder die Frage, ob HANA Datenbank (HDB) Tabellen angelegt und verwendet werden sollen. Die Entscheidung fällt oft gegen den Einsatz aus, da die Applikationsschicht des BW einige Vorteile insbesondere für die Datenbeladung und Pflege bietet. In einigen Fällen, wie zum Beispiel bei Pruning Tabellen für HANA Calculation Views, ist es jedoch nicht möglich eine Tabelle im ABAP Dictionary zu verwenden, so dass an einer HDB Tabelle kein Weg vorbeiführt. 

Das Anlegen der Tabelle ist jedoch noch nicht alles. Die Tabelle muss auch mit Daten gefüllt, transportiert und gegebenenfalls zu einem späteren Zeitpunkt um weitere Daten ergänzt werden. Hierzu sind entsprechende Berechtigungen notwendig, die in vielen SAP BW on HANA und BW4/HANA Systemen erst noch gesondert implementiert werden müssten. Dies erfordert einen entsprechenden Aufwand, der jedoch mit ein paar Tricks vermeidbar ist. 

Dieser Blog beschäftigt sich mit der Möglichkeit HDB Tabellen aus dem BW heraus anzulegen und deren Inhalte per Synchronisation aus dem BW heraus zu pflegen.

Vorgehen

Dazu wird zunächst im BW eine Tabelle mit der gleichen Struktur angelegt, wie sie die HANA native Tabelle auch haben wird. In diesem Beispiel heißt die Tabelle Z_PRUNING. Da einige der bei Pruning Tabellen fest definierten Spaltennamen im BW reservierte Wörter sind, wird allen Spaltennamen ein „Z“ vorangestellt.  

Für diese Tabelle wird mit einen Standard Pflegedialog angelegt mit dem Datensätze erstellt, verändert und auch wieder gelöscht werden können. Alternativ ist natürlich auch eine Pflege über sämtliche andere Wege, wie zum Beispiel per ABAP Programm, BW Datenfluss oder Fiori Interface denkbar. 

Im BW wird dann bei jeder Änderung oder in regelmäßigen Abständen ein anzulegendes ABAP Programm eingeplant, das die folgenden Schritte zur Synchronisation der BW Tabelle mit der HANA Tabelle übernimmt:

  1. Sofern die HDB noch nicht existiert, anlegen dieser unter Verwendung von HANA nativer DDL. 
  2. Löschen aller Daten aus der HANA Tabelle unter Verwendung von HANA nativer DML. 
  3. Kopieren aller Datensätze aus der entsprechenden ABAP Tabelle in die HANA Tabelle unter Verwendung von HANA nativer DML.

Für die HANA nativen DDL und DML Statements wird jeweils die Klasse cl_sql_statement verwendet.

Zusammenfassung

Auf diese Weise ist es einfach möglich die BW Funktionalitäten zur Tabellenpflege zu nutzen und die Werte der Tabelle mit einer entsprechenden HDB Tabelle zu synchronisieren. Andere HANA nativen Objekte, wie zum Beispiel Calculation Views können dann darauf zugreifen und die Informationen daraus verwenden.

Anhang/Coding

Struktur der BW-Tabelle Z_PRUNING:

Spaltenname Datentyp 
ZKEY NUMC 4 
ZSCHEMA CHAR 100 
ZCALC_SCENARIO CHAR 200 
ZINPUT CHAR 200 
ZCOLUMN CHAR 20 
ZOPTION CHAR 10 
ZLOW_VALUE CHAR 20 
ZHIGH VALUE CHAR 20 

ABAP Quellcode für das Programm zur Synchronisation der HDB Tabelle:

REPORT Z_UPDATE_PRUNING_TAB. 
 
CONSTANTS: c_hdb_tablename  TYPE STRING VALUE ‚Z_PRUNING_TABLE_01‘, 
           c_abap_tablename TYPE STRING VALUE ‚Z_PRUNING‘. 
 
DATA: lv_sql_string    TYPE string, 
      lv_count         TYPE int8, 
      l_abap_table     TYPE Z_PRUNING, 
      lt_abap_table    TYPE TABLE OF Z_PRUNING, 
      o_native_sql     TYPE REF TO cl_sql_statement, 
      o_sql_result_set TYPE REF TO cl_sql_result_set, 
      o_ref_count      TYPE REF TO DATA. 
 
  GET REFERENCE OF lv_count INTO o_ref_count. 
  CREATE OBJECT o_native_sql TYPE cl_sql_statement. 
 
* Check if hdb table already exists 
  CLEAR lv_sql_string. 
  CONCATENATE ‚SELECT “1“ FROM sys.tables WHERE SCHEMA_NAME = “_SYS_BIC“ AND TABLE_NAME = “‘ c_hdb_tablename ““ INTO lv_sql_string. 
  CALL METHOD o_native_sql->execute_query 
    EXPORTING 
      STATEMENT = lv_sql_string 
      HOLD_CURSOR = ‚X‘ 
    RECEIVING 
      RESULT_SET = o_sql_result_set. 
 
  o_sql_result_set->set_param( o_ref_count ). 
 
  IF o_sql_result_set->next( ) = 0. 
* If no entry was read, hdbtable doesn’t exist. Create Table. 
    CLEAR lv_sql_string. 
    CONCATENATE ‚CREATE COLUMN TABLE „_SYS_BIC“.“‚ 
                c_hdb_tablename ‚“ (‚ 
                ‚ „SCHEMA“ VARCHAR(20),‘ 
                ‚ „CALC_SCENARIO“ VARCHAR(100),‘ 
                ‚ „INPUT“ VARCHAR(200),‘ 
                ‚ „COLUMN“ VARCHAR(20),‘ 
                ‚ „OPTION“ VARCHAR(10),‘ 
                ‚ „LOW_VALUE“ VARCHAR(20),‘ 
                ‘ „HIGH_VALUE“ VARCHAR(20)‘ 
                ‚ )  UNLOAD PRIORITY 0 AUTO MERGE‘ INTO lv_sql_string. 
 
    CALL METHOD o_native_sql->execute_ddl 
      EXPORTING 
        STATEMENT = lv_sql_string. 
 
    IF sy-subrc NE 0. 
      EXIT. 
    ENDIF. 
  ENDIF. 
 
* Delete all data in hdb table 
  CLEAR lv_sql_string. 
  CONCATENATE ‚DELETE FROM „_SYS_BIC“.“‚ c_hdb_tablename ‚“ WHERE 1=1‘ INTO lv_sql_string. 
  CALL METHOD o_native_sql->execute_update 
    EXPORTING 
      STATEMENT = lv_sql_string. 
 
* Select data from abap table into internal table 
  SELECT * 
    FROM (c_abap_tablename) 
    INTO TABLE lt_abap_table. 
 
  LOOP AT lt_abap_table INTO l_abap_table. 
* Loop at abap data and insert into hdb table 
    CLEAR lv_sql_string. 
    CONCATENATE ‚INSERT INTO „_SYS_BIC“.“‚ 
                c_hdb_tablename ‚“ values(“‘ 
                l_abap_table-zschema “‘,“‘ 
                l_abap_table-zcalc_scenario “‘,“‘ 
                l_abap_table-zinput “‘,“‘ 
                l_abap_table-zcolumn “‘,“‘ 
                l_abap_table-zoption “‘,“‘ 
                l_abap_table-zlow_value “‘,“‘ 
                l_abap_table-zhigh_value “‘ )‘ INTO lv_sql_string. 
 
    CALL METHOD o_native_sql->execute_update 
      EXPORTING 
        STATEMENT = lv_sql_string. 
 
  ENDLOOP. 

Nehmen Sie Kontakt zu uns auf!

    Mit der Erhebung, Verarbeitung und Nutzung meiner personenbezogenen Daten zur Bearbeitung meiner Anfrage erkläre ich mich einverstanden. Ich kann mein Einverständnis jederzeit ohne Angabe von Gründen widerrufen. Weitere Informationen finden Sie in unserer Datenschutzerklärung.