End2End : CDS – Analytic Apps

From DB to UI with CDS-Views, Fiori Elements or Analytic-Apps

Wir werden eine Datenanalyse nach dem Stern-Muster auf Basis von CDS-Views konzipieren
und Tools zur Präsentation und Wiederverwendung verwenden.
Als zugrunde liegendes Datenmodell werden wir ein angepaßtes IDES-Flight-Modell verwenden.
Wir verwenden Kopien von SAP-Tabellen :

ZTECUSTOM  -> SCUSTOM
ZTECARR    -> SCARR
ZTEPFLI    -> SPFLI
ZTEFLIGHT  -> SFLIGHT    
ZTEBOOK    -> SBOOK

Der Grund für die Kopien ist der voraussichtliche Änderungsbedarf der Tabellenstrukturen (nicht in diesem Beitrag ).
Die Änderungen können leichter auf kundeneigenen Tabellen als auf Tabellen im SAP-Namensraum durchgeführt werden.

Das Stern-Schema ist ein multidimensionales Datenmodell. Hierbei werden Dimensions-Tabellen (bzw. Views) um eine Fakten-Tabelle (View) herum angesiedelt.
Die Faktentabelle wird als Cube mit den Dimensionen der Dimensions-Tabellen ausgebildet. Die Dimensionstabellen werden über Schlüsselattribute mit der Faktentabelle verbunden.

Unsere Dimensions-Tabellen sind

 ZTECUSTOM : Kundeninformationen.
 ZTECARR   : Fluglinieninformationen
 ZTEPFLI   : Verbindungsinformationen
 ZTEFLIGHT : Fluginformationen

als Faktentabelle dient

 ZTEBOOK   : Flugbuchungsinformationen

CDS-Views wurden eingeführt, um die Ausführung von Daten(lese)-Operationen näher an die Datenbank und damit schneller durchführen zu können.
Dazu wurde ein Leitfaden, das Virtual Data Model, implementiert.

Das Virtual Data Model (VDM) zerlegt den Datenzugriff in mehrere Ebenen mit unterschiedlichen Aufgaben.
Es besteht aus zwei großen Blöcken :

Interface-View und Consumption View.

Das Interface-View zerfällt logisch in zwei Teile : Basic View und Composite View.
Der Basic View übernimmt den Zugriff auf die Datenbank, der Composite View organisiert die einzelnen Basic Views zu einer Gesamtview.
Der Composite View übergibt ihr Ergebnis dem Consumption View. Dessen Aufgabe ist die Bereitstellung der Daten für verschiedenene Client-Typen
(z.B. Oberflächen wie SAPUI5 oder Fiori-Elements, interne Analysetools (RSRT), externe Analysetools (Excel / Analysis for Office), ABAP-Programme ).
Hier können Filter implementiert werden oder Vorgaben für die Oberflächenverarbeitung (über UI-Annotations ) festgelegt werden.

Benamungsschema CDS-Views
Ein ABAP CDS-View besteht aus dem View selbst (der Über ADT … ) angelegt wird und einem ‚Zwilling‘, SQL-View genannt, der als DDIC-Beschreibung angelegt wird. Dieser unterliegt als solcher einer Namenslängenbeschränkung (14 Zeichen).
Um den Zusammenhang zwischen CDS-View und SQL-View zu offenbaren, empfiehlt sich eine analoge Namensgebung zwischen den beiden Views.
Ich habe mir folgendes angewöhnt :

ZCIB_<ViewName> : CDS-View Basic-View
ZSIB_<ViewName> : SQL-View Basic-View
ZCIC_<ViewName> : CDS-View Composite-View
ZSIC_<ViewName> : SQL-View Composite-View
ZCCA_<ViewName> : CDS-View Consumption-View Analytic
ZSCA_<ViewName> : SQL-View Consumption-View Analytic
ZCCO_<ViewName> : CDS-View Consumption-View Analytic zusätzlich als OData-Service
ZSCO_<ViewName> : SQL-View Consumption-View Analytic zusätzlich als OData-Service.

Aliase der Tabellenfelder
Die Aliase der Tabellenfelder werden als Feldnamen in die SQl-Views geschrieben. (Beispiel)

Es wird empfohlen, ein semantisches Wörterbuch für die Aliase der verwendeten Tabellenfelder zu verwenden.
Nach meiner Erfahrung empfiehlt sich ein sorgsamer Umgang sowohl mit der Benamung der Views als auch der Verwendung der Aliase, da sich insbesondere die SQL-View manchmal sehr störrisch bei Umbenennungen oder Löschversuchen verhalten. Versuchen Sie so wenig wie nötig Änderungen durchführen zu müssen.
Meines Wissens gibt es seitens SAP auch noch keine befriedigende Lösung für diesen Zustand.

Wir werden zunächst die Basic-Views erstellen.

ZCIB_CARRIER
View für Fluglinieninformationen

Wir erkennen folgende Annotationen :
@VDM: {viewType: #BASIC}:
@VDM-Annotationen sind z.Zt. rein informativ, haben also keine technische Auswirkung.
Diese Annotation gibt also einen Hinweis, dass die View einen direkten Zugriff auf eine transparente Tabelle darstellt.

@Semantics.currencyCode: true
Diese Anmerkung teilt dem System mit, dass das Feld „currcode“ als Währungsfeld behandelt wird.

@Analytics: dataCategory: #DIMENSION
Zeigt an, dass es sich um Dimensionsdaten handelt.

ZCIB_CARRIER
(Klicken zum Vergrößern)

ZCIB_CARRIER
Ausgabe über ADT- Open with Data Preview

ZCIB_CARRIER Datenausgabe
(Klicken zum Vergrößern)

ZCIB_CONN
View für Verbindungsinformationen

Anstelle des Namens oder Alias der Quelltabelle können wir auch $projection verwenden, um die Assoziation zu handlen.
Wenn man $projection verwendet, werden von der View nur die Felder der Tabellen verarbeitet, die in der Feldliste der View angegeben sind.

ZCIB_CONN
(Klicken zum Vergrößern)

ZCIB_CONN
Ausgabe über ADT- Open with Data Preview

ZCIB_CONN Datenausgabe
(Klicken zum Vergrößern)

ZCIB_CUSTOMER
View für Kundeninformationen

Hier ist über $projection eine weitere View assoziiert, die in diesem Fall
über eine Verknüpfung mit den Feldern country und Country die Ausgabe des CountryThreeLetterISOCode ermöglicht.
Dieser kann bei der Analyse als Dimensionsattribut verwendet werden.

ZCIB_CUSTOMER
(Klicken zum Vergrößern)

ZCIB_CUSTOMER
Ausgabe über ADT- Open with Data Preview

ZCIB_CUSTOMER Datenausgabe
(Klicken zum Vergrößern)

ZCIB_BOOK
View für Flugbuchungen

Sämtliche Felder der Tabelle sind in der Feldliste der View angegeben. (Wir werden später die Views über $projection zum Stern-Schema verknüpfen.)

ZCIB_BOOK
(Klicken zum Vergrößern)

ZCIB_BOOK
Ausgabe über ADT- Open with Data Preview

ZCIB_BOOK Datenausgabe
(Klicken zum Vergrößern)

Wir erstellen einen Composite View (ZCIC_FLBOOK01), um die oben erstellten Views zu Fakten- und Dimensionsdaten zu kombinieren.

Wir erstellen eine View mit der VDM-Annotation COMPOSITE
@VDM: {viewType: #COMPOSITE}

Hier werden Stammdaten und Transaktionsdaten zusammen gefügt.

@Analytics: dataCategory: #CUBE

ZCIC_FLBOOK01
(Klicken zum Vergrößern)

In der CDS-View wird die Annotation dataCategory auf #CUBE gesetzt, wodurch diese als Datenwürfel definiert wird.
Die Dimensionstabellen (Basis Views) sind diesem Cube sternförmig zugeordnet.
Hinweis : CDS-Views, die als #CUBE deklariert wurden, konnen nicht von Dimension-Views verwendet werden.
In der S/4HANA Analytics-Schicht kann nur eine CDS-View vom Typ CUBE verwendet werden.
In der CDS-View vom Typ #CUBE muss mindestens eine Kennzahl definiert werden.

 Text aus der SAP-Hilfe :

 #DIMENSION 	
This value indicates that the entity represents master data. Such a view can be used for replication and for queries.

 #CUBE 	
The #CUBE value (like #FACT) also represents factual data, but #CUBE does not have to be without redundancy.
 This means joins with master data are possible. Queries are usually built on top of #CUBE, where data is replicated from facts. 

Die im vorliegenden Modell fehlende Dimensions-View für zeitliche Abgrenzungen (Jahr, Monat) kann durch Erzeugen von Spalten mit aus Daten (Monat bzw. Jahr des Flugdatums) gewonnenen Inhalten ersetzt werden.

@EndUserText.label: ‚Booking Price‘
@DefaultAggregation: #SUM
@Semantics.amount.currencyCode: ‚Currency‘
forcuram as BookingPrice,

Die Annotation @DefaultAggregation: #SUM zeigt der CUBE-Struktur an, dass es sich bei diesem Feld um eine Kennzahl handelt.

@ EndUserText.label: „Luggage Weight“
Diese Anmerkung kann verwendet werden, um Feldern in Oberflächentools sprechende Bezeichnungen statt Standardtabellenfeldnamen zuzuweisen.

ZCIC_FLBOOK01
Ausgabe über ADT- Open with Data Preview

ZCIC_FLBOOK01
(Klicken zum Vergrößern)

Die Aufgabe von Consumption-Views ist es, UI- und Analyse-Tools Sichten zur Verfügung zu stellen, die von diesen verwendet werden können, um Berichte und Dashboards zu erstellen.
Diese Views ähneln einem CUBE-Sichten aus den Composite-Views. Sie werden mit für die Verwendung optimierenden Annotationen versehen.

ZCCA_FLBOOK_01

@VDM: {viewType: #CONSUMPTION}
Diese Annotation weit den View als Consumtion-View aus.

@Analytics.query: true
Mit dieser Annotation optimiert den Zugriff von Analyse-Tools auf den Cube.
Diese Annotation wird von Bex, Webi, Lumira, SAC – SAP Analytics u.ä. Tools benötigt.

@ AnalyticsDetails.query.axis: #ROWS
@ AnalyticsDetails.query.axis: #COLUMNS
Dieser Annotationen geben den Analyse-Tools Hilfestellungen wie die Ergebnisspalten zu behandeln sind.

ZCCA_FLBOOK_01
(Klicken zum Vergrößern)

ZCCO_FLBOOK_01

Dieses ist der gleiche View wie ZCCA_FLBOOK_01, jedoch mit der zusätzlichen Annotation @ OData.publish: true.

Durch diese Annotation kann der View nach dem Aktivieren im Gateway als OData-Service registriert werden.

ZCCO_FLBOOK_01
(Klicken zum Vergrößern)

Es gibt verschiedene Möglichkeiten, CDS-Views in Clients zu verwenden:

CDS-Views über OData auch können in SAPUI5-Anwendungen verwendet werden.
Wir haben einen Consumption-View (ZCCO_FLBOOK_01) bereits als OData-Service angelegt.
Diesen werden wir verwenden, um den View als Datenlieferanten für eine SAPUI5-Anwendung zu benutzen.

In der Gateway Service Maintainance steht der aktivierte View zum Registrieren bereit.

Aktivierten Service auswählen
(Klicken zum Vergrößern)

Beim Registrieren wird der Service einem passenden Paket zugeordnet. Danach steht er für die weitere Verwendung, z.B. in einer SAPUI5-Anwendung bereit.

Service Paket zuordnen
(Klicken zum Vergrößern)

Zur Erstellung der FIORI-Anwendung starten wird die WebIDE. In dieser legen wir ein neues Projekt aus Template an.

Projekt aus template erstellen
(Klicken zum Vergrößern)

Wir wählen List Report Application.

Applikationstyp List-Report wählen
(Klicken zum Vergrößern)

Als Data Connection wählen wir den registrierten Service (ZCCO_FLBOOK_01_CDS).

Data Connection festlegen
(Klicken zum Vergrößern)

Die im Consumption View angelegte UI-Annotationen können wir für die Oberflächen-Gestaltung verwenden.

Annotationen einbinden
(Klicken zum Vergrößern)

Für das Data Binding übernehmen wir die Feldbeschreibungen, die der View zur Verfügung stellt (ZCCO_FLBOOK_01).

OData-Struktur für Data Binding zur Verfügung stellen
(Klicken zum Vergrößern)

Wir können die Anwendung in einer dem Fiori-Lauchpad nachempfundenen Ablaufumgebung starten.

Anwendung in Launchpad Simulator starten
(Klicken zum Vergrößern)

Die Anwendung läuft in der Grundform. Die z.Zt. noch etwas dürftig ausgefallenen Funktionalitäten, wie Drill-Down, Vorbelegung der Spaltenausgabe, Filtermöglichkeiten, F4-Hilfen werden wir in einem weiteren Tutorial ergänzen.

Ansicht der Anwendung
(Klicken zum Vergrößern)

Für eine einfache CDS-View mit wenigen mathematischen Ausdrücken, die wir bereits in der CDS-Ansicht selbst konfiguriert haben, steht der Query Monitor RSRT zur Verfügung.
Dieser erwartet als View eine CONSUMPTION-View, die mit der Annotation @Analytics.query: true versehen wurde.

Sie starten die Auswertung, indem die ‚2C‘ gefolgt vom Namen der Consumption-View (in unserem Beispiel : 2CZSCA_FLBOOK_01) eingeben und klicken Sie auf „Ausführen“.

Consumption-View dem Query Monitor zur Verfügung stellen
(Klicken zum Vergrößern)

Wir erhalten einen mit unseren #ROWS und #COLUMNS Annotationen gestalteten Report, der im Query Monitor noch angepaßt werden kann.

Ergebnis der Auswertung im Query Monitor
(Klicken zum Vergrößern)

Eine CDS-View kann auch in Analysis for Office verwendet werden, um eine Ad-hoc-Analyse durch die Geschäftsbenutzer zu ermöglichen. Gehen Sie wie folgt vor :

  • Öffnen Sie Analysis for Office und stellen Sie eine Verbindung zum S4HANA-System her.
  • Suchen Sie nach der CDS-Ansicht des VDM-Typs „COMPOSITE“ und der Datenkategorie „CUBE“, die wir oben erstellt haben.

Die Daten sind jetzt für Ad-hoc-Analysen bereit.

Ein einfaches Programm, welches den Zugriff auf die Felder einer von einer Consumption-View zurückgegebenen Tabelle demonstriert.

*&---------------------------------------------------------------------*
*& Report zconsume_zcca_flbook_01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zconsume_zcca_flbook_01.

  Select *
    from ZCCA_FLBOOK_01
    into table @data(lt_itab)
      up to 10 rows
  .

  LOOP AT lt_itab INTO DATA(wa).
    write: / wa-carrid, 
             wa-connid, 
             wa-fldate, 
             wa-custcountry, 
             wa-weightofluggage. " ....
  ENDLOOP.

Ausgabe des Programms

AA  0017 19.12.2017 DE    19,4000
AA  0017 19.12.2017 IT    24,2000
AA  0017 19.12.2017 DE     9,4000
AA  0017 19.12.2017 AT    21,0000
AA  0017 19.12.2017 DE    25,2000
AA  0017 19.12.2017 DE    12,7000
AA  0017 19.12.2017 ES    20,4000
AA  0017 19.12.2017 DE    24,4000
AA  0017 19.12.2017 DE    11,8000
AA  0017 19.12.2017 DE     0,0000

–>