小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

在SAP BW中使用ABAP

 sarah1984 2010-11-23

前言

本文的目的是講述如何在BW中使用ABAP編程。在每一個(gè)項(xiàng)目中,正確使用ABAP編程會(huì)對(duì)正確的業(yè)務(wù)建模起到積極作用。在設(shè)計(jì)和藍(lán)圖階段,一個(gè)核心的功能流程是類比于如何在BW中完成類似于R3中的業(yè)務(wù)流程。SAP提供了多種路徑來實(shí)施這樣的業(yè)務(wù)流程。本文就會(huì)講述哪里、如何在BW中進(jìn)行ABAP編程。同時(shí),也會(huì)給出一些基本的SAP推薦,對(duì)于如何改善ABAP代碼的執(zhí)行。文中的例子會(huì)包括R3數(shù)據(jù)源的變換,創(chuàng)建通用的R3數(shù)據(jù)抽取器。在BW中,大部分對(duì)象都是內(nèi)部關(guān)聯(lián)的,我們可以在多個(gè)目標(biāo)數(shù)據(jù)中共享數(shù)據(jù)。因此,我們需要知道我們是如何處理數(shù)據(jù)、更新記錄和在哪里使用ABAP程序控制這些更新。

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

在SAP R3和BW之間,對(duì)于我們?nèi)绾问褂肁BAP程序是有明顯不同的。要理解這樣的開發(fā)會(huì)給我們帶來什么,我們先看看BW的大致結(jié)構(gòu)??傮w來首,我們是處理一些對(duì)象,這些對(duì)象是基于某種配置,比如ODS和InfoCube的連接,或者對(duì)源系統(tǒng)、數(shù)據(jù)源的創(chuàng)建。通常我們不會(huì)構(gòu)造屏幕程序和多個(gè)用戶接口去獲得其他的功能,這是在BW中的開發(fā)與R3中的顯著不同。在BW中,我們使用ABAP來按照要求轉(zhuǎn)換數(shù)據(jù),也可以在抽取、更新時(shí)進(jìn)行數(shù)據(jù)處理。

<!--[endif]-->

Technical Area

描述

BEx User Exit

允許為了key figure相關(guān)計(jì)算在運(yùn)行時(shí)創(chuàng)建和激活變量。這個(gè)用戶出口會(huì)在每次BEx執(zhí)行時(shí)被調(diào)用。

R/3 User Exit

這個(gè)用戶出口是在R3的CMOD中定義,可以在要提取結(jié)構(gòu)中填充其他的字段。我們也可以創(chuàng)建額外的業(yè)務(wù)邏輯在數(shù)據(jù)傳輸至BW前。

BW Transfer rules

這些規(guī)則在數(shù)據(jù)從R3傳輸?shù)紹W時(shí)被運(yùn)用,或者在BW中導(dǎo)出數(shù)據(jù)源和創(chuàng)建InSource時(shí)。

BW Update Rules

這些規(guī)則在數(shù)據(jù)被更新至目標(biāo)數(shù)據(jù)時(shí)調(diào)用。無論是ODS或者是InfoCube,每一個(gè)更新結(jié)果都是一條更新規(guī)則的執(zhí)行結(jié)果。

BW Start Routines

BW更新規(guī)則中的Start routine是用來對(duì)所有數(shù)據(jù)起作用的,并不是像某條更新規(guī)則只是對(duì)某個(gè)data element起作用。

 

在R3中,為BW可以做的ABAP編程選項(xiàng)

選項(xiàng)1:

 

      為已有的輸出結(jié)構(gòu)添加字段;

      對(duì)于這些字段運(yùn)用ABAP邏輯。

選項(xiàng)2:

     為數(shù)據(jù)集創(chuàng)建一個(gè)表或者視圖;

     在RSO2中創(chuàng)建一個(gè)通用的抽取器;

     或者運(yùn)用自定義ABAP程序去填充表內(nèi)容或者通過function module、user exit在抽取時(shí)填充數(shù)據(jù)字段或者修改數(shù)據(jù)。

For選項(xiàng)1:

這是最直接的方式在ABAP中對(duì)于數(shù)據(jù)進(jìn)行修改,而不通過標(biāo)準(zhǔn)的抽取器。我們就使用最基本的概念,為了額外的字段去填充結(jié)構(gòu)。當(dāng)我們對(duì)要輸出的結(jié)構(gòu)增加新的字段或者要激活時(shí),我們可以在用戶出口中看到這些字段。當(dāng)我們?yōu)閷?dǎo)出結(jié)構(gòu)增加了字段之后,是可以在BW目標(biāo)系統(tǒng)中看到的。一旦這些字段被添加至輸出結(jié)構(gòu),到RSA6中,Post Processing  Datasources可以查看修改的數(shù)據(jù)源。雙擊數(shù)據(jù)源,確保新增加的字段沒有被隱藏。否則,新添字段不會(huì)在新導(dǎo)出BW系統(tǒng)中被看見。在R3中,如何激活這些數(shù)據(jù)字段在R3到BW的用戶出口中。進(jìn)入CMOD,找到自己的BW project,這個(gè)項(xiàng)目可能是在用戶命名空間中的,找到正確的項(xiàng)目后,選擇“display components”,然后F7。會(huì)顯示出所有的BW用戶出口組件,你會(huì)發(fā)現(xiàn)有四個(gè)用戶出口:

<!--[endif]-->

User Exit

Description

SAPLRSAU_001

Transactional data user exit

SAPLRSAU_002

Master Data User exit

SAPLRSAU_003

Optional

SAPLRSAU_004

Optional

這些用戶出口的配置可能是系統(tǒng)與系統(tǒng)間是不同的。舉例來說明,我們有一個(gè)數(shù)據(jù)抽取器用來從R3中抽取購(gòu)買訂單數(shù)據(jù),假設(shè)我們要添加一些字段到 <!--[endif]-->2LIS_02_ITM輸出結(jié)構(gòu)。

我們這時(shí)就需要用代碼填充這些字段,然后在BW中重新初始化。雙擊 <!--[endif]-->SAPLRSAU_001會(huì)打開 <!--[endif]-->SAPLRSAU_001程序的頂層。然后點(diǎn)擊包含 <!--[endif]-->ZZRSAU01。這里就是寫自定義邏輯的地方。當(dāng)你開始數(shù)據(jù)抽取,輸出結(jié)構(gòu)被標(biāo)準(zhǔn)抽取的初始數(shù)據(jù)填充時(shí),你會(huì)發(fā)現(xiàn)這時(shí)可以向每一條記錄添加字段。在這個(gè)用戶出口中,你可以循環(huán)訪問所有數(shù)據(jù)然后添加相應(yīng)字段。到最后一步時(shí),可以把新的數(shù)據(jù)字段添加到抽取出結(jié)構(gòu)中。

For選項(xiàng)2:

      進(jìn)入SE11,查看View,輸入命名Z****,創(chuàng)建它;

      當(dāng)要求輸入development class時(shí),輸入正確的development class然后保存,然后會(huì)進(jìn)入view的初始定義界面;

      添加需要的字段,同時(shí)補(bǔ)充表名;

      創(chuàng)建一個(gè)自定義程序區(qū)填充這些base table;

      當(dāng)結(jié)束激活以后,可以查看在view中有多少條數(shù)據(jù)被返回;

      當(dāng)然view被創(chuàng)建完畢后,可以去RSO2中查看;

      在RSA3中可以通過抽取檢查,來查看新的數(shù)據(jù)源;

      你可以雙擊RSA3帶有view定義的輸出。

 

如何改善性能

利用選擇條件,盡量select具體的字段名;

<!--[endif]-->

       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.

 

 

采用系統(tǒng)自帶的聚合函數(shù),而不是通過ABAP代碼去自己實(shí)現(xiàn);

<!--[endif]-->

Not recommended

            Maxamount = 0.

           Select * from /bic/mzordods where soursystem = ‘I2P’.

             Check mzordods-zamount>maxamount.

             Maxamount = mzordods-zamount.

            Endselect.

 

 

不要每次通過select語(yǔ)句查詢一條記錄然后插入internal table,推薦一次性將所有要查詢的記錄全部插入 ;

<!--[endif]-->

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

 

 

在對(duì)內(nèi)表進(jìn)行查找時(shí),使用二分查找方法;

<!--[endif]-->

Not Recommended

Read table itab_cust_t with key soursystem=’I2P’.

 

Recommended

Read table itab_cust_t with key soursystem=’I2P’ binary search.

 

 

在操作兩個(gè)內(nèi)表時(shí),盡量使用append插入行,當(dāng)然這兩個(gè)內(nèi)表的結(jié)構(gòu)是要相同的;

<!--[endif]-->

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.

 

 

使用表緩存,當(dāng)如下情況時(shí),表緩存會(huì)被忽略:

1, select distinct

2, select ... for update

3, Order by, group by, having clause

4, Joins

使用FOR ALL Entries,系統(tǒng)會(huì)自動(dòng)創(chuàng)建outer join,相應(yīng)缺點(diǎn)有:

1,雷同數(shù)據(jù)會(huì)被自動(dòng)清除掉,如果不希望這樣,應(yīng)該在select中加入唯一key值查詢;

2,如果基于FOR ALL Entries查詢的表是空的,所有行都會(huì)被插入目標(biāo)表;

3,如果用于FOR ALL Entries的表記錄很大,這種情況下性能是下降而不是提升的。

<!--[endif]-->

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語(yǔ)句。當(dāng)一個(gè)表有多個(gè)索引時(shí),where語(yǔ)句應(yīng)該以索引順序書寫;

使用ABAP排序而不是Order By。收集完所有記錄,在內(nèi)表中進(jìn)行排序;

 

 

系統(tǒng)所提供的進(jìn)行性能分析的工具:

SE30,對(duì)ABAP程序進(jìn)行全面分析,無論是不是數(shù)據(jù)庫(kù)訪問的;

ST05,進(jìn)行SQL級(jí)別的分析。

限制

通常來說,當(dāng)加載程序以后,在運(yùn)行時(shí)會(huì)消耗額外的處理器時(shí)間和內(nèi)存。所以程序的性能也會(huì)受到硬件的限制。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多