ABAP Table Expressions bieten eine moderne und kompakte Möglichkeit, mit internen Tabellen zu arbeiten. Wer kennt nicht die mühsamen LOOPs und READ TABLE-Befehle, die sich endlos durch den Code ziehen? Mit Table Expressions gehören diese umständlichen Konstrukte der Vergangenheit an. Diese moderne Technik verbessert nicht nur die Lesbarkeit, sondern auch die Performance des Codes erheblich.

Stellen wir uns eine typische Situation vor: Ein Entwickler namens Max sitzt an einem komplexen ABAP-Programm, das mit einer großen Menge an Flugbuchungsdaten arbeitet. Die bisherige Implementierung besteht aus verschachtelten Schleifen, endlosen READ TABLE-Operationen und manuellen Index-Prüfungen. Jede Optimierung kostet ihn Zeit und Nerven. Dann entdeckt er die Magie der Table Expressions – plötzlich kann er mit einer einzigen, klar strukturierten Zeile genau das erreichen, wofür er zuvor zehn Zeilen Code benötigt hat.

In diesem Artikel zeigen wir, wie genau das funktioniert und warum Markus von nun an auf Table Expressions schwört. Mit praktischen Beispielen und realistischen Anwendungsszenarien bringen wir Licht ins Dunkel und zeigen, wie einfach und elegant moderne ABAP-Programmierung sein kann.

Grundlagen der ABAP Table Expressions

Table Expressions ermöglichen den direkten Zugriff auf interne Tabellen mit einer kompakten und verständlichen Syntax. Sie vereinfachen das Lesen und Schreiben von Daten, indem sie komplexe Konstrukte auf elegante Weise ersetzen.

DATA(flugDatensatz) = flugListe[ carrid = 'LH' AND connid = '400' ].

Hier wird ein einzelner Datensatz aus der internen Tabelle flugListe basierend auf der Fluggesellschaft und der Verbindungsnummer ermittelt. Dies reduziert den Code im Vergleich zu herkömmlichen READ TABLE-Anweisungen erheblich.

CloudDNA Bücher

Beispiel: Direkter Zugriff auf einen Flug

Angenommen, wir haben eine interne Tabelle flugListe, die mit Daten aus SFLIGHT gefüllt ist:

SELECT * FROM sflight INTO TABLE flugListe.

Nun greifen wir gezielt auf einen bestimmten Flug zu:

DATA(flugDatensatz) = flugListe[ carrid = 'LH' AND connid = '400' ].
WRITE: / flugDatensatz-carrid, flugDatensatz-connid, flugDatensatz-price.

Falls der Datensatz nicht existiert, führt dieser Zugriff zu einer Ausnahme. Um das zu vermeiden, nutzen wir OPTIONAL:

DATA(flugDatensatz) = VALUE sflight( OPTIONAL flugListe[ carrid = 'LH' AND connid = '400' ] ).
IF flugDatensatz IS NOT INITIAL.
    WRITE: / flugDatensatz-carrid, flugDatensatz-connid, flugDatensatz-price.
ENDIF.

Durch die Verwendung von OPTIONAL verhindern wir Laufzeitfehler und können sicherstellen, dass das Programm reibungslos weiterläuft.

REDUCE vs. SQL Aggregatfunktionen

Die REDUCE-Funktion in ABAP bietet eine flexible Möglichkeit, Aggregationen über interne Tabellen durchzuführen. Dennoch gibt es Unterschiede zu SQL-Aggregatfunktionen, die berücksichtigt werden sollten.

Vorteile von REDUCE:

  • Kann direkt in ABAP auf internen Tabellen angewendet werden, ohne eine Datenbankabfrage auszuführen.

  • Erlaubt komplexe Berechnungen und Aggregationen innerhalb von Programmlogiken.

  • Bietet eine höhere Flexibilität, da auch nicht-SQL-basierte Berechnungen integriert werden können.

Nachteile von REDUCE gegenüber SQL-Aggregatfunktionen:

  • Führt die Aggregation auf Anwendungsebene durch, was mehr Speicher und Rechenleistung beanspruchen kann.

  • Ist nicht so performant wie SQL-Aggregate, da die Daten erst in den Arbeitsspeicher geladen werden müssen.

  • SQL-Aggregate wie SUM(), COUNT(), AVG() werden direkt auf der Datenbank ausgeführt, was eine deutlich schnellere Verarbeitung bei großen Datenmengen ermöglicht.

Daher sollte REDUCE vor allem dann verwendet werden, wenn bereits geladene interne Tabellen weiterverarbeitet werden müssen. Falls die Daten noch aus der Datenbank stammen, ist es meist effizienter, SQL-Aggregatfunktionen zu verwenden.

Beispiel: Summenbildung über Ticketbuchungen mit REDUCE

Falls eine Tabelle buchungsListe mit Ticketbuchungen existiert, kann die Gesamtzahl der gebuchten Plätze pro Flug berechnet werden:

DATA(gesamtplaetze) = REDUCE i( INIT sumPlaetze = 0
    FOR buchungDatensatz IN buchungsListe
    WHERE ( carrid = 'LH' AND connid = '400' )
    NEXT sumPlaetze = sumPlaetze + buchungDatensatz-seatsmax ).

WRITE: / 'Gesamtplätze:', gesamtplaetze.

Diese Methode ist besonders dann nützlich, wenn bereits eine interne Tabelle mit Buchungsdaten vorliegt und eine Aggregation erforderlich ist.

Beispiel: Summenbildung mit SQL-Aggregatfunktion

Alternativ kann dieselbe Berechnung direkt in der Datenbank ausgeführt werden:

SELECT SUM(seatsmax) INTO @DATA(gesamtplaetze) 
FROM sbook 
WHERE carrid = 'LH' AND connid = '400'.

WRITE: / 'Gesamtplätze aus SQL:', gesamtplaetze.

Diese Methode ist bei großen Datenmengen meist effizienter, da die Aggregation direkt in der Datenbank erfolgt.

Zusammenfassung

ABAP Table Expressions bieten eine elegante und leistungsfähige Möglichkeit, mit internen Tabellen zu arbeiten. Sie reduzieren Codezeilen, verbessern die Performance und erleichtern das Lesen des Codes erheblich. Besonders in Szenarien mit Datenfilterung und Aggregation sind sie eine hervorragende Alternative zu klassischen Schleifen und READ TABLE-Operationen.

Die Wahl zwischen REDUCE und SQL-Aggregatfunktionen hängt von der konkreten Situation ab. Wenn Daten bereits in einer internen Tabelle vorliegen und flexibel verarbeitet werden müssen, bietet sich REDUCE an. Soll jedoch eine performante Aggregation direkt auf der Datenbank erfolgen, sind SQL-Aggregatfunktionen in den meisten Fällen die bessere Wahl.

Durch die gezeigten Beispiele aus dem SAP Flugdatenmodell wird deutlich, wie vielseitig Table Expressions eingesetzt werden können. Die Kombination von FILTER, REDUCE, VALUE und anderen modernen ABAP-Funktionen ermöglicht eine präzisere und effizientere Datenverarbeitung, die sowohl in bestehenden als auch neuen Programmen von großem Nutzen ist.

Noch effizienter mit CloudDNA

Max, unser ABAP-Entwickler aus der Einleitung, hat seine Produktivität mit Table Expressions bereits erheblich gesteigert. Doch dann kommt der Moment, in dem er eine noch größere Herausforderung bewältigen muss: Eine komplexe Echtzeit-Datenintegration für eine global operierende Fluggesellschaft. Die Anforderungen sind hoch, der Zeitdruck immens – und genau hier kommt CloudDNA ins Spiel.

CloudDNA ist nicht nur ein Beratungsunternehmen, sondern eine Innovationsschmiede für moderne SAP-Technologien. Mit einem tiefen Verständnis für SAP BTP, ABAP und Cloud-Architekturen helfen die Experten von CloudDNA dabei, Unternehmen auf das nächste Level zu heben. Dank optimierter Berechtigungskonzepte, SSO-Strategien und performanten Schnittstellen sorgen sie dafür, dass auch hochkomplexe ABAP-Projekte nicht nur umgesetzt, sondern auf maximale Performance getrimmt werden.

Als Markus sich an das CloudDNA-Team wendet, wird schnell klar: Die Lösung liegt in einer cleveren Kombination aus SAP BTP, ABAP-Optimierungen und passgenauen Cloud-Integrationen. Nach nur wenigen Wochen ist die neue Architektur live – effizient, stabil und ready für die Zukunft.

Wenn du also an deine Grenzen stößt oder einfach wissen willst, wie du dein SAP-System fit für moderne Herausforderungen machst, dann schau bei CloudDNA vorbei. Denn moderne ABAP-Entwicklung endet nicht bei Table Expressions – sie beginnt dort erst richtig!