首页 > 其他分享 >SAP CDS view 里的 Aggregation Expression

SAP CDS view 里的 Aggregation Expression

时间:2023-08-13 13:24:23浏览次数:32  
标签:SalesOrderHeader Aggregation 视图 Item CDS SAP Expression view

SAP ABAP CDS(Core Data Services)视图是SAP系统中的一种建模工具,用于定义数据模型和数据库视图。CDS视图允许开发者创建高级数据模型,可以从多个数据库表中提取数据,并在SAP应用程序中使用。在CDS视图中,"Aggregation Expressions"(聚合表达式)是一项强大的功能,它允许开发者对从底层数据库表中检索的数据进行聚合操作,例如求和、计数、平均值等。

聚合表达式在CDS视图中通过使用@Aggregation注解来定义。这样,您可以将数据库表中的原始数据转换为更有意义的、聚合后的结果,以便在报表和分析中更方便地使用。使用CDS视图的聚合功能,可以在数据库层面上进行复杂的计算,从而提高查询性能,并减轻SAP应用程序的负担。

让我们通过一个具体的例子详细说明SAP ABAP CDS视图的Aggregation Expressions功能。

假设我们有一个SAP系统,其中有两个数据库表:SalesOrderHeaderSalesOrderItem,分别存储销售订单头和订单行项目的数据。现在,我们希望创建一个CDS视图,将这两个表的数据连接起来,并对订单行项目进行聚合,以便计算每个销售订单的总金额和平均折扣率。

首先,我们定义数据库表结构:

-- Sales Order Header Table
CREATE TABLE SalesOrderHeader (
    SalesOrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE
);

-- Sales Order Item Table
CREATE TABLE SalesOrderItem (
    ItemID INT PRIMARY KEY,
    SalesOrderID INT,
    ProductID INT,
    Quantity INT,
    UnitPrice DECIMAL(10,2),
    Discount DECIMAL(5,2)
);

接下来,我们创建CDS视图,并使用@Aggregation注解对订单行项目进行聚合:

-- CDS View Definition
@AbapCatalog.sqlViewName: 'ZCDS_SalesOrder'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order CDS View'
define view ZSalesOrder as select from SalesOrderHeader
    association [0..*] to SalesOrderItem as _Item
        on $projection.SalesOrderID = _Item.SalesOrderID
{
    key SalesOrderHeader.SalesOrderID as SalesOrderID,
    SalesOrderHeader.CustomerID as CustomerID,
    SalesOrderHeader.OrderDate as OrderDate,
    
    // Aggregation Expressions
    @Aggregation.sum: @_Item.Quantity
    @ObjectModel.text.element: 'TotalQuantity'
    @_Item.Quantity as TotalQuantity,
    
    @Aggregation.sum: @_Item.Quantity * @_Item.UnitPrice * (1 - @_Item.Discount / 100)
    @ObjectModel.text.element: 'TotalAmount'
    @_Item.Quantity * @_Item.UnitPrice * (1 - @_Item.Discount / 100) as TotalAmount,
    
    @Aggregation.avg: @_Item.Discount
    @ObjectModel.text.element: 'AverageDiscount'
    @_Item.Discount as AverageDiscount
}
group by SalesOrderHeader.SalesOrderID, SalesOrderHeader.CustomerID, SalesOrderHeader.OrderDate;

在上面的CDS视图定义中,我们使用了@Aggregation注解来定义三个聚合表达式:

  1. TotalQuantity:使用@Aggregation.sum注解对订单行项目的Quantity字段进行求和,得到每个销售订单的总数量。
  2. TotalAmount:使用@Aggregation.sum注解对订单行项目的TotalAmount字段进行求和,计算每个销售订单的总金额。这里我们通过乘以(1 - Discount / 100)来应用折扣率,以得到折扣后的总金额。
  3. AverageDiscount:使用@Aggregation.avg注解对订单行项目的Discount字段进行平均值计算,得到每个销售订单的平均折扣率。

在CDS视图中,我们使用了关联_ItemSalesOrderHeader表和SalesOrderItem表连接起来。然后,我们使用聚合表达式对SalesOrderItem表中的QuantityUnitPriceDiscount字段进行计算,得到每个销售订单的总数量、总金额和平均折扣率。

通过以上CDS视图的定义,我们可以在SAP应用程序中轻松地获取每个销售订单的总数量、总金额和平均折扣率,无需手动编写复杂的查询。并且,这些计算是在数据库层面上进行的,因此查询性能也得到了优化。

总结一下,SAP ABAP CDS视图的Aggregation Expressions功能允许开发者在CDS视图中定义聚合表达式,以对底层数据库表的数据进行聚合操作,例如求和、计数和平均值等。这样可以提供更有意义的数据,并简化SAP应用程序中的数据处理和报表生成。通过使用@Aggregation注解,可以在CDS视图中轻松地实现这些聚合操作,从而提高应用程序的性能和效率。

标签:SalesOrderHeader,Aggregation,视图,Item,CDS,SAP,Expression,view
From: https://www.cnblogs.com/sap-jerry/p/17626441.html

相关文章

  • SAP ABAP 报表进度显示控件的使用详解试读版
    有些SAPABAP报表包含了多个业务处理步骤,笔者这里举一个例子:计算某个时间段内,系统所有销售订单的总金额。SAP大多数基于ABAP技术栈的销售订单设计,都是采取订单抬头(header)和订单行项目(LineItem)的数据结构。订单的时间段维护在抬头结构上,一张订单可能包含多个行项目,每......
  • 什么是 SAP Fiori Elements 的 extensionAPI
    在SAPFioriElements中,"extensionAPI"是一种用于自定义和扩展FioriElements应用的强大工具。它提供了一组API(应用程序编程接口),允许开发人员通过代码的方式对FioriElements应用进行定制和增强。借助extensionAPI,开发人员可以在不影响标准FioriElements功能的基础上,......
  • 如何找到 SAP Fiori Elements 应用某个字段显示值具体的数据源试读版
    笔者将自己在SAP领域16年(2007~2023)的SAPUI5(Fiori)和OData开发的技术沉淀,进行了系统的归纳和总结,分别写成了三套由浅入深的学习教程,收到了不错的反响:零基础快速学习ABAP一套适合SAPUI5开发人员循序渐进的学习教程SAPOData开发实战教程-从入门到提高这三套......
  • SAP CDS view 里的 COALESCE 函数
    在SAPABAPCDS(CoreDataServices)View中,COALESCE函数是用于处理NULL值的一种功能。COALESCE函数接受多个参数,并返回第一个非NULL值参数。这意味着如果第一个参数不为NULL,则返回第一个参数的值;如果第一个参数为NULL,则返回第二个参数的值;以此类推,直到找到第一个非NU......
  • SAP CDS view 里的 currency_conversion 功能介绍
    SAPABAPCDSView的currency_conversion函数是一种用于在CDS(CoreDataServices)视图中执行货币转换的功能。在SAP系统中,经常需要在不同货币之间进行转换,以便在报表和分析中展示一致的货币金额。currency_conversion函数允许在CDS视图中定义货币转换规则,以便在查询结果中将数值......
  • 因为 SAP UI5 版本升级引起的问题又一例 - 如何分析问题根源
    本教程之前的文章,我们介绍了SAPUI5库文件版本相关的知识:SAPUI5应用开发教程之八十四-如何指定SAPUI5应用程序基于某个特定的版本运行同样一份源代码,使用不同的SAPUI5版本加载,行为可能会有所差异:SAPUI5应用开发教程之一百一十八-如何分析因为SAPUI5版本......
  • SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
    本教程第4篇文章,我们介绍了本地启动SAPFioriElements应用的三种模式。4.SAPFioriElements本地应用启动的三种模式辨析以默认方式即命令行yarnstart启动之后,项目文件夹里的ui5.yaml文件会默认被加载并解析。ui5.yaml这个文件,在本地开发FreestyleUI5时也会......
  • SAP UI5 中的 sap-fe-mockserver
    SAPUI5是一种用于构建现代Web应用程序的开发框架,它是SAP(Systems,Applications,andProductsinDataProcessing)公司推出的一种前端技术。它提供了丰富的控件库、MVC(Model-View-Controller)架构模式、数据绑定、主题定制等功能,帮助开发人员构建直观、高度可定制且易......
  • SAP Fiori Elements 应用里的 ui5-local.yaml
    SAPFioriElements是SAP的一种开发框架,用于快速构建SAPFiori应用程序。SAPFioriElements应用程序的一个重要方面是模拟服务器(mockserver),它允许在本地开发环境中模拟OData服务,以便在没有真实后端服务的情况下进行开发和测试。ui5-local.yaml文件用于配置本地开发环境......
  • 【Labview与SQL Server互联(labview可以引用数据库)】
    (Labview与SQLServer互联(labview可以引用数据库))一、工具的下载点击:LabviewSQL工具包进行工具包的下载1.1安装下载完成后,进入C盘,找到如图所示的文件夹,找到需要安装的labview版本文件夹,双击进入找到uesr.lib文件夹,双击进入将刚刚下载的工具包解压,直接复制进user.lib文......