在SAP S/4HANA项目里,经常会遇到一种很有诱惑力的设计方式。
系统里已经存在一个CDS View Entity,它包含销售订单抬头、项目、客户、物料、公司代码、销售组织、工厂等信息。新的业务需求又需要其中一部分字段,于是直接基于这个CDS再建一层。过几天又来了新的Fiori页面,再基于第二层继续建第三层。后来为了给OData服务使用,又加一个 projection。为了报表需求,再叠一层聚合。为了扩展字段,再关联另外几个标准CDS。
从代码层面看,这样做甚至很漂亮。
每个CDS都不算长,职责似乎也比较清晰,而且贯彻了SAP Virtual Data Model强调的复用思想。可到了生产系统,事情开始变得奇怪,一个看起来只有几十行的查询,真正交给SAP HANA的 SQL 却可能已经包含十几层甚至几十层依赖、多个JOIN、表达式、聚合以及访问控制条件。
问题并不一定发生在某一个CDS上。
真正需要观察的,是整个数据模型展开以后究竟有多复杂。
SAP当前关于ABAP Data Models的性能文档也明确强调,CDS的强项之一就是可以像关系一样再次被其他CDS使用,通过多层堆叠逐渐建立复杂应用模型。但随着表达式、函数、访问控制以及多层依赖