Defines a path expression in a SELECT statement of a
CDS view. A path expression is a string of
associations separated by periods
(.) whose names are specified using _assoc1, _assoc2, and so on.
Path expressions can be specified in the ABAP CDS DDL as data sources data_source, as
elements of SELECT lists, and as operands of WHERE conditions or
HAVING conditions. Path expressions specified as operands of a condition must be closed using an element. As a non-aggregated element of a SELECT list of
aggregate expressions and in a WHERE
condition or HAVING condition, the result of the path expression must be monovalent. This means that the cardinality of all associations used is either "to 1" or the path expression can contain only
filter conditions that are declared as monovalent using the addition 1:.
The following is evaluated when a CDS view is accessed using a path expression:
The joins defined by the associations, from left to right.
All other conditions of the CDS views in question.
The path expression addresses the full result of this evaluation or a single element appended using .element.
If the path expression is closed using an element, this must be an element of the target data source of the final association in the path.
If the path expression is closed using an association, this is interpreted as follows depending on the position of the path expression:
As an element of a SELECT list, the association is published for use in other CDS views or in Open SQL.
In a WHERE clause
or HAVING clause, the path expression must be closed using an element.
The name of the CDS view in which the first association is defined can be specified in front of this
association. The first association in a path expression must either be defined in the current CDS view
or published as an element in a data source of the current view. All further associations must be published in the target data source of the directly prefixed association in the path expression.
attributes
can be used to specify attributes in angle brackets after every association. These attributes define the following further properties of this section of the path expression:
Declaration of monovalency
Category of the join expression
Specified filter conditions
If the data source target of a specified
association is a CDS entity with
input parameters, parameters must be used after the name _assoc to pass actual parameters to them.
Notes
The most simple path expression is the name of a single association.
CDS DDL path expressions can also be used in conditions in the ABAP
CDS DCL of ABAP CDS.
An association whose target data source does not publish an association cannot be followed by any
further associations in a path expression. More specifically, no further associations can be made into a path expression after associations whose target data sources are database tables or classic views.
The ABAP annotationAbapCatalog.compiler.compareFilter can be used to specify whether the
filter conditions are compared for the path
expressions of a view. If the filter condition matches, the associated join expression is created only
once, which generally improves performance. Otherwise a separate join expression is created for each filter condition. However, the results sets of both configurations can differ.
Example
The following CDS view contains the simple path expression _scarr[inner].carrname
in the SELECT list, whereby the attribute INNER is specified that controls the type of join. The program
DEMO_FROM_JOIN_TO_ASSOCIATION demonstrates that this view returns the same result as a directly programmed inner join in ABAP CDS or in Open SQL.
Example
This example shows three CDS views, sales_order, business_partner,
and invoice. The CDS view invoice uses its own association and associations from the other two views in path expressions:
The association sales_order of the CDS view business_partner
is specified as a data source after FROM. A filter condition guarantees that only certain orders can be used as data sources.
The separate association invoice_header is used in a path expression as an operand in the WHERE condition.
The association note_header of the CDS view sales_order
is addressed using the alternative name bpa in business_partner
and defined as an element of the SELECT list. This means this association can also be used in CDS views that use invoice as a data source.
@AbapCatalog.sqlViewName: 'SALES_ORDER_VW' define view sales_order as select from snwd_so
association [0..1] to snwd_text_key as _note_header
on snwd_so.note_guid = _note_header.node_key { * } // Include all fields from snwd_text_key
@AbapCatalog.sqlViewName: 'BPA_VW' define view business_partner as select from snwd_bpa
association [0..*] to sales_order on snwd_bpa.node_key = sales_order.buyer_guid
{ * }
@AbapCatalog.sqlViewName: 'SALESO_INV_VW' define view invoice as select from
/* Association "sales_order" with filter as data source */
business_partner.sales_order[
lifecycle_status <> 'C' and lifecycle_status <> 'X'] as bpa_so //alias for data source
/* Association only used in this view definition */
association [0..1] to snwd_so_inv_head as _invoice_header
on bpa_so.node_key = _invoice_header.so_guid
{ key bpa_so.node_key, //Field from ON-condition in _invoice_header
bpa_so.so_id,
bpa_so.note_guid, //Field from ON-condition in note_header
bpa_so.lifecycle_status,
/* Association is not published, but its element */
_invoice_header.dunning_level,
/* Association from data source is published here */
bpa_so.note_header }
/* Path expression in WHERE clause */ where _invoice_header.dunning_level > '0';