前言

本文的目的是讲述如何在BW中使用ABAP编程。在每一个项目中,正确使用ABAP编程会对正确的业务建模起到积极作用。在设计和蓝图阶段,一个核心的功能流程是类比于如何在BW中完成类似于R3中的业务流程。SAP提供了多种路径来实施这样的业务流程。本文就会讲述哪里、如何在BW中进行ABAP编程。同时,也会给出一些基本的SAP推荐,对于如何改善ABAP代码的执行。文中的例子会包括R3数据源的变换,创建通用的R3数据抽取器。在BW中,大部分对象都是内部关联的,我们可以在多个目标数据中共享数据。因此,我们需要知道我们是如何处理数据、更新记录和在哪里使用ABAP程序控制这些更新。

在BW中我们可以用ABAP作什么

在SAP R3和BW之间,对于我们如何使用ABAP程序是有明显不同的。要理解这样的开发会给我们带来什么,我们先看看BW的大致结构。总体来首,我们是处理一些对象,这些对象是基于某种配置,比如ODS和InfoCube的连接,或者对源系统、数据源的创建。通常我们不会构造屏幕程序和多个用户接口去获得其他的功能,这是在BW中的开发与R3中的显著不同。在BW中,我们使用ABAP来按照要求转换数据,也可以在抽取、更新时进行数据处理。

Technical Area

描述

BEx User Exit

允许为了key figure相关计算在运行时创建和激活变量。这个用户出口会在每次BEx执行时被调用。

R/3 User Exit

这个用户出口是在R3的CMOD中定义,可以在要提取结构中填充其他的字段。我们也可以创建额外的业务逻辑在数据传输至BW前。

BW Transfer rules

这些规则在数据从R3传输到BW时被运用,或者在BW中导出数据源和创建InSource时。

BW Update Rules

这些规则在数据被更新至目标数据时调用。无论是ODS或者是InfoCube,每一个更新结果都是一条更新规则的执行结果。

BW Start Routines

BW更新规则中的Start routine是用来对所有数据起作用的,并不是像某条更新规则只是对某个data element起作用。

在R3中,为BW可以做的ABAP编程选项

选项1:

为已有的输出结构添加字段;

对于这些字段运用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用户出口组件,你会发现有四个用户出口:

User Exit

Description

SAPLRSAU_001

Transactional data user exit

SAPLRSAU_002

Master Data User exit

SAPLRSAU_003

Optional

SAPLRSAU_004

Optional

这些用户出口的配置可能是系统与系统间是不同的。举例来说明,我们有一个数据抽取器用来从R3中抽取购买订单数据,假设我们要添加一些字段到 2LIS_02_ITM输出结构。

我们这时就需要用代码填充这些字段,然后在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语句应该以索引顺序书写;

使用ABAP排序而不是Order By。收集完所有记录,在内表中进行排序;

系统所提供的进行性能分析的工具:

SE30,对ABAP程序进行全面分析,无论是不是数据库访问的;

ST05,进行SQL级别的分析。

限制

通常来说,当加载程序以后,在运行时会消耗额外的处理器时间和内存。所以程序的性能也会受到硬件的限制。

转载于:https://www.cnblogs.com/libihui422/archive/2010/08/18/1802212.html

在SAP BW中使用ABAP相关推荐

  1. 所有归类于 ‘SAP BW’ 分类的日志

    BW:SAP STMS配置 1.SM59,删除所有包含STMS的连接 2.STMS,Overview-System,删除所有配置 3.登陆至Client 000 UserName SAP* PassW ...

  2. SAP BW查看数据源提取方法

    终于知道如何查看数据源来源了,之前困扰了很久,一直想知道SAP BW中DATASOURCE是如何获取数据. 事实上DATASOURCE都是根据数据结构(ExtractStruct.)所定义的字段获取字 ...

  3. SAP BW实施实时报表的方法(流式处理链)

    最近,我的一位客户询问我实施实时报告的可能方法.在准备过程中,我的研究还涵盖了"流式处理链",结果令人惊讶 版本适用:SAP BW 7.5 和 SAP BW/4HANA(任何版本) ...

  4. SAP CRM IBASE在ABAP update task中实现update和delete操作

    本文介绍SAP CRM IBASE在ABAP update task中实现update和delete操作的原理. 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  5. SAP教程中的ALV报告 - ABAP列表查看器-012

    SAP教程中的ALV报告 - ABAP列表查看器-012 任何报告的常见所需功能是"列对齐",排序,过滤,小计,总计等.要从头开始实现这些,需要投入大量的编码工作.为了避免这种情况 ...

  6. SAP 中的 ABAP 查询教程:SQ01、SQ02、SQ03-017

    SAP 中的 ABAP 查询教程:SQ01.SQ02.SQ03-017 ABAP 查询应用程序用于创建 SAP 系统中尚不存在的报告.它是为对ABAP编程知之甚少或一无所知的用户设计的.ABAP 查询 ...

  7. SAP BW/4 HANA亮点解析

    SAP BW/4 HANA亮点解析 http://mp.weixin.qq.com/s/SIPSWDo95pXKGjG66z6iHw 2016 年 8 月 31 日SAP正式向全球推出了新一代的数据仓 ...

  8. SAP BW顾问如何保持市场竞争力?

    跟大部分电工一样,SAP顾问也经常有迷茫的时候.因为,这个世界变化实在太快了.每一个电工,总是在担心自己会不会被飞速发展的技术所淘汰.那 么,作为 一个BW顾问,应该如何保持市场竞争力呢?我觉得需要两 ...

  9. SAP BW介绍(zt)

    SAP BW介绍与咨询 随着近几年信息技术的日益成熟和ERP软件供应商对市场的大力培育,ERP系统已逐渐被企业界广泛接受,并成为不少成功企业提高经营管理效益的关键事务处理系统.ERP的成功实施和应用, ...

最新文章

  1. 记住密码后input黄色背景处理
  2. linux c++ 函数 查看,在C++ man pages中查询C++的函数
  3. 重置linux桌面,Ubuntu 18.04小贴士:重置Gnome桌面与使用隐藏的屏幕录像工具
  4. 高情商的孩子是这样的
  5. 点击事件调用匿名函数如何传参_事件发布/订阅模式的简单实现
  6. 创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
  7. 计算机的登入灯出操作系统,为什么计算机不能像电灯一样瞬时打开?
  8. 解决python报错写入文件 io.UnsupportedOperation: not writable
  9. PowerDesigner如何设计表之间的关联
  10. ArXiv最火深度学习框架:TensorFlow第一,PyTorch第二!|湾区人工智能
  11. 一场价值4500亿的抉择
  12. 看完本文若不能让你学通“Python”,我将永远退出IT界
  13. 64 位Instant Client连接64位PLSQL(win10)
  14. CAD打印 acad.ctb丢失
  15. java实现注册的短信验证码
  16. 通信用水泥杆和防腐木电杆在使用中有什么不同
  17. Slurm作业启动原理
  18. 最新v6.0 tgroupon分销系统源码+TGROUPON卖货系统 ECSHOP+ECTOUCH内核
  19. MATLAB在线编辑网站及使用教程
  20. Jenkins环境部署

热门文章

  1. Android:屏幕旋转
  2. Oracle 的 DBMS_SCN 修正以及 SCN 的 auto-rollover 新特性
  3. 解决SqlServer2008修改表后保存时出现“save changes is not permitted…”问题
  4. linux shell 中的sleep命令
  5. fscanf()函数具体解释
  6. C# 转换人民币大小金额(WinForm、Asp.Net)
  7. dubbo启动顺序问题
  8. Beaker:一个基于Electron的点对点Web浏览器
  9. 【QwQ】乱七八糟的置顶
  10. openstack组件之nova