Exit-Klasse für BI IP Merkmalsbeziehungen anlegen

In diesem How-To zeige ich Ihnen wie Sie mit Exit-Klassen bestimmte Anforderungen für Merkmalsbeziehungen (engl. Characteristic Relationships) umsetzen können. Neben der Theorie zeige ich auch ein Paar konkrete Anwendungsbeispiele. Kenntnisse in der objektorienterten Programmierung und ABAP sind wünschenswert, aber nicht zwingend nötig.

Durch einen Erfahrungsaustausch lässt sich viel voneinander lernen. Tauschen Sie sich deshalb jetzt mit Experten auf Ihrem Gebiet aus und erweitern Sie Ihr Netzwerk! Treten Sie jetzt der exklusiven Gruppe von SAP Experten bei.

Grundsätzlich werden Merkmalsbeziehungen in der Planung für drei verschiedene Funktionen verwendet. Die möchte ich anhand eines Beispiels erklären. Angenommen, wir haben die Warengruppen Wasser und Saft sowie dazugehörigen Kundengruppen Wassertrinker und Safttrinker. Mit Merkmalsbeziehungen kann ich folgendes umsetzen:

  • Kombinationsprüfung (~CHECK) – Sie können prüfen ob die zu beplanende Kombination erlaubt ist. So können Sie zum Beispiel nicht die Kundengruppe Safttrinker für die Warengruppe Wasser planen. Die Kombination Wasser und Wassertrinker wäre dagegen erlaubt.

    Prüfung ob eine bestimmte Kombination von Merkmalswerten gültig ist

    Kombinationsprüfung

  • Kombinationsvorschlag (~CREATE) – Sie können auch eine Liste von allen gültigen Kombinationen erzeugen. Zum Beispiel für ein Planungslayout welches alle möglichen Kombinationen anzeigt.

    Das System kennt die gewünschten Kombinationen der entsprechenden Merkmale und kann diese automatisch vorschlagen.

    Kombinationsvorschlag

  • Merkmalsableitung (~DERIVE) – die dritte und die meiner Meinung nach wichtigste Funktion dient dazu, aus einem Merkmalswert einen Wert für ein anderes Merkmal abzuleiten. Dies ist wichtig, wenn dieses Merkmal nicht auf der Planungsebene vorhanden ist, aber trotzdem später im Reporting verwendet werden soll. Wenn Sie zum Beispiel die Warengruppe Wasser beplanen, wird im Hintergrund automatisch die Kundengruppe mit dem Wert Wassertrinker gefüllt.

    Eine Ausprägung eines Merkmals wird aus der Ausprägung eines anderen Merkmals abgeleitet.

    Merkmalsableitung

Jede eingabebereite Query und jede Planungsfunktion berücksichtigt automatisch die Merkmalsbeziehungen.

Für die Merkmalsbeziehungen über ein Exit müssen Sie eine Klasse mit entsprechenden Interfaces inmplementieren. Diese Klasse tragen Sie dann in dem Planning Modeler (TA RSPLAN) ein. Gehen Sie dabei wie folgt vor.
Rufen Sie die Transaktion SE80 (ABAP Workbench) auf. Legen Sie eine neue Klasse, z.B. ZCL_RSPLS_CR_EXIT_USER, an. Wählen Sie dazu im Dropdownmenü „Klasse / Interface“ aus und geben Sie den Namen der Klasse ein. Bestätigen Sie die Abfrage mit „Ja“.

Eine neue Exit Class anlegen

Exit-Klasse anlegen

Geben Sie im nächsten Fenster eine Beschreibung ein und entfernen Sie das Häkchen bei „Final„.

Eigenschaften der Klasse festlegen

Eigenschaften der Klasse

Tragen Sie in Eigenschaften die Klasse CL_RSPLS_CR_EXIT_BASE als Superklasse ein. Dadurch wird unsere Klasse „Erbe“ der SAP-Beispielklasse CL_RSPLS_CR_EXIT_BASE. Das Konzept der Vererbung erlaubt es, Klassen bei ihrer Definition von bereits vorhandenen Klassen abzuleiten.

Vererbung CL_RSPLS_CR_EXIT_BASE

Vererbung

Aktivieren Sie nun die Klasse und alle Objekte.
Als nächstes können wir folgende Methoden aus dem Interface IF_RSPLS_CR_METHODS redefinieren:

  • IF_RSPLS_CR_METHODS~CHECK – dient der Implementierung der Prüfung von Merkmalskombinationen
  • IF_RSPLS_CR_METHODS~CREATE – mit dieser Methode können Sie Merkmalskombinationen erzeugen
  • IF_RSPLS_CR_METHODS~DERIVE – dient der Ableitung von Merkmalen

Wählen Sie dazu die jeweilige Methode mit Rechtsklick aus und klicken Sie auf „Redefinieren“.

Methode redefinieren

Methode redefinieren

Diese drei Methoden möchte ich nun genauer erläutern.

Kombinationsprüfung (~CHECK)
Die Methode IF_RSPLS_CR_METHODS~CHECK dient zur Prüfung, ob bestimmte Merkmalskombinationen gültig sind.

Parameter zur Methode CHECK

Parameter zur Methode CHECK

Der Parameter I_S_CHAS enthält die Merkmale, die zurzeit beplant werden. Mithilfe des Parameters E_IS_VALID wird die Rückgabe ausgeführt ob ein Wert gültig ist oder nicht. Dieser Parameter ist vom Typ RS_BOOL und wird mit X gefüllt, falls der Satz gültig ist. Andernfalls wird er mit SPACE gefüllt. Wenn Sie bei ungültigen Sätzen eine Meldung ausgeben wollen, können Sie dies in der Tabelle E_T_MESG vornehmen. Diese Methode wird besonders bei Planungsfunktionen häufig aufgerufen. Daher liegt es nahe, die Ergebnisse zu puffern, vor allem, wenn die Prüfung komplex ist und mehrere Schritte erfasst. In der Klasse CL_RSPLS_CR_EXIT_BASE finden Sie ein Beispielcode für die Pufferimplementierung.

Kombinationsvorschlag (~CREATE)
Die Methode IF_RSPLS_CR_METHODS~CREATE generiert alle gültigen Merkmalskombinationen.

Parameter der Methode CREATE

Parameter der Methode CREATE

Die Tabelle I_TSX_SELDR enthält die Merkmalsselektionen, die zum Beispiel in der Query hinterlegt sind. Es dürfen nur Kombinationen erzeugt werden, die auch in der Selektion enthalten sind. Zu jedem Merkmal mit einer Selektions-Option CHANM enthält die Tabelle eine Zeile. Die Einschränkungen zu diesem Merkmal finden Sie im internen Format in der Tabelle RANGE-RANGE. Die Tabelle E_T_MESG kennen Sie schon aus der Methode CHECK. Daneben existiert zur Rückgabe der Kombinationen die Tabelle E_TH_CHAS. Diese Hash-Tabelle enthält die erzeugten Merkmalskombinationen.

Merkmalsableitung (~DERIVE)
In der Methode IF_RSPLS_CR_METHODS~DERIVE werden Merkmale gefüllt, die sich nicht auf der Aggregationsebene befinden.

Parameter der Methode IF_RSPLS_CR_METHODS~DERIVE

Parameter der Methode DERIVE

Da Merkmalswerte verändert werden wird ein Chaning-Parameter C_S_CHAS verwendet. Dieser Parameter enthält die Merkmalskombination. Die Merkmalswerte für die Quellmerkmale sind gefüllt. Die Methode muss aus diesen Werten alle Zielmerkmale ableiten und in die entsprechenden Felder des Parameters füllen. Die Werte für die Quellmerkmale dürfen nicht verändert werden.
Diese Funktion kann auf vielfältige Weise genutzt werden. So können Sie zum Beispiel mit einer Merkmalsableitung eine Change-Log Logik realisieren. Dadurch können Sie nachvollziehen, wer wann welchen Planwert geändert hat. Dazu füllen wir über ein Exit die Merkmale Benutzer 0USERNAME, Datum 0DATE und Uhrzeit 0TIME. Beachten Sie dabei, dass immer ein Quellmerkmal für den Exit angegeben werden muss. In diesem Fall könnte es ein beliebiges Merkmal sein, zum Beispiel die Fiskalperiode 0FISCPER.
In RSPLAN habe ich folgende Merkmalsbeziehung angelegt.

Merkmalsableitung über eine Exit-Klasse

Merkmalsbeziehung über eine Exit-Klasse

Das Coding für die redefinierte Methode IF_RSPLS_CR_METHODS~DERIVE könnte wie folgt aussehen.

METHOD if_rspls_cr_methods~derive.

  CLEAR e_t_mesg.
  FIELD-SYMBOLS: <ls_chavl> TYPE ANY.

*Benutzer füllen
  ASSIGN COMPONENT 'USERNAME' OF STRUCTURE c_s_chas TO <ls_chavl>.
  IF sy-subrc = 0.
    <ls_chavl> = sy-uname.
  ENDIF.

*Datum füllen
  ASSIGN COMPONENT 'DATE0' OF STRUCTURE c_s_chas TO <ls_chavl>.
  IF sy-subrc = 0.
    <ls_chavl> = sy-datum.
  ENDIF.

*Uhrzeit füllen
  ASSIGN COMPONENT 'TIME' OF STRUCTURE c_s_chas TO <ls_chavl>.
  IF sy-subrc = 0.
    <ls_chavl> = sy-uzeit.
  ENDIF.

ENDMETHOD.

Aktivieren Sie die Methode und alle dazugehörigen Objekte.
Wenn nun der User OPLANER (Operativer Planer) für den Buchungskreis 1000 einen Planwert speichert, werden Merkmalswerte für den Benutzer 0USERNAME, Datum 0DATE und Uhrzeit 0TIME automatisch im Cube hinterlegt.

Changlog Merkmalsableitung

Changelog Merkmalsbeziehungen

Wenn später der Benutzer SPLANER (Strategischer Planer) den geplanten Wert um 50 erhöht und überschreibt wird die Änderung auch im Cube getrackt.

Changelog

Änderungen werden getrackt

Ein anderer, sehr cooler, Anwendungsfall wäre die Ableitung von Kalendermonaten 0CALMONTH aus Fiskalperioden 0FISCPER (oder auch Fiskalperioden mit der Fiskaljahresvariante aus Kalendermonaten). SAP hat schon von Haus aus eine Reihe von Merkmalsbeziehungen für Zeitmerkmale implementiert. Diese laufen automatisch im Hintergrund ab. Sie bekommen davon nichts mit. Wenn Sie zum Beispiel das Merkmal Kalenderjahr/Monat 0CALMONTH in der Aggregationsebene haben und die Merkmale Kalendermonat 0CALMONTH2 sowie Kalenderjahr 0CALYEAR im Cube, dann werden diese automatisch gefüllt.
Allerdings funktioniert es nicht bei Fiskalperioden und Kalendermonaten. Was auch verständlich ist, schließlich sind die Fiskaljahre und die Fiskaljahresvarianten je nach Unternehmen sehr unterschiedlich. Mithilfe einer Exit-Klasse können Sie diese Einschränkung elegant umgehen. In diesem Fall könnte eine Pufferung nützlich sein. Ein Beispiel finden Sie in der Klasse CL_RSPLS_CR_EXIT_BASE.
Ich habe in dem Planning Modeler (TA RSPLAN) folgende Merkmalsbeziehung angelegt.

Merkmalsableitung Fiskalperiode Kalendermonat

Merkmalsableitung Fiskalperiode Kalendermonat

Angenommen, dass wir in unserem Unternehmen folgende Fiskaljahresvariante benutzen.

Merkmalsableitung Fiskaljahresvariante

Fiskaljahresvariante

Dann könnte das Coding für die redefinierte Methode IF_RSPLS_CR_METHODS~DERIVE so aussehen.

METHOD if_rspls_cr_methods~derive.

   CLEAR e_t_mesg.
   FIELD-SYMBOLS: <ls_chavlp> TYPE ANY,
                  <ls_chavlm> TYPE ANY.

 *Kalendermonat berechnen. Variante V9 2014001 = 201310; 2014012 = 201409
   ASSIGN COMPONENT 'FISCPER' OF STRUCTURE c_s_chas TO <ls_chavlp>.
   IF sy-subrc = 0.

     CASE <ls_chavlp>+4(3).
       WHEN 001 OR 002 OR 003.
         <ls_chavlp>+4(3) = <ls_chavlp>+4(3) - 3 + 12.
         <ls_chavlp>+0(4) = <ls_chavlp>+0(4) - 1.
       WHEN OTHERS.
         <ls_chavlp>+4(3) = <ls_chavlp>+4(3) - 3.
     ENDCASE.

 *Kalendermonat füllen
     ASSIGN COMPONENT 'CALMONTH' OF STRUCTURE c_s_chas TO <ls_chavlm>.
     IF sy-subrc = 0.
       CONCATENATE <ls_chavlp>+0(4) <ls_chavlp>+5(2)
       INTO
       <ls_chavlm>.
     ENDIF.

   ENDIF.

 ENDMETHOD.

Die Werte werden nun automatisch unter dem richtigen Kalendermonat gespeichert.

Ableitung 0calmonth 0fiscper

Ergebnis Merkmalsableitung Monate

Wenn wir nun auch die InfoObjekte Kalendermonat 0CALMONTH2 sowie Kalenderjahr 0CALYEAR in den Cube aufnehmen werden diese vom System automatisch gefüllt.

Mehrstufige Ableitung

Mehrstufige Ableitung

Diese ABAP Tricks machen Ihr Leben leichter!

  • In meinem Newsletter gebe ich eine Menge Tipps und Kniffe rund um ABAP.
  • Die Mini-Tutorials unterstützen Sie dabei, Software in ABAP effizienter zu entwickeln.
  • Praktische Anleitungen ermöglichen Ihnen schnelle Erfolge bei der Optimierung Ihrer Arbeit.
  • Bei der Anmeldung zu meinem Newsletter erhalten Sie das Buch „ABAP Tipps und Tricks“ als Willkommensgeschenk.
ABAP Tipps und Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. Ich hasse Spam genau so wie du.

Quellen:
Dirk Herzog (2012): ABAP-Programmierung für SAP NetWeaver BW – Kundeneigene Erweiterungen, 3. Auflage, Bonn
SAP Hilfe – Vererbung – Finale Klasse
SAP Hilfe – Merkmalsbeziehungen für Zeitmerkmale
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.

1 Kommentar

Trackbacks & Pingbacks

  1. […] und die Fiskaljahresvarianten, je nach Unternehmen, sehr unterschiedlich. Mithilfe einer Exit-Klasse können Sie diese Einschränkung jedoch elegant […]

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar zu Wie Sie automatische Merkmalsbeziehungen für Zeitmerkmale in SAP BW nutzen | Denis Reis Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.