乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在SAP BW中使用ABAP

       sarah1984 2010-11-23

      前言

      本文的目的是講述如何在BW中使用ABAP編程。在每一個(gè)項(xiàng)目中,正確使用ABAP編程會(huì)對(duì)正確的業(yè)務(wù)建模起到積極作用。在設(shè)計(jì)和藍(lán)圖階段,一個(gè)核心的功能流程是類(lèi)比于如何在BW中完成類(lèi)似于R3中的業(yè)務(wù)流程。SAP提供了多種路徑來(lái)實(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程序是有明顯不同的。要理解這樣的開(kāi)發(fā)會(huì)給我們帶來(lái)什么,我們先看看BW的大致結(jié)構(gòu)。總體來(lái)首,我們是處理一些對(duì)象,這些對(duì)象是基于某種配置,比如ODS和InfoCube的連接,或者對(duì)源系統(tǒng)、數(shù)據(jù)源的創(chuàng)建。通常我們不會(huì)構(gòu)造屏幕程序和多個(gè)用戶接口去獲得其他的功能,這是在BW中的開(kāi)發(fā)與R3中的顯著不同。在BW中,我們使用ABAP來(lái)按照要求轉(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)用。無(wú)論是ODS或者是InfoCube,每一個(gè)更新結(jié)果都是一條更新規(guī)則的執(zhí)行結(jié)果。

      BW Start Routines

      BW更新規(guī)則中的Start routine是用來(lái)對(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)容或者通過(guò)function module、user exit在抽取時(shí)填充數(shù)據(jù)字段或者修改數(shù)據(jù)。

      For選項(xiàng)1:

      這是最直接的方式在ABAP中對(duì)于數(shù)據(jù)進(jìn)行修改,而不通過(guò)標(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ù)源,確保新增加的字段沒(méi)有被隱藏。否則,新添字段不會(huì)在新導(dǎo)出BW系統(tǒng)中被看見(jiàn)。在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)間是不同的。舉例來(lái)說(shuō)明,我們有一個(gè)數(shù)據(jù)抽取器用來(lái)從R3中抽取購(gòu)買(mǎi)訂單數(shù)據(jù),假設(shè)我們要添加一些字段到 <!--[endif]-->2LIS_02_ITM輸出結(jié)構(gòu)。

      我們這時(shí)就需要用代碼填充這些字段,然后在BW中重新初始化。雙擊 <!--[endif]-->SAPLRSAU_001會(huì)打開(kāi) <!--[endif]-->SAPLRSAU_001程序的頂層。然后點(diǎn)擊包含 <!--[endif]-->ZZRSAU01。這里就是寫(xiě)自定義邏輯的地方。當(dāng)你開(kāi)始數(shù)據(jù)抽取,輸出結(jié)構(gòu)被標(biāo)準(zhǔn)抽取的初始數(shù)據(jù)填充時(shí),你會(huì)發(fā)現(xiàn)這時(shí)可以向每一條記錄添加字段。在這個(gè)用戶出口中,你可以循環(huán)訪問(wè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中可以通過(guò)抽取檢查,來(lái)查看新的數(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ù),而不是通過(guò)ABAP代碼去自己實(shí)現(xiàn);

      <!--[endif]-->

      Not recommended

                  Maxamount = 0.

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

                   Check mzordods-zamount>maxamount.

                   Maxamount = mzordods-zamount.

                  Endselect.

       

       

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

      <!--[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值查詢(xún);

      2,如果基于FOR ALL Entries查詢(xún)的表是空的,所有行都會(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)該以索引順序書(shū)寫(xiě);

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

       

       

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

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

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

      限制

      通常來(lái)說(shuō),當(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)買(mǎi)等信息,謹(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)論公約

        類(lèi)似文章 更多