在BW中我们可以用ABAP作什么 在SAP R3和BW之间,对于我们如何使用ABAP程序是有明显不同的。要理解这样的开发会给我们带来什么,我们先看看BW的大致结构。总体来首,我们是处理一些对象,这些对象是基于某种配置,比如ODS和InfoCube的连接,或者对源系统、数据源的创建。通常我们不会构造屏幕程序和多个用户接口去获得其他的功能,这是在BW中的开发与R3中的显著不同。在BW中,我们使用ABAP来按照要求转换数据,也可以在抽取、更新时进行数据处理。
在R3中,为BW可以做的ABAP编程选项
为已有的输出结构添加字段; 对于这些字段运用ABAP逻辑。 选项2: 为数据集创建一个表或者视图; 在RSO2中创建一个通用的抽取器; 或者运用自定义ABAP程序去填充表内容或者通过function module、user exit在抽取时填充数据字段或者修改数据。 For选项1: 这是最直接的方式在ABAP中对于数据进行修改,而不通过标准的抽取器。我们就使用最基本的概念,为了额外的字段去填充结构。当我们对要输出的结构增加新的字段或者要激活时,我们可以在用户出口中看到这些字段。当我们为导出结构增加了字段之后,是可以在BW目标系统中看到的。一旦这些字段被添加至输出结构,到RSA6中,Post Processing Datasources可以查看修改的数据源。双击数据源,确保新增加的字段没有被隐藏。否则,新添字段不会在新导出BW系统中被看见。在R3中,如何激活这些数据字段在R3到BW的用户出口中。进入CMOD,找到自己的BW project,这个项目可能是在用户命名空间中的,找到正确的项目后,选择“display components”,然后F7。会显示出所有的BW用户出口组件,你会发现有四个用户出口:
我们这时就需要用代码填充这些字段,然后在BW中重新初始化。双击 SAPLRSAU_001会打开 SAPLRSAU_001程序的顶层。然后点击包含 ZZRSAU01。这里就是写自定义逻辑的地方。当你开始数据抽取,输出结构被标准抽取的初始数据填充时,你会发现这时可以向每一条记录添加字段。在这个用户出口中,你可以循环访问所有数据然后添加相应字段。到最后一步时,可以把新的数据字段添加到抽取出结构中。 For选项2: 进入SE11,查看View,输入命名Z****,创建它; 当要求输入development class时,输入正确的development class然后保存,然后会进入view的初始定义界面; 添加需要的字段,同时补充表名; 创建一个自定义程序区填充这些base table; 当结束激活以后,可以查看在view中有多少条数据被返回; 当然view被创建完毕后,可以去RSO2中查看; 在RSA3中可以通过抽取检查,来查看新的数据源; 你可以双击RSA3带有view定义的输出。
如何改善性能 利用选择条件,尽量select具体的字段名; Not recommended:- Select * from /bi0/mcustomer. Check : soursystem = ‘I2P’ and objvers = 'A'. Endselect.
Recommended:- Select * from /bi0/mcustomer where soursystem = ‘I2P’ and objvers = 'A'. Endselect. 采用系统自带的聚合函数,而不是通过ABAP代码去自己实现; Not recommended Maxamount = 0. Select * from /bic/mzordods where soursystem = ‘I2P’. Check mzordods-zamount>maxamount. Maxamount = mzordods-zamount. Endselect. 不要每次通过select语句查询一条记录然后插入internal table,推荐一次性将所有要查询的记录全部插入 ; Not recommended:- Refresh : itab_cust_t select * from /bi0/tcustomer into itab_cust_t append itab_cust_t. clear itab_cust_t.
Recommended:- Refresh : itab_cust_t select * from /bi0/tcustomer into table itab_cust_t 在对内表进行查找时,使用二分查找方法; Not Recommended Read table itab_cust_t with key soursystem=’I2P’.
Recommended Read table itab_cust_t with key soursystem=’I2P’ binary search. 在操作两个内表时,尽量使用append插入行,当然这两个内表的结构是要相同的; Not Recommended Loop at itab_cust_t. Append itab_cust_t to itab_cust_t1. EndLoop.
Recommended Append lines of itab_cust_t to itab_cust_t1. 使用表缓存,当如下情况时,表缓存会被忽略: 1, select distinct 2, select ... for update 3, Order by, group by, having clause 4, Joins 使用FOR ALL Entries,系统会自动创建outer join,相应缺点有: 1,雷同数据会被自动清除掉,如果不希望这样,应该在select中加入唯一key值查询; 2,如果基于FOR ALL Entries查询的表是空的,所有行都会被插入目标表; 3,如果用于FOR ALL Entries的表记录很大,这种情况下性能是下降而不是提升的。 Not Recommended Loop at itab_cust_t. Select single * from /bi0/mcustomer into itab_cust_m Where soursystem= itab_cust_t-soursystem. Append itab_cust_m. EndLoop.
Recommended:- Select * from /bi0/mcustomer appending table itab_cust_m For all entries in itab_cust_t Where soursystem= itab_cust_t-soursystem. 使用合理的where语句。当一个表有多个索引时,where语句应该以索引顺序书写;
系统所提供的进行性能分析的工具: SE30,对ABAP程序进行全面分析,无论是不是数据库访问的; ST05,进行SQL级别的分析。 |
|