Mythos oder Wahrheit: Feldroutinen in BW-Transformationen sind langsam

Nicht selten habe ich auch von erfahrenen SAP-BW-Beratern gehört, dass Feldroutinen aufgrund von schlechter Performance in BW-Transformationen nicht angewendet werden sollten. An der Stelle möchte ich dieser These widersprechen. Ich glaube, dass Feldroutinen schneller sind. Bei Feldformeln, die direkt auf einer HANA-Datenbank ausgeführt werden, ist das nicht zu bezweifeln. Aber auch ABAP-Feldroutinen und -Formeln sind performanter als Endroutinen.

Feldformeln und Feldroutinen – ein Beispiel

Dies will ich anhand des folgenden Beispiels verdeutlichen.

 

feldformeln-und-feldroutinen

 

Wir wollen für die Ausprägung einer Kennzahl ein Flag setzen, und zwar, wenn die Kennzahl gleich 1 ist.

 

flag-kennzahl-gleich-1

 

Die Feldformel dafür würde so aussehen.

 

feldformel

 

Um zu verstehen, wie Feldformeln oder Feldroutinen auf dem ABAP-Applikationsserver tatsächlich funktionieren, schauen wir uns das generierte Programm der Transformation an. Diese wird auch dann erzeugt, wenn eine Transformation nur direkte Zuweisungen enthält.

 

abap-applikationsserver

 

Ab dem folgenden Schritt im Programm werden die Datensätze verarbeitet.

 

verarbeitung-der-datensätze

 

Hierdurch wird deutlich, dass BW-Transformationen auch ohne Start- oder Endroutinen standardgemäß eine Schleife über jeden Datensatz durchführen. Innerhalb dieser Schleife wird dann unsere Feldroutine ausgeführt.

 

bw-transformation-schleife-ueber-datensatz

 

Welche Vorteile bringen Feldroutinen mit sich?

Für die Performance ist also zwischen einer direkten Zuweisung und einer einfachen Feldroutine kaum zu differenzieren. Aber auch der Unterschied zwischen einer Feld- und einer Endroutine wird an dieser Stelle offenbart. Denn wenn man Endroutinen schreibt, erzeugt man einen zusätzlichen, unter Umständen überflüssigen LOOP.

Man kann also daraus schließen, dass es – solange möglich – besser ist, Feld- anstatt Endroutinen anzuwenden, da man sich dadurch den überflüssigen LOOP spart.

Hinzu kommen noch zwei weitere relevante Aspekte.

Erstens ist es oft einfacher, Programmierlogik aus einer Feldroutine zu verstehen als aus einer Endroutine, da dort in der Regel nur Informationen für das bestimmte Feld enthalten sind. Allgemein gesprochen verbessert sich durch die Anwendung von Feldregeln und -routinen die Wartbarkeit im System.

Zweitens kann man durch den eingebauten und oft unbemerkten Ausführungsknopf Feldroutinen und Feldformeln ohne Weiteres debuggen. Dies führt zur Beschleunigung des Entwicklungsprozesses.

 

feldroutine

 

Performancegewinn durch Feldroutinen

An dieser Stelle ergibt sich außerdem die Frage, ob man Feldroutinen nicht so manipulieren sollte, dass diese Programmierlogik auch für weitere Felder ermittelt. Dies gilt für Situationen, in denen man normalerweise eine Endroutine nutzen würde.

So könnte man zum Beispiel, wenn man mehrere Datenfelder aus einem Lookup ermittelt, das Auslesen dieser – in einer in der Startroutine definierten Struktur – bei der ersten Feldroutine durchführen. Daraufhin werden in den restlichen Feldroutinen einfach die entsprechenden Strukturkomponenten zugewiesen. Auch wenn sich das nicht ganz „sauber“ anfühlt, könnte es vielleicht bei riesigen Datenmengen doch einen spürbaren Performancegewinn durch die Ersparnis der zusätzlichen Schleife in der Endroutine zur Folge haben.

Vielleicht hat das schon jemand von Euch ausprobiert? Gerne könnt Ihr Eure Erfahrungen in den Kommentaren mitteilen.

Views: 3874
clear