How To SAP BI – Inverse Routinen (Invertierungsroutinen) in SAP BW
Bei Verwendung von Virtuellen InfoProvidern mit DTPs kann es, je nach Komplexität des Codings, notwendig sein mit inversen Routinen zu arbeiten. Diese ermöglichen es Selektionen zu übergeben oder auch zu erweitern. So ist es bei der Real Time Datenbeschaffung sinnvoll nur den aktuellen Tag aus der Quelle zu lesen, anstatt alle Daten abzufragen und erst bei der Anzeige in der Query zu filtern. Auch wenn verschiedene Objekte verwendet werden können inverse Routinen Abhilfe schaffen.
Betrachten wir die folgende Transformation.
Das Ziel verwendet ein anderes Merkmal für die Brand. Außerdem fehlen die Merkmale Kalenderjahr und Version. Unser Ziel ist es, Selektionen von Z_BRAND
und ZMNGBRND
zu mappen. Darüber hinaus wollen wir das aktuelle Jahr und die Plan-Version extrahieren. Daher erweitern wir die Selektionskriterien mithilfe der Invertierungsroutine.
Folgende Parameter sind wichtig:
Importing
i_th_fields_outbound
: Felder/InfoObjects für die Query-Strukturi_r_selset_outbound
: Selektionsbedingungen der Query
Changing
c_th_fields_inbound
: Felder bzw. InfoObjects der Zielstrukturc_r_selset_inbound
: Selektionsbedingungen des Zielsc_exact
: Mit diesem Parameter bestimmen Sie, ob die Transformation der Selektionskriterien exakt durchgeführt wird. Dies ist vor allem beim Aufruf der Bericht-Bericht-Schnittstelle (RRI) wichtig. Falls die Invertierung exakt ist, kann der direkte Aufruf erfolgen. Ist die Invertierung nicht exakt, dann erhält der Benutzer ein Selektionsbild.
Ein einfaches Beispiel der inversen Routine könnte so aussehen:
c_th_fields_inbound = i_th_fields_outbound.
c_r_selset_inbound = i_r_selset_outbound.
c_exact = rs_c_true.
Unser Beispiel ist jedoch ein wenig komplexer.
Zunächst lesen wir die Selektionen aus und konvertieren diese in eine flache Tabelle, mit der wir einfacher arbeiten können. Dabei werden die Selektionen für Z_BRAND
von dem InfoObjekt ZMNGBRND
übernommen. Außerdem erweitern wir die Selektion um das aktuelle Jahr und Version PLN
.
Planung und Reporting mit SAP Analysis leicht gemacht!
Lernen Sie, wie Sie mit SAP Analysis for Microsoft Office professionelle Berichte erstellen. Dieses Praxishandbuch erklärt Ihnen, wie Sie Ihre Daten auf vielfältige Weise auswerten und darstellen. Schritt-für-Schritt-Anleitungen mit zahlreichen Screenshots unterstützen Sie – von der Implementierung bis zur Anwendung.
Das komplette Coding sieht wie folgt aus. Dieses können Sie in der Startroutine der Transformation platzieren. Scrollen Sie dabei nach unten bis zum *$*$ begin of inverse routine
Kommentar.
*$*$ begin of inverse routine - insert your code only below this line*-*
TYPE-POOLS : sbiwa.
TYPES: BEGIN OF complexrange_type,
chanm TYPE rschanm,
simplerange_table TYPE RANGE OF rschavl,
END OF complexrange_type.
DATA: lt_complexrange_table TYPE STANDARD TABLE OF
complexrange_type,
ls_complexrange_line LIKE LINE OF lt_complexrange_table,
lt_dimension_table TYPE rsmds_tr_dimensions,
lt_flatrange_table TYPE sbiwa_t_select,
ls_flatrange_line LIKE LINE OF lt_flatrange_table.
FIELD-SYMBOLS: <ls_dimension_line> LIKE LINE OF lt_dimension_table,
<ls_complexrange_line> LIKE LINE OF
lt_complexrange_table,
<ls_simplerange_line> TYPE LINE OF
complexrange_type-simplerange_table,
<fs_line> LIKE LINE OF lt_flatrange_table.
* read selections
TRY.
lt_dimension_table = i_r_selset_outbound->get_dimensions( ).
CATCH cx_rsmds_dimension_unknown
cx_rsmds_input_invalid
cx_rsmds_input_invalid_type
cx_rsmds_sets_not_compatible
cx_rsmds_syntax_error.
ENDTRY.
* convert to range
LOOP AT lt_dimension_table ASSIGNING <ls_dimension_line>.
CLEAR ls_complexrange_line.
TRY.
CALL METHOD i_r_selset_outbound->to_ranges
EXPORTING
i_r_dimension = <ls_dimension_line>
CHANGING
c_t_ranges = ls_complexrange_line-simplerange_table.
ls_complexrange_line-chanm = <ls_dimension_line>->get_name( ).
APPEND ls_complexrange_line TO lt_complexrange_table.
CATCH cx_rsmds_dimension_unknown
cx_rsmds_input_invalid
cx_rsmds_input_invalid_type
cx_rsmds_sets_not_compatible
cx_rsmds_syntax_error.
ENDTRY.
ENDLOOP.
* prepare range for inbound selection
LOOP AT lt_complexrange_table ASSIGNING <ls_complexrange_line>.
LOOP AT <ls_complexrange_line>-simplerange_table ASSIGNING
<ls_simplerange_line>.
ls_flatrange_line-sign = <ls_simplerange_line>-sign.
ls_flatrange_line-low = <ls_simplerange_line>-low.
ls_flatrange_line-high = <ls_simplerange_line>-high.
ls_flatrange_line-option = <ls_simplerange_line>-option.
IF <ls_complexrange_line>-chanm EQ '/BIC/Z_BRAND'.
ls_flatrange_line-fieldnm = '/BIC/ZMNGBRND'.
ELSE.
ls_flatrange_line-fieldnm = <ls_complexrange_line>-chanm.
ENDIF.
APPEND ls_flatrange_line TO lt_flatrange_table.
ENDLOOP.
ENDLOOP.
* enhance selections:
* only current year
ls_flatrange_line-low = sy-datum(4).
ls_flatrange_line-sign = 'I'.
ls_flatrange_line-option = 'EQ'.
ls_flatrange_line-fieldnm = 'CALYEAR'.
APPEND ls_flatrange_line TO lt_flatrange_table.
* only plan version
ls_flatrange_line-low = 'PLN'.
ls_flatrange_line-sign = 'I'.
ls_flatrange_line-option = 'EQ'.
ls_flatrange_line-fieldnm = 'D_NW_VERS'.
APPEND ls_flatrange_line TO lt_flatrange_table.
* convert range to inbound
TRY.
c_r_selset_inbound =
i_r_universe_inbound->create_set_from_ranges(
i_fieldname_dimension = 'FIELDNM'
i_t_ranges = lt_flatrange_table ).
c_exact = rs_c_true.
CATCH cx_rsmds_dimension_unknown
cx_rsmds_input_invalid
cx_rsmds_input_invalid_type
cx_rsmds_sets_not_compatible
cx_rsmds_syntax_error.
* Normally, should not occur
*If the exception occurs request all values from source for this
*routine
*to be on the save side
c_r_selset_inbound = cl_rsmds_set=>get_universal_set( ).
c_exact = rs_c_false. "Inversion is no longer exact
ENDTRY.
*$*$ end of inverse routine - insert your code only before this line *-*
Nun wollen wir testen, ob unsere Routine funktioniert.
In der Quelle haben wir folgende Daten.
Nach dem Aufruf liefert der virtuelle Cube folgende Werte.
Und auch die Weitergabe der Selektionen funktioniert ohne Probleme.
Ihre User beklagen sich über langsame Berichte?
- In meinem Newsletter lernen Sie, wie Sie Abhilfe schaffen.
- Entdecken Sie die Möglichkeiten der Performanceoptimierung.
- Praktische Anleitungen ermöglichen Ihnen schnelle Erfolge bei der Optimierung von SAP Systemen.
- Viele Tipps und Tricks zu SAP BI Themen.
- Holen Sie die maximale Performance aus Ihrem SAP BI!
- Bei der Anmeldung zu meinem Newsletter erhalten Sie das Buch „High Performance SAP BI“ als Willkommensgeschenk.
Quellen und weiterführende Literatur:
SAP AG – Parameter der Invertierungsroutine
Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!