云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

游戏服务器_彩虹云主机源码_怎么样

小七 141 0

游戏服务器_彩虹云主机源码_怎么样

假设在SAP系统的一个表中有一个包含以下数据的表:

如何计算ABAP CDS视图中不同(不同)平面类型的数量?这个问题的答案可能比你想象的要复杂。这项任务有三种可能的方法,我们将看看它们的优缺点。如果你急于找到一个好的解决办法,物联网设备,试试最后一个?

一些示例数据和CD视图

如果您想自己尝试,可以在您的系统中生成一些测试数据。我在示例中使用的是SAP flight data模型,它在SAP(NetWeaver)系统中是标准的。使用SAPBC\u DATA\u GENERATOR程序生成一些示例数据。它们将存储在几个表中,但我们只需要表SFLIGHT。它包含了一些关于商业航空公司航班的数据,如座位容量、价格、航班日期和我们要计算的飞机类型。首先,您可以使用以下非常简单的abapcds视图:

基本视图ZI\u FLIGHT

abapcds Cube ZC\u FLIGHTDATAC

abapcds Query ZC\u FLIGHTDATAQ

使用SQL

来自数据库世界,我在互联网上搜索术语"count distinct",因为这基本上就是我们想要做的。我个人发现的大部分内容都是关于SQL方法的。Count Distinct是一个标准的SQL功能,因此在abapcds视图中也支持它。看起来是这样的:

在ABAP CDS代码的末尾,您需要附加一个group by子句,其中包含所有剩余的(未聚合的)列:

但问题是:分组列在代码中是预先确定的–在本例中,我们将对数据集的每一行执行count distinct。因此,返利购,结果将是令人失望的:

现在让我们看看当只选择了承运商和飞机类型计数时,这是如何聚合的:

唯一的选择是从分组标准中删除列–但是我们需要将它们从ABAP CDS视图中删除,从而释放信息。同样:当您访问查询时,只有选择预期的(分组的)列时,计数才是正确的。这不是我们要找的,特别是如果我们想实现基于此查询的向下钻取。

旁注:在带有注释的CDS视图中不支持此count distinct@分析.查询:true或在基于外部视图的CDS视图中

使用DefaultAggregation注解

Count distinct本质上是一个聚合函数。实际上,abapcds视图的代码完成提供了以下选项:

不幸的是,我找不到任何关于如何使用它的实际文档。以下是我能找到的唯一(没有用的)SAP帮助结果:

https://help.sap.com/http.svc/rc/abapdocu\u 752\u index\u htm/7.52/en-US/abencds\u annotations\u frmwrk\u tables.htm

https://help.sap.com/doc/f9edb0c2c2e59e426da97a81719be1d11c/1511%20000/en-US/frameset.htm?5e5d319bd1a74552b99a36dfc739f74d.html

似乎聚合函数本身仅由不生成BEx查询的CDS查询视图支持(@分析.查询:真)。如果有人用过这个,大数据开发,请随意评论如何做。

使用异常聚合

第三种计算方法是使用异常聚合。如果您在CDS query视图中激活BEx查询生成,数据分析和大数据,您可以使用以下代码:

请注意,对于这个示例,我还准备了一个数据元素(zïplanetypecont)来为新列指定一个描述性标签。代码将为每个唯一的平面类型执行给定的公式,并考虑其他选定的条件。所以本质上,物联网时代,当只选择航空公司和飞机类型计数时,它的工作方式如下:

结果如下:

这是正确的!它将适应选择标准。所以,总而言之:当试图计算不同的值时,您不知道应该提前对哪些列进行分组,这是一种方法。这样做的缺点是