DataServices性能优化及小技巧

2019-01-10 12:39

BO性能优化及小技巧

一、 DS多个表和QUERRY做JOIN时性能处理

在Data Services 里,经常会遇到多个表做join或多个QUERRY做join的情况,如果数据量大的话,经常会耗费掉大量的时间。本文档主要解决此问题。

1、在R3里面,多个表做JOIN时。 性能的解决方法主要有两种:

① 对参与JOIN的数据库表设优先级,优先级的高低由限制条件来决定。 如下例:

A表:200W数据量,有条件可以限制到10W B表:200W数据量,有条件可以限制到50W C表:200W数据量,没有条件限制

解决方案:这样如果A、B、C三个表做JOIN时,就可以把A表的优先级设为100,B表设为95,C表设为90。(优先级的设置是相对的)

② 可以先JOIN一部分表,然后把结果再与剩下的表做JOIN(即拆分)。 如下例:

条件依然和上面的一样。

解决方案:我们可以把A表与B表做JOIN,得到QUERRY1,然后把QUERRY1与表C做JOIN。同时,我们依然可以设置优先级。 优先级设置位置如下图:

2、在R3外面,有两种情况,一种是多个QUERRY做JOIN,另一种是QUERRY与数据库表做JOIN。

解决方案:有QUERRY做JOIN时,我们都需要先进行Data_Transfer(以下简称DT)转换,然后再参与JOIN。 DT需要设置两个地方。

① 需要转换成临时表。如下图:

② 需要设置同一时间处理的最大条目数及方式。如下图:

二、 DS删除主键重复方法

由于核心类中,类与类之间存在各种关联关系,如一对多或者多对多的情况等。对于这样的情况,从SAP表中取出记录后,生成主键(流水号)时就会造成name以及mrid字段重复,这样在把流水号以及mrid字段插入map表中时,数据冗余。因此,对于这种情况,要把那些重复name字段的记录分组生成主键(流水号)。

1.解决方案

将关联关系导致主键重复的记录,按照需要后面用来生成主键流水号的字段A(如name字段)排序,然后引用函数gen_row_num_by_group(A)对字段分组生成流水号,最后选取每组中的流水号为1的记录,这样就可以删除那些重复的记录,不会出现相同的name对应多个流水号的情况。

例子可以参考客户协议类:

2.注意事项

在筛选之前一定要排序,这个有点像abap里面对内表中相同的记录删除时要对内表进行排序

三、 DS中文字符长度处理

1.需求说明

DataServices里面,其中文字符的格式与SAP的R3,Oracle数据库中文格式表示不一样,所以引起程序运行时出错,此文档解决了这个错误。

2.解决方案

DataServices如果出现如下错误提示:

图1

其解决方法如下图:就直接将拖过来的字段将Varchar类型的长度X2,这样就解决上述问题了.

图2

(图中Merge5处数据源是比较少出现的情况)

3.注意事项

3.1、上述做法最好在R3DF里面就做好。

只要程序出了R3DF后没有转换过来的中文格式,都会出现上图1的错误。

四、 DS 带小数位的数据类型乘以小数的问题

1.需求说明

在统计类上传中有一些电费是按照电量乘以一个比例而得到的,这时就要乘以一个小数位,本文档主要概述此问题以及解决办法。

2.问题现象

在统计类DF01用售电量乘以0.001 .

TOTAL_POWER的数据情况,可以看到sanxia_fee 都为0

3.测试及解决办法

3.1、更改query 的total_power 的字段类型为decimal(16,4)


DataServices性能优化及小技巧.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:15级《可编程控制器》期末复习题(2017-2018学年第二学期)[1]

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: