Cheat Sheet CDS ABAP
Cheat Sheet CDS ABAP
Die perfekte Ergänzung zu den Schulungen von Brandeis Consulting
Dieser Spickzettel enthält eine umfassende Übersicht über Syntax, Beispiele und Beschreibungen zu CDS ABAP. Wir verwenden diese auch in unserer CDS ABAP Schulung bei Brandeis Consulting.
Diese Übersicht zeigt nur die wichtigsten Aspekte und ist nicht komplett. Für Details bitte den Links zur SAP Dokumentation oder den verlinkten Quellen folgen. Die Beispiele beziehen sich auf die Folien aus der Schulung.
Bei CDS ABAP spielt grundsätzlich das Release des ABAP Servers eine große Rolle, da hier noch viel in Bewegung ist. Die Beispiele wurden auf Release 7.53 erstellt. Bei einem Blick in die Dokumentation sollten Sie stets exakt Ihren Versionsstand wählen.
Unter der Linie sind Referenzen zur
- SAP Doku – Ein Link auf das entsprechende Kapitel der aktuellsten ABAP for Cloud Dokumentation
- Blogs & Artikeln
3 Objekte von klassischen CDS Views
Für CDS Views werden drei unterschiedliche Objekte im Objektkatalog (Tabelle TADIR) angelegt:
- DDL-Datei – Die Quelltextdatei , die mit den ADT in Eclipse angelegt und bearbeitet wird. Nur dieses Objekt steht in der Objektliste der Transportaufträge (Objekttyp DDLS).
- CDS-Entität – Das CDS Objekt, das alle Eigenschaften des Views, inklusive der Annotationen, Assoziationen und Berechtigungsprüfung repräsentiert. Dieses Objekt wird in ABAP Programmen verwendet.
- SQL-Datenbankview – Ein Datenbankview, der auch im DDic als View angezeigt wird, aber aus ABAP Perspektive nicht genutzt werden soll.
Die DDL-Datei und die CDS-Entität haben meistens den gleichen technischen Namen. Der SQL-Datenbankview muss einen anderen Namen als die CDS-Entität haben, da beide im gleichen Namensraum befinden.
Mit dem Release 7.55 ist neben dem klassischen CDS View ein neuer Objekttyp hinzugekommen, die CDS View Entity . Dieser hat keinen SQL-Datenbankview. Es wird von der SAP empfohlen, diese Objekte zu verwenden, falls man auf dem entsprechenden Systemstand ist.
Syntax Grundlagen
Schlüsselwörter in CDS ABAP werden entweder
- komplett in GROSSBUCHSTABEN oder
- komplett in Kleinbuchstaben oder
- der erste Buchstabe groß und der Rest klein geschrieben
Bezeichner von Tabellen, Views oder Spalten sind nicht case-sensitive. Sie dürfen maximal 30 Zeichen lang sein und bestehen aus Buchstaben, Zahlen, Unterstrich und Schrägstrich.
Zeichenketten werden als Literale im Quelltext in Hochkommata gesetzt. Numerische Literale ohne Dezimaltrennzeichen sind je nach Wert vom Typ ABAP.INT1
bis ABAP.INT8
. Numerische Literale mit dem Punkt als Dezimaltrennzeichen sind vom Datentyp ABAP.FLTP
.
Kommentare können entweder am Zeilenende mit einem doppelten Schrägstrich //
beginnen oder als Blockkommentare zwischen /*
und */
platziert werden.
Whitespace spielt keine große Rolle und dient in erster Linie zum Formatieren, solange die Semantik eindeutig ist.
Annotationen
Mit Annotationen wird der Quelltext um Meta-Informationen angereichert. Sie sind zum einen für die Generierung der Views und zum anderen für die Konsumenten der CDS ABAP Objekte relevant. Jedes Framework hat seine eigenen Annotationen für die CDS Views, z.B. :
@Analytics
@Consumtion
@EnterpriseSearch
@ObjectModel
@OData
@UI
In diesem Plakat sind die zu den Themen wichtigsten Annotationen erwähnt. Die komplette Liste mit über 800 Annotationen finden Sie in der SAP Dokumentation.
Syntax der Annotationen
@Annotation: <value>
@Annotation.SubAnnotation.
SubSubAnnotation: <value>
@Annotation: { SubAnnotation1: <value1>,
SubAnnotation2: <value2> }
Werte einer Annotation
- Einzelne Literale, z.B. die Referenz auf einen anderen Feldnamen
- Einzelwerte mit vorab definierten Festwerten. Diese beginnen mit einem
#
und werden von der Code-Completion vorgeschlagen. - Einzelne logische Werte
true
undfalse
- Arrays als Liste von Werten oder SubAnnotationen, in eckigen Klammern mit Kommata getrennt
Syntaxübersicht CDS Views
@AbapCatalog.sqlViewName: 'SQLDBView'
DEFINE VIEW CDSEntity
[<ParameterDefinition>]
AS SELECT FROM <sources>
[<Joins>]
[<Associations>]
{
[KEY] <Expression> [ AS <fieldname> ]
[,...]
}
[WHERE - clause]
[GROUP BY - clause]
[HAVING - clause]
[UNION - operation]
Die hier beschriebene Syntax ist weitgehend identisch für CDS Views und CDS View Entities. Es gibt zwei wichtige Unterschiede bei den View Entities:
- Die Annotation
@AbapCatalog.sqlViewName
entfällt - Statt
DEFINE VIEW
heißt esDEFINE VIEW ENTITY
Ausdrücke in der Feldliste
Die Feldliste besteht aus Ausdrücken. Das sind meistens Feldnamen der Quellen. Es können aber auch andere Elemente darin vorkommen. Möglich sind:
- Feldnamen – Falls wegen JOINs mehrere Tabellen involviert sind, sollte stets die Quelle mit einem Punkt davor genannt werden:
<Quelle>.<Feldname>
- SQL-Funktionen
- Literale
- Session-Variablen
- Aggregatausdrücke
- Operatorausdrücke
- CASE-Ausdrücke
- Pfadausdrücke
- Parameter
Die Ausdrücke können ineinander geschachtelt werden. Beispielsweise kann ein Parameter als Vergleichswert in einem CASE
- Ausdruck verwendet werden.
Die einzelnen Felder werden durch Komma getrennt. Falls sich nicht auf einen Feldnamen bezogen wird, ist ein mit AS
vergebener Aliasname für das Feld Pflicht. Das Schlüsselwort KEY
markiert den Schlüssel.
Brandeis Consulting
Schulungen und Beratung vom Autor des Buches SQLScript für SAP HANA. Bei Fragen zur SQLScript, CDS ABAP oder unseren Schulungen einfach eine Mail an info@brandeis.de schicken.
(C) Brandeis Consulting GmbH
Datentypen in CDS ABAP und Casting
In den CDS Entitäten kann man sich auf die Datenelemente des Data Dictionary beziehen oder direkt auf die ABAP Datentypen. Die Datentypen müssen immer exakt passen, sonst gibt es beim Aktivieren des CDS ABAP Objektes Fehlermeldungen. Zum Konvertieren der Datentypen dient die SQL-Funktion CAST
:
CAST( <Ausdruck> AS <Datentyp> [PRESERVING TYPE])
Die ABAP Datentypen werden dabei mit abap.<Datentyp>
angegeben, also Beispielsweise
abap.int4
abap.char(<Länge>)
abap.dec(<Länge>, <Nachkommastellen>)
Je nach Datentyp muss die <Länge>
und ggf. auch die Anzahl <Nachkommastellen>
in Klammern angegeben werden. Falls der Datentyp des <Ausdrucks>
technisch identisch mit dem angegebenen Datenelement ist, kann man den Zusatz PRESERVING TYPE
angeben.
Session-Variablen
Es gibt eine Hand voll Session-Variablen, auf die man in CDS ABAP zugreifen kann.
$session.<Variablenname>
Bislang gibt es die folgenden Variablennamen, die weitgehend Komponenten der SY
bzw. SYST
Struktur im ABAP entsprechen:
- USER – Der angemeldete ABAP Benutzer, entspricht
SY-UNAME
. - CLIENT – Der für die Abfrage zu verwendende Mandant. Entspricht
SY-MANDT
, außer bei Zugriffen mitUSING CLIENT
oder in AMDP mitAMDP OPTIONS CDS SESSION CLIENT
- SYSTEM _LANGUAGE – Die Anmeldesprache im internen ABAP Format, entspricht
SY-LANGU
- SYSTEM _DATE – Aktuelles Systemdatum, entspricht
SY-DATUM
- SYSTEM _TIMEZONE – Zeitzone des Benutzers, entspricht
SY-ZONLO
- USER _DATE – Aktuelles Datum des Benutzers, entspricht
SY-DATLO
Rechnen und Operatorausdrücke
In CDS ABAP funktionieren die Rechenoperatoren für Addition (+)
, Subtraktion (-)
und Multiplikation (*)
wie man es erwarten würde. Die Division unterscheidet sich hiervon aber. Grundsätzlich ist vor und nach dem Divisionsoperator (/)
ein Whitespace notwendig.
- Bei Operatorausdrücken mit
ABAP.FLTP
müssen beide Operanden diesen Datentyp haben. Das stört insbesondere, da Literale mit Dezimalstellen vom TypABAP.FLTP
sind. Hier hilft nur einCAST
. - Die Division mit dem Divisionsoperator
(/)
ist in klassischen CDS-Views nur für Gleitkomma-Datentypen erlaubt. Deshalb die SQL-FunktionDIVISION( <Zähler>, <Nenner>, <NK-Stellen> )
verwenden, die gleich rundet. - Bei Berechnungen, die eine Dezimalzahl ergeben, wird geprüft, ob das Ergebnis immer in den
ABAP.DEC
Datentyp passt. Also maximal 31 Stellen, davon 14 Nachkommastellen. Falls das nicht der Fall ist, müssen die Operanden vorher perCAST
verkleinert werden.
CASE
- Ausdrücke
Ein CASE - Ausdruck in CDS ABAP liefert je nach den Bedingungen immer genau einen Wert zurück. Der einfache CASE
- Ausdruck vergleicht einen Ausdruck mit mehreren anderen Ausdrücken auf Gleichheit:
CASE item_categ WHEN '10' THEN 'A'
WHEN '20' THEN 'B'
ELSE 'C'
END
Der komplexe CASE
- Ausdruck (engl. searched case) wertet N unabhängige Bedingungen aus. Die erste, die zu TRUE
ausgewertet wird, liefert das Ergebnis:
CASE WHEN weight_measure < 1
OR weight_unit = 'g' THEN 'A'
WHEN weight_measure >= 1
AND weight_measure <= 5 THEN 'B'
ELSE 'C'
END
Wenn keine Bedingung zu TRUE
ausgewertet wurde, wird entweder der Wert aus der ELSE
-Klausel oder NULL
zurückgegeben.
Assoziationen
Mit Assoziationen können die Beziehungen zwischen den CDS-Entitäten untereinander beschrieben werden. Sie definieren einen JOIN, der nur dann ausgeführt wird, wenn Felder von der assoziierten Entität abgefragt werden. Diese Abfragen erfolgen mit sogenannten Pfadausdrücken und können über mehrere CDS-Entitäten hinweg erfolgen.
DEFINE VIEW zcds_as_soi //SalesOrderItem
AS SELECT FROM snwd_so_i AS soi
ASSOCIATION [1] TO snwd_pd AS _product
ON soi.product_guid = _product.node_key
ASSOCIATION [1] TO zcds_as_so AS _salesOrder
ON soi.parent_key = _salesOrder.NodeKey
{
<FeldListe>
...
_product,
_salesOrder
}
Die Namen der Assoziationen beginnen immer mit einem Unterstrich. Sie werden mit in die Feldliste aufgenommen und somit für die Nutzer des CDS-Views verfügbar gemacht.
In eckigen Klammern kann die Kardinalität angegeben werden: [Min..Max]
. Wenn man nur Max
angibt, wird für den Min
-Wert 0 angenommen. Standardmäßig ist sie [0..1]
. Erlaubte Werte sind z.B. [1], [*], [1..1], [1..*]
oder [0..*]
.
Pfadausdrücke
Mit Pfadausdrücken können Felder aus assoziierten Quellen in die Feldliste des CDS Views oder der Abfrage auf die CDS Entität aufgenommen werden. Die Pfadausdrücke können auch über mehrere Ebenen gehen. Und es ist möglich, der Auswertung der Assoziationen auch noch Attribute mitzugeben, um beispielsweise zu filtern oder den Join-Typ festzulegen:
_sales_order.BillingStatus,
_sales_order._buyer.company_name
_sales_order._buyer[LEFT OUTER
WHERE legal_form = 'GmbH'].company_name
In ABAP SQL
Die Pfadausdrücke können in ABAP SQL genutzt werden. Allerdings ist die Syntax etwas anders. Vor Assoziationen, und als Trennzeichen dazwischen, kommt immer der Backslash (\)
. Die Komponente wird (wie in ABAP üblich) mit dem Bindestrich (-)
angesprochen:
SELECT _sales_order_buyer[LEFT OUTER
WHERE legal_form = 'GmbH']-company_name
FROM zcds_my_view
INTO TABLE @DATA(lt_tmp).
NULL
in CDS ABAP und ABAP
In der Datenbank gibt es den Pseudo-Wert NULL
, der für die Abwesenheit eines Wertes steht. Dieser wird im ABAP in einen initialen Wert übersetzt. Das kann beim Aggregieren zu unerwarteten Situationen führen, da für NULL
und Initialwert im CDS ABAP zwei Gruppen gebildet werden, die im ABAP aber beide initial sind.
Ersetzen von NULL
Mit der SQL-Funktion COALESCE(<Wert1>, <Wert2>)
kann man NULL
Werte abfangen, da diese dann den 2. Wert zurückgibt.
Filtern mit NULL
Ein normaler Vergleich mit NULL
ergibt immer den logischen Wert UNKNOWN
. Damit ist ein solcher Vergleich in der WHERE
Bedingung niemals erfüllt. Deswegen muss das Prädikat IS (NOT) NULL
verwendet werden.
SQL-Funktionen für Zeichenketten
Vorsicht mit Leerzeichen am Anfang oder am Ende der Zeichenketten (<ZK>
). Diese werden teilweise entfernt. Ein Blick in die Dokumentation ist hier unerlässlich!
SQL function | Description |
---|---|
CONCAT(<STR1>, <STR2>) | Konkateniert <STR1> und <STR2> |
CONCAT_WITH_SPACES(<STR1>, <STR2>, <Anzahl>) | Konkateniert <STR1> und <STR2> mit <Anzahl> Leerzeichen |
LENGTH(<STR>) | Länge des Strings <STR> |
LOWER(<STR>) | Konvertiert <STR> in Kleinbuchstaben |
UPPER(<STR>) | Konvertiert <STR> in GROSSBUCHSTABEN |
LEFT(<STR>, <Länge>) | Linker Teil des Strings <STR> mit <Länge> |
RIGHT(<STR>, <Länge>) | Rechter Teil des Strings <STR> mit <Länge> |
SUBSTRING(<STR>, <Position>, <Länge>) | Substring ab <Position> mit <Länge> |
INSTR(<STR1>, <STR2>) | Position von <STR2> in <STR1> |
REPLACE(<STR1>, <STR2>, <STR3>) | Ersetzt <STR2> in <STR1> mit <STR3> |
REPLACE_REGEXPR( PCRE => <Regex>, VALUE => <STR>, WITH => <Substitut>, RESULT_LENGTH => <Länge>, [OCCURRENCE], [CASE_SENSITIVE], [SINGLE_LINE], [MULTI_LINE], [UNGREEDY] ) | Ersetzt die Perl Compatible Regular Expression (PCRE) <Regex> im String <STR> mit dem <Substitut> . Funktioniert nicht in klassischen CDS views, nur in CDS View Entities. Alle Parameter werden im Format Name => <Wert> .OCCURENCE : 1-N oder ALL . Die Flags haben den Wert '' oder 'X' . |
LPAD(<STR> , <Länge> , <Beispiel>) | Befüllt <STR> von links mit <Beispiel> bis zur <Länge> |
RPAD(<STR>, <Länge>, <Beispiel>) | Befüllt <STR> von rechts mit <Beispiel> bis zur <Länge> |
LTRIM(<STR> , <character>) | Entfernt alle <character> links von <STR> (z.B. führende Nullen oder Leerzeichen) |
RTRIM(<STR>, <character>) | Entfernt alle <character> rechts von <STR> |
Numerische SQL-Funktionen
Kürzel: Zahl oder Zähler (<Z>
), Nenner (<N>
) und Nachkommastellen (<NK>
).
SQL function | Description |
---|---|
ROUND(<Z>, <NK>) | Kaufmännische Rundung auf <NK> Stellen |
CEIL(<Z>) | Rundung auf... |
FLOOR(<Z>) | ...oder ab zur nächsten ganzen Zahl |
DIVISION(<Z>, <N>, DP) | <Z> dividiert durch <N> , gerundet auf <NK> Stellen |
DIV(<Z>, <N>) | Ganzzahliger Anteil der Division <Z> durch <N> |
MOD(<Z>, <N>) | Rest der Division <Z> durch <N> (Modulo) |
ABS(<Z>) | Positiver Absolutwert von <Z> |
Datums- und Zeitberechnung
Die Funktionen in den CDS ABAP sind die gleichen, die auch im OpenSQL in ABAP zur Verfügung stehen. Die Datentypen spielen bei den SQL-Funktionen eine große Rolle, weshalb deren Kürzel grundsätzlich vorangestellt wird, z.B.:
DATS
ist der bekannte ABAP Datentyp, für die DB nurCHAR(8)
DATN
ist das SQL-Datumsformat der HANATIMS
ist der ABAP Datentyp für ZeitTIMN
ist das SQL-Zeitformat der HANATSTMP
ist der kurze Timestamp, 15-Stellige DezimalzahlTSTMPL
ist der lange Zeitstempel mit 7 NK Stellen.UTCL
entspricht dem ABAP DatentypUTCLONG
, intern 8 Byte
Die Namen der CDS ABAP SQL- Funktionen beginnen mit dem Datentypen.
Konvertierungen
DATS_TO_DATN
DATS_FROM_DATN
TIMS_TO_TIMN
TIMS_FROM_TIMN
DATS_TIMS_TO_TSTMP
TSTMP_TO_DATS
TSTMP_TO_DST
TSTMP_TO_TIMS
TSTMPL_TO_UTCL
TSTMPL_FROM_UTCL
Gültigkeit
Ergeben 1 falls gültig, sonst 0.
TSTMP_IS_VALID
TIMS_IS_VALID
DATS_IS_VALID
Addition
DATN_ADD_DAYS
DATN_ADD_MONTHS
DATS_ADD_DAYS
DATS_ADD_MONTHS
TSTMP_ADD_SECONDS
UTCL_ADD_SECONDS
Differenzen
UTCL_SECONDS_BETWEEN
TSTMP_SECONDS_BETWEEN
DATS_DAYS_BETWEEN
DATN_DAYS_BETWEEN
Aktueller Zeitpunkt
UTCL_CURRENT
TSTMP_CURRENT_UTCTIMESTAMP
ABAP_SYSTEM_TIMEZONE
ABAP_USER_TIMEZONE
Parameter
Für einen CDS ABAP View können Parameter definiert werden, die dann als Ausdruck verwendet werden, z.B. zum Rechnen, als Vergleichswert oder als Funktionsparameter.
Default-Werte funktionieren nur in manchen Frameworks:
@Consumption.defaultValue
– Konstanter Wert@Environment.systemField
Session-Variablen, z.B. Systemdatum
@AbapCatalog.sqlViewName: 'ZSQL_DEMO_PARA'
@EndUserText.label: 'Parameter in CDS Views'
DEFINE VIEW zjb_demo_parameter
WITH PARAMETERS
@Consumption.defaultValue: '16'
iv_vat : abap.int1 ,
@Environment.systemField: #SYSTEM_DATE
iv_date: abap.dats
AS SELECT /bic/aorda001_12
{
KEY doc_number,
net_value * division($parameters.iv_vat ,
100,
3 ) AS my_tax_value
} WHERE createdon = $parameters.iv_date
CDS Extraktoren
Delta Extraktion mit Zeitstempelfeld
Wie beim generischen Delta kann über ein Zeitstempelfeld ein Delta gebildet werden. Optional kann noch ein Sicherheitsintervall mitgegeben werden.
@Analytics:{ dataCategory: #FACT,
// #DIMENSION, #CUBE
dataExtraction:{
enabled: true,
delta.byElement: {
name:'upd_date',
maxDelayinSeconds: 1800,
detectDeletedRecords: false,
ignoreDeletionAfterDays : '365'
} } }
Change Data Caption (CDC)
Automatische Änderungserfassung auf Systemen ab SAP S/4HANA 1909 FPS01 möglich. Bei komplexeren Szenarien mit JOIN
s muss explizit gemappt werden. Details im sehr lesenswerten Blog von Simon Kranig.
@Analytics:{
dataCategory: #DIMENSION
dataExtraction: {
enabled: true,
delta.changeDataCapture: {
automatic : true
} } }
CDS Table Functions
CDS Table Functions sind in SQLScript programmierte Views. Sie basieren auf einer AMDP-Funktion, die durch ein CDS ABAP Objekt gekapselt wird.
Die CDS-Table Function definiert die Signatur:
@EndUserText.label: 'My Table Function'
DEFINE TABLE FUNCTION zjb_demo_tf
RETURNS
{
mandt : abap.clnt;
doc_number : /bi0/oidoc_number;
net_price : /bi0/oinet_price;
}
IMPLEMENTED BY
METHOD zcl_demo_tf=>my_tf;
Die AMDP Tabellenfunktion dazu:
CLASS zcl_demo_tf DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
CLASS-METHODS my_tf
FOR TABLE FUNCTION zjb_demo_tf.
ENDCLASS.
CLASS zcl_demo_tf IMPLEMENTATION.
METHOD my_tf BY DATABASE FUNCTION
FOR HDB LANGUAGE SQLSCRIPT
USING <sourceTable>.
RETURN SELECT mandt,
doc_number,
SUM( net_price )
AS net_price
FROM <sourceTable>
GROUP BY doc_number;
ENDMETHOD.
ENDCLASS.
CDS InfoProvider Views
Basis für CDS Queries sind CDS InfoProvider mit der Annotation @Analystics.dataCateogory: [#CUBE | #DIMENSION]
Sie bilden einen transienten InfoProvider mit dem Namen 2C<SQLView Name>
. Sie enthalten die vollständigen semantischen Informationen des Datenmodells, welches die CDS Queries später verwenden sollen.
CDS Cube Views
CDS Cube Views sind die Basis von Kennzahlenberichten. Sie können zusätzliche CDS Dimension Views assoziieren, um die Attribute und Texte von Merkmalen anzureichern.
@Analytics.dataCategory: #CUBE
DEFINE VIEW zjb_demo_cube
AS SELECT FROM <Quelle>
ASSOCIATION TO zjb_material_dim AS _Mat
ON $projection.material = _Mat.material
{
...
@ObjectModel.foreignKey.association: '_Mat'
material,
...
}
CDS Dimension Views
Die CDS Dimension Views liefern Attribute zu einem Merkmal. Diese Attribute können zeitabhängig sein.
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'material'
DEFINE VIEW zjb_material_dim
AS SELECT FROM /bi0/pmaterial AS dim
ASSOCIATION [*] TO zjb_mat_txt AS _MatText
ON dim.material = _MatText.material
{
@ObjectModel.text.association: '_MatText'
KEY material,
...
}
CDS Text Views
Die CDS Text Views liefern die sprachabhängigen Texte zu Feldern.
@ObjectModel.dataCategory: #TEXT
@ObjectModel.representativeKey: 'material'
DEFINE VIEW zjb_material_txt
AS SELECT FROM /bi0/tmaterial
{
KEY material,
@Semantics.language: true
KEY langu,
@Semantics.text: true
txtmd
}
CDS Query Views
Quelle für eine CDS Query View ist immer ein CDS InfoProvider View. Mit der CDS ABAP Annotation @Analytics.query: true
wird aus einem View ein CDS Query View.
Annotationen auf Viewebene
@Analytics.query: true
@Analytics.settings.zeroValues: {
handling: #HIDE_IF_ALL, //#HIDE, #SHOW
hideOnAxis: #ROWS_COLUMNS//#COLUMNS,#ROWS
}
Annotationen auf Feldebene
Filter mit Prompt
@Consumption.filter:{
selectionType: #RANGE,//#INTERVAL,#SINGLE
//#HIERARCHY_NODE
multipleSelections: false,
mandatory: true,
defaultValue: '0000000000011675' }
AnalyticDetails für Merkmale
@AnalyticsDetails.query:{
display: #KEY, //#KEY_TEXT,#TEXT
axis: #ROWS, //#COLUMNS
totals: #HIDE, //#SHOW
sortDirection: #ASC } //#DESC
AnalyticDetails für Kennzahlen
@AnalyticsDetails.query:{
decimals: 0 ,
hidden: false
formula: ' a - b ' }
1 AS a_minus_b,
@EndUserText.label: 'number of records'
@AnalyticsDetails.exceptionAggregationSteps:
[{ exceptionAggregationBehavior: #COUNT,
exceptionAggregationElements:
['doc_number'] }]
1 AS doc_count