Hinzulesen von Feldern in einer Transformationsroutine

Hinzulesen von Feldern in einer Transformationsroutine
5 Sterne
8 Bewertungen

Häufig ist es nötig bestimmte Felder zu lesen die an einer anderen Stelle in BW verfügbar sind. So kann man zum Beispiel Belegpositionen um Informationen aus dem Belegkopf anreichern, um diese physisch zusammenzuführen. Oft werden auch Stammdatenattribute aus einem InfoObject nachgelesen. Dies geschieht in so genannten Transformationsroutinen.

So erleichtern Sie die Entscheidungsfindung und gewinnen einen umfassenden Überblick über Ihr Geschäft! Mit meinem neuen Buch lernen Sie, SAP für die Unternehmensplanung einzurichten, zu nutzen und zu erweitern.

Zwar bietet SAP von Haus aus eine Möglichkeit Stammdaten nachzulesen, allerdings können Sie die Performance steigern, wenn Sie die Routinen selbst programmieren. Generell gibt es vier Stellen um das entsprechende Coding anzubringen:

  • Startroutine – die Startroutine wird vor den Einzelroutinen (und ggf. Aggregation) ausgeführt. In der Startroutine haben Sie den Zugriff auf die Eingangstruktur der Daten SOURCE_PACKAGE, jedoch nicht auf die Zielstruktur RESULT_PACKAGE. Das heißt, dass Sie die Felder, die nicht in der Quelle enthalten sind, nicht direkt updaten können. Allerdings können Sie über eine InfoSource bereits alle Zielfelder in die Struktur aufnehmen. So können Sie auch auf Zielfelder in der Startroutine zugreifen.
  • Einzelroutine – in der Transformation können Sie für jedes Feld Coding hinterlegen. Diese Routine wird für jeden Datensatz aufgerufen, daher sollten Sie hier keine direkten Datenbankzugriffe ausführen. Bei komplexeren Logiken mit mehreren Feldern empfiehlt es sich, die Start- oder die Endroutine zu nutzen.
  • Endroutine – die Endroutine wird nach den Einzelroutinen (und ggf. Aggregation) ausgeführt. Nun haben Sie Zugriff auf die Zielstruktur RESULT_PACKAGE. Allerdings können Sie nun die Eingangstruktur nicht mehr verändern.
  • Expertenroutine – hier haben Sie Zugriff sowohl auf die Eingangstruktur der Daten SOURCE_PACKAGE als auch auf die Zielstruktur RESULT_PACKAGE. Allerdings müssen Sie sich in der Eigenentwicklung um alles selbst kümmern, zum Beispiel um das Aggregationsverhalten. Die grafische Zuordnung von Feldern entfällt.

Es empfiehlt sich, die Daten zuerst in der Startroutine möglichst schlank in eine interne Tabelle zu laden und danach in der Einzelroutine bzw. Endroutine auszulesen. Anbei ein Beispiel für das Hinzulesen des Erfassungsdatums einer Faktura.
Zuerst wird die Struktur und die interne Tabelle im globalen Deklarationsteil der Startroutine definiert. (Bei kleineren Quelltabellen können Sie auch direkt eine Tabelle des jeweiligen Typs anlegen. Der Performancevorteil, der durch eine schlankere Struktur entsteht, geht bei kleineren Quelltabellen durch das Anlegen dieser und das befüllen mit ausgewählten Daten verloren.) Um die Performance weiter zu steigern, können Sie die interne Tabelle buffern.


    TYPES:
    BEGIN OF tyt_invoice_item,
      bill_num TYPE /bi0/oibill_num,
      bill_item TYPE /bi0/oibill_item,
      createdon TYPE /bi0/oicreatedon,
    END OF tyt_invoice_item.

    DATA:
          ls_invoice_item TYPE tyt_invoice_item,
          lt_invoice_item TYPE
          HASHED TABLE OF tyt_invoice_item
          WITH UNIQUE KEY bill_num bill_item.

Unternehmensplanung mit SAP BPC

Planung mit SAP Business Planning and Consolidation leicht gemacht!

Mit diesem Buch lernen Sie, SAP BPC für die Unternehmensplanung einzurichten, zu nutzen und zu erweitern. Ich beantworte die zentralen Fragen von Projektteams, Beratern, IT und Anwendern – immer mit dem Blick auf die Anforderungen der Praxis.

In der eigentlichen Startroutine prüfen wir ob das SOURCE_PACKAGE Daten enthält und ob unsere interne Tabelle schon gefüllt ist. Danach füllen wir die interne Tabelle mit den Daten aus der aktiven Tabelle des DSOs.


    DESCRIBE TABLE source_package.
    IF sy-tfill > 0 AND lt_invoice_item[] IS INITIAL.
      SELECT bill_num
        bill_item
        createdon
        FROM /bic/a{DSO Name}00
        INTO TABLE lt_invoice_item
        FOR ALL ENTRIES IN source_package
        WHERE bill_num = source_package-bill_num
        AND bill_item = source_package-bill_item.
    ENDIF.

In der Einzelroutine lesen wir unsere interne Tabelle und schreiben die Werte fort.


    READ TABLE lt_invoice_item
    WITH TABLE KEY
    bill_num = source_fields-bill_num
    bill_item = source_fields-bill_item
    INTO ls_invoice_item.
    IF sy-subrc = 0.
      result = ls_invoice_item-createdon.
    ELSE.
      CLEAR result.
    ENDIF.

Weitere Beispiele für Transformationroutinen.

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.
Fordere SAP Performance Tricks an

Jetzt anfordern!

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

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.

Denis Reis ist Business Intelligence Consultant und gibt als Buchautor sein Wissen rund um den SAP Projektalltag weiter. Wenn Sie tatkräftige Unterstützung bei Ihren SAP BI Projekten benötigen, können Sie ihn über Xing, LinkedIn oder Facebook kontaktieren.
Des Weiteren unterrichtet er Projektmanagement und Controlling an der Wiesbaden Business School. Der aus Düsseldorf stammende Familienmensch zählt zu denjenigen, die auf komplizierte Darstellungen verzichten und das Ganze auf den Punkt bringen.

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Kommentar verfassen