Code-Snippet einer SAP-Anwendung, das eine grundlegende Ansicht für Bestellungen definiert. Der Fokus liegt auf der Verwendung von ABAP-Syntax zur Definition von Entitäten und deren Assoziationen. Ideal für Eubuleus Mitarbeitende, die sich mit SAP-Entwicklung und -Optimierung beschäftigen.
Startseite » Wissen » CDS View Association

CDS View Association: Der Schlüssel zu schnelleren Datenabfragen in SAP S/4HANA

Von Jeremia Girke
S/4HANA

ABAP CDS Views (Core Data Services) sind virtuelle Ansichten auf eine oder mehrere SAP-Datenbanktabellen. Sie bauen auf den allgemeinen Prinzipien von SQL Views auf und gehen doch weit darüber hinaus.

Ein Paradebeispiel dafür sind Assoziationen. Dieses Element stellt Verbindungen zwischen einzelnen CDS View Entities und damit zwischen verschiedenen Datenbanktabellen her. So können Beziehungen zwischen diesen modelliert und die Datenabfrage auf der HANA-Datenbank beschleunigt werden.

Wie genau das funktioniert und wie auch du von der verbesserten Leistung profitierst, erfährst du in diesem Artikel. 

  • CDS View Association ersetzen die traditionellen JOINs, denn sie stellen Daten schneller zur Verfügung und sind obendrein flexibler.
  • Assoziationen greifen Informationen nicht direkt ab, sondern stellen Beziehungen zwischen CDS Views Entities her. Dadurch wird der Datenzugriff selektiver.
  • Bei der Erstellung einer CDS View mit einer Assoziation ist die Einhaltung von Namenskonventionen und die Angabe der Kardinalität wichtig, damit Wartbarkeit und Performance-Vorteile sichergestellt werden. 

Was sind CDS Views Assoziationen?

Du hast Interesse an einem Umfassenden CDS-View-Quickguide? Hier entlang.

In den vergangenen Jahren hat SAP im Zuge von S/4HANA grundlegende Neuerungen auf den Weg gebracht. Eine der wesentlichsten Veränderungen ist die Festlegung auf die In-Memory-Technologie und die damit verbundene Einführung von CDS Views Entities.

Sie lösen die DDIC-basierten CDS Views ab und ermöglichen direkte Berechnungen von Daten speziell auf der HANA-Datenbank. Dank der Views werden Anweisungen und Logiken nicht erst auf dem ABAP Application Server umgesetzt, nachdem die Daten aus der Datenbank zur Verfügung gestellt wurden.

Vielmehr legen Entwickler Berechnungen, Berechtigungen, Filter und mehr in der Data Definition Language (DDL) in den ABAP Development Tools fest. Dieser Code wird direkt auf der HANA-Datenbank ausgeführt. Stichwort: Code Pushdown.

Die Logik wird damit zu den Daten gebracht – nicht mehr umgekehrt. Das steigert die Performance enorm.

In der Vergangenheit dienten JOINS dazu, Tabellen miteinander zu verknüpfen und die für die Ausführung der CDS Views benötigten Daten bereitzustellen. Mittlerweile wurden sie von Assoziationen abgelöst – aus gutem Grund.

3 entscheidende Vorteile von CDS View Association gegenüber JOINs

So viel vorweg: JOINs sollten möglichst nicht mehr verwendet werden. Stattdessen kommen Assoziationen zum Einsatz. Sie haben denselben Effekt, bieten dabei aber drei wesentliche Vorteile:

1. Performance

JOINs sind ein unbedingter Befehl. Sie laden immer alle Daten, sobald der CDS View abgefragt wird. Dabei ist es irrelevant, ob im Frontend am Ende wirklich jede Information benötigt wird. Das kann gerade bei komplexen Tabellen zu langen Laufzeiten führen.

Um die Performance bei der Datenbeschaffung zu steigern und die Stärken der HANA-Datenbank voll ausspielen zu können, wurden CDS View Associations eingeführt. Diese definiert die Beziehung zwischen Entity und Entity. Sie ist also an sich kein Befehl zur Datenbeschaffung.

association [1..*] to I_PurchaseOrderItemassociation [1..1] to I_PurchaseOrder<<view entity>>I_PurchaseOrder<<view entity>>I_PurchaseOrderItem<<table>>EKKO<<table>>EXPO

Wenn nun beispielsweise in einem CDS-View vier Verknüpfungen konfiguriert sind, der Benutzer allerdings nur Daten aus zwei Tabellen abruft, werden die Assoziationen für die anderen beiden Tabellen nicht ausgelöst. Dadurch wird im Vergleich zu regulären SQL-JOINs eine deutlich verbesserte Performance erzielt.

Die Rede ist deswegen auch von „JOIN on Demand“. Denn JOINs und somit die zugehörigen Daten werden erst ausgeführt, wenn sie tatsächlich benötigt werden.

Dafür wird zunächst mit dem AS SELECT FROM-Befehl die zu verwendende Quelldatenbank definiert. Die eigentliche Assoziation wird danach mit der Syntax ASSOCIATION TO eingeleitet. Sie legt die Zieldatenquelle fest, während AS den Namen der Assoziation hinterlegt.

Die ON-Bedingungen wiederum definiert nun die Verbindung zwischen der Quelldatenquelle und der Zieldatenquelle. Der Präfix „$projection“ verweist auf ein Feld des aktuellen View Entities. Sobald der Nutzer des CDS Views Daten aus der assoziierten Entität anfordert, wird der JOIN ausgelöst.

2. Flexibilität

Durch Path Expression wie _PurchaseOrderItem, _PurchaseOrderItem.DocumentType und _PurchaseOrderItem.Product können CDS Associations hintereinander referenziert werden. Jede nachfolgende Assoziation baut so auf der vorherigen auf. Komplexe Datenmodelle lassen sich dadurch in kleine, überschaubare CDS Views und Assoziationen zerlegen, die dann flexibel kombiniert und erweitert werden.

3. Effizienz

Über Annotationen werden aus den technischen Verknüpfungen der Assoziationen aussagekräftige Metadaten. Dadurch können die festgelegten Beziehungen zwischen CDS-Entitäten in Frameworks wie RAP, SAP Fiori oder OData genutzt werden. Das spart Entwicklungszeit.  

Best Practices beim Einsatz von Assoziationen

Damit Assoziationen und damit CDS Views möglichst schnell und reibungslos funktionieren sowie wartbar sind, gilt es einige Best Practices zu beachten:

Namenskonventionen

Für die Nachvollziehbarkeit ist es wichtig, sich auf einheitliche Namensregeln zu verständigen. Nur so kann jeder Entwickler sich schnell in die Zusammenhänge einarbeiten.

Bei der Benennung von Assoziationen sollte immer die Einzahl verwendet und CamelCases genutzt werden. Nach dem Unterstrich folgt der View-Name der Ziel-View ohne Präfix, zum Beispiel _SalesOrderItem, _PurchaseOrderItem, _BusinessPartnerAddress.

Kardinaliät / Cardinality

Die Kardinalität wird in eckigen Klammern hinter ASSOCIATION angegeben und beschreibt, wie viele Datensätze aus einer Tabelle einem Datensatz der anderen Tabelle zugeordnet werden können.

Eine falsche Angabe führt nicht gleich zu einer Error Message und stellt damit nicht per se die Funktionalität der Assoziation infrage. Allerdings beeinträchtigt sie zum einen die Lesbarkeit und Wartbarkeit des Modells.

Folgende Angaben sind zulässig:

[<min>..<max>]Bedeutung
[ 0..1 ][1]Einem Datensatz in der Primärtabelle kann null oder eine Zeile in der Zieltabelle zugeordnet werden.
[ 1..1 ]Einem Datensatz in der Primärtabelle kann genau eine Zeile in der Zieltabelle zugeordnet werden.
 [0..*], [*]Einem Datensatz in der Primärtabelle kann beliebig viele Zeilen oder keine Zeile in der Zieltabelle zugeordnet werden.
 [ 1..* ]Einem Datensatz in der Primär-Table kann mindestens eine Zeile in der Zieltabelle zugeordnet werden.

Wichtig: Die angegebene Kardinalität hat keinen Einfluss auf die Ergebnis-Menge.

Wichtige Syntax-Optionen

Um die Performance weiter zu optimieren, kann eine Assoziation und damit ein CDS View um weitere Association Fields angereichert werden. Wichtige Syntax sind in diesem Zusammenhang:

UNIONÜber UNION können die Ergebnismengen mehrere CDS Views zu einer Ergebnismenge vereint werden.Die Felder der vereinten Views müssen dabei gleich benannt sein und einen gleichen Datentyp haben.
WHEREDie WHERE-Klausel steuert, welche verknüpften Datensätze in der Ziel-View berücksichtigt werden sollen. Das schränkt den ausgegebenen Content ein. Eine weitere Filterung der Ergebnismenge kann mit AND definiert werden.
GROUP BYMit GROUP BY kann bestimmt werden, wie die Daten gruppiert und aggregiert werden, bevor sie mit der Quell-View verknüpft werden.
HAVINGDie HAVING-Syntax in Assoziationen wird eingesetzt, um Filterbedingungen zu definieren, nachdem eine Gruppierung (GROUP BY) durchgeführt wurde. So können unter anderem nur jene Gruppen von verknüpften Datensätzen zurückgegeben werden, die bestimmte Kriterien erfüllen 
ORDER BYDie ORDER BY-Syntax wird verwendet, um die Ergebnisse der verknüpften Daten aus der assoziierten Ziel-View zu sortieren, nachdem der dynamische JOIN ausgeführt wurde. 

How to: Eine CDS View Association erstellen

Ein CDS View mit Assoziation lässt sich im Editor für View (Entities) in der Eclipse EDI erstellen. Unter dem Punkt „New Data Definition“ werden zunächst die grundlegenden Informationen wie Name und die zugrundeliegende Datenbank hinterlegt. Im nächsten Fenster wird das Template „Define View with Association“ ausgewählt.

Alt-Text: Eubuleus Mitarbeiter:in arbeitet an der Definition einer CDS-Ansicht in einer Softwareumgebung. Der Mitarbeiter:in trägt einen violetten Hoodie und ist auf dem Bildschirm mit Code und Auswahlmöglichkeiten beschäftigt.

Quelle: SAP Community

Die Assoziation muss nicht zwingend über den Wizard erstellt werden, sondern kann auch einfach in den Quelltext bestehender CDS View (Entities) hinzugefügt werden.

Fazit

JOINs haben mit der Einführung von Assoziationen ihre Existenzberechtigung verloren. Sie sind flexibler und performanter. 

Damit sie ihr volles Potenzial ausspielen können, sollte allerdings auf bestimmte Parameter wie die Kardinalität ein genaues Auge geworfen werden. Daneben spielen Namenskonventionen eine wichtige Rolle, damit die Wartbarkeit gewährleistet wird.

Fest steht: Wer CDS Associations verwendet und die Best-Practice-Regeln beachtet, muss in Zukunft keine langwierigen Reports mehr ausführen.

FAQ