之?dāng)?shù)據(jù)源 自定義.doc_第1頁
之?dāng)?shù)據(jù)源 自定義.doc_第2頁
之?dāng)?shù)據(jù)源 自定義.doc_第3頁
之?dāng)?shù)據(jù)源 自定義.doc_第4頁
之?dāng)?shù)據(jù)源 自定義.doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Chunguangz-技術(shù)人員參考 /pages/chunguangzBW提供了在R3端,自定義數(shù)據(jù)源的功能,與FILE和WEBSERVICE相比,可以方便ABAP人員開發(fā)維護,并且,輕松實現(xiàn)了DELTA的功能。自定義的數(shù)據(jù)源的數(shù)據(jù)提取方式分為3種:數(shù)據(jù)庫/視圖:SAP提供的這種提取方式,系統(tǒng)為你定義好了提取程序,通過在數(shù)據(jù)庫中,設(shè)置增量相關(guān)字段(如:時間戳、日期、數(shù)字),來輕松實現(xiàn)DELTA(增量)抽取,是BW中最常用的自定義數(shù)據(jù)源,一般是通過程序?qū)?shù)據(jù)寫入表中。信息集:即:SAP QUERY??梢栽O(shè)置表間相關(guān)的邏輯,相當(dāng)于JOIN語句,把關(guān)聯(lián)的字段作為數(shù)據(jù)源。FUNCTION MODULE:通過程序控制數(shù)據(jù)的提取,可以設(shè)置增量字段,也可以不設(shè)置,通過一定邏輯將數(shù)據(jù)抽取,可以實現(xiàn)前兩種方式的自定義開發(fā)。這是最靈活的自定義數(shù)據(jù)源。下面,我們以數(shù)據(jù)庫和FM的方式為例,介紹自定義數(shù)據(jù)源的應(yīng)用:數(shù)據(jù)庫/視圖:1. 創(chuàng)建用于數(shù)據(jù)源的數(shù)據(jù)表:(SE11將允許表維護勾選,方便測試)其中,UPT_TIMESTAMP是我們設(shè)置的增量相關(guān)字段:2. 創(chuàng)建自定義數(shù)據(jù)源:(RSO2)創(chuàng)建ZRSO01數(shù)據(jù)源,點擊“創(chuàng)建”:按以下參數(shù)輸入,提取結(jié)構(gòu)不允許輸入,激活后,系統(tǒng)會為數(shù)據(jù)源自動創(chuàng)建,點擊“一般增量”按鈕:按以下屏幕輸入?yún)?shù),并保存:增量字段名:這個字段在數(shù)據(jù)庫中存放了錄入時間戳(或日期或數(shù)字),數(shù)據(jù)抽取程序會按照BW請求的時間參數(shù)從數(shù)據(jù)庫中抽取數(shù)據(jù)。時間標(biāo)記:通過時間戳方式實現(xiàn)增量,即:YYYYMMDDhhmmss格式。日歷天數(shù):按照天為單位實現(xiàn)增量。數(shù)字指針:按照數(shù)字增量抽取。安全間隔上限:如果“時間標(biāo)記”或“日歷天數(shù)”勾選,那么此次可以設(shè)置,表示將請求時間戳 減去 上限設(shè)置的間隔后的時間戳作為數(shù)據(jù)抽取條件。舉例如下:BW最后一個抽取時間戳為 20100101120000,下次抽取時間為20100101123000,用戶在12:25分做了一個記錄,直到12:35才保存。這樣,這個記錄將不被抽取到BW中。我們設(shè)置的間隔上限,就是為了防止這樣的情況,如我們設(shè)置3600,表示在123000抽取的時候,將1小時之前的記錄再次抽取一遍,這樣防止數(shù)據(jù)的遺漏。重復(fù)抽取的數(shù)據(jù)只能將對DELTA抽取有影響,我們只能使用通過DSO上載的方式才能保證上載的數(shù)據(jù)正確。具體的解釋將在DELTA抽取原理文章中介紹。同理,對于數(shù)據(jù)指針,我們不是設(shè)置上限,而是設(shè)置下限,請根據(jù)您的需求具體設(shè)置。實時的激活:SAP解釋是是否適用于RDA方式的數(shù)據(jù)源。更改記錄的新狀態(tài)/附加增量:更改記錄的新狀態(tài)即表示使用后鏡像(AIE)的方式上載數(shù)據(jù)。附加增量表示以ADD方式上載數(shù)據(jù)。也是DELTA原理的內(nèi)容,以后在介紹,我們這里選擇AIE的方式上載。(簡單說就是以最后更改的記錄為準(zhǔn)上載。ADD即將改變的差額上載)3. 執(zhí)行數(shù)據(jù)源:接下來,我們要在BW數(shù)據(jù)源中復(fù)制目錄下的元數(shù)據(jù),并激活數(shù)據(jù)源,然后創(chuàng)建信息包,此處不再贅述。其中,初始化信息包公司代碼被限制為1003。向數(shù)據(jù)庫中手工添加數(shù)據(jù)(SE16):執(zhí)行初始化信息包:我們會在RSA7中,查看多了ZDSO01的初始化記錄和統(tǒng)計信息點擊,查看統(tǒng)計記錄:從中,我們可以看出BW系統(tǒng)請求的時間戳為20100318002659。查看數(shù)據(jù)源的請求記錄,生成以下記錄:表示數(shù)據(jù)源中,1003的4條記錄被抽取到BW中:接下來,我們在數(shù)據(jù)庫中在錄入2條記錄,如下:然后執(zhí)行增量抽取信息包,結(jié)果如下,只將一條記錄上載我用的版本比較低,在這里,安全間隔沒有起作用。在上載前可以使用RSA3測試,可以在FM RSA3_GEN_GET_DATA上設(shè)置斷點,查看SELECT語句:* Open Cursor for dynamical SELECT open cursor with hold g_cursor for select * from (g_s_oltpsource-extractor) where (l_t_dynamic_select). endif.* Fetch first data package fetch next cursor g_cursor appending corresponding fields of table e_t_data package size g_s_interface-maxsize.使用FM抽取數(shù)據(jù):基本與以上步驟相同,我們以提取上例中的表數(shù)據(jù)為例,在數(shù)據(jù)源設(shè)置FM:下面介紹FM的創(chuàng)建:到SE80中復(fù)制FUNCTION GROUP RSAX,到新的FG:選擇RSAX_BIW_GET_DATA_SIMPLE,選擇復(fù)制,復(fù)制到我們自己的FM Z_GET_DATA_FM對FM進(jìn)行修改,要點如下:1)將TABLES中的E_T_DATA的參考值,改為我們的數(shù)據(jù)源表。2)修改源程序:程序中,注明MY COMMENT的地方是需要我們修改的位置。大家可以通過RSA3測試跟蹤下效果,此處不再贅述,其他與數(shù)據(jù)庫數(shù)據(jù)源是一樣的。FUNCTION Z_GET_DATA_FM.*-*Local interface:* IMPORTING* VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR* VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL* VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL* VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL* VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL* VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF* TABLES* I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL* I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL* E_T_DATA STRUCTURE ZZC_TEST02 OPTIONAL* EXCEPTIONS* NO_MORE_DATA* ERROR_PASSED_TO_MESS_HANDLER*-* Example: DataSource for table SFLIGHT* tables: sflight. MY COMMNET TABLES: ZZC_TEST02.* Auxiliary Selection criteria structure DATA: L_S_SELECT TYPE SRSC_S_SELECT.* Maximum number of lines for DB table STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,* counter S_COUNTER_DATAPAKID LIKE SY-TABIX,* cursor S_CURSOR TYPE CURSOR.* Select ranges* RANGES: L_R_CARRID FOR SFLIGHT-CARRID, MY COMMENT* L_R_CONNID FOR SFLIGHT-CONNID. MY COMMENTRANGES: L_R_BUKRS FOR T001-BUKRS.RANGES: L_R_TIMES FOR ZZC_TEST02-UPT_TIMESTAMP.* Initialization mode (first call by SAPI) or data transfer mode* (following calls) ? IF I_INITFLAG = SBIWA_C_FLAG_ON.* Initialization: check input parameters* buffer input parameters* prepare data selection* Check DataSource validity CASE I_DSOURCE.* when 0SAPI_SFLIGHT_SIMPLE. MY COMMENT WHEN ZRSO02. WHEN OTHERS. IF 1 = 2. MESSAGE E009(R3). ENDIF.* this is a typical log call. Please write every error message like this LOG_WRITE E message type R3 message class 009 message number I_DSOURCE message variable 1 . message variable 2 RAISE ERROR_PASSED_TO_MESS_HANDLER. ENDCASE. APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.* Fill parameter buffer for data extraction calls S_S_IF-REQUNR = I_REQUNR. S_S_IF-DSOURCE = I_DSOURCE. S_S_IF-MAXSIZE = I_MAXSIZE.* Fill field list table for an optimized select statement* (in case that there is no 1:1 relation between InfoSource fields* and database table fields this may be far from beeing trivial) APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS. ELSE. Initialization mode or data extraction ?* Data transfer: First Call OPEN CURSOR + FETCH* Following Calls FETCH only* First data package - OPEN CURSOR IF S_COUNTER_DATAPAKID = 0.* Fill range tables BW will only pass down simple selection criteria* of the type SIGN = I and OPTION = EQ or OPTION = BT.* MY COMMENT* loop at s_s_if-t_select into l_s_select where fieldnm = CARRID.* move-corresponding l_s_select to l_r_carrid.* append l_r_carrid.* endloop.* loop at s_s_if-t_select into l_s_select where fieldnm = CONNID.* move-corresponding l_s_select to l_r_connid.* append l_r_connid.* endloop.* LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = BUKRS. MOVE-CORRESPONDING L_S_SELECT TO L_R_BUKRS. APPEND L_R_BUKRS. ENDLOOP. LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = UPT_TIMESTAMP. MOVE-CORRESPONDING L_S_SELECT TO L_R_TIMES. APPEND L_R_TIMES. ENDLOOP.* Determine number of database records to be read per FETCH statement* from input parameter I_MAXSIZE. If there is a one to one relation* between DataSource table lines and database entries, this is trivial.* In other cases, it may be impossible and some estimated value has to* be determined. OPEN CURSOR WITH HOLD S_CURSOR FOR* SELECT (S_S_IF-T_FIELDS) FROM SFLIGHT MY COMMENT* WHERE CARRID IN L_R_CARRID AND* CONNID IN L_R_CONNID. SELECT * FROM ZZC_TEST02 WHERE BUKRS IN L_R_BUKRS AND UPT_TIMESTAMP IN L_R_TIMES. ENDIF. First data package ?* Fetch records into interface table.* named E_T_Name of extract structure. FETCH NEXT CURSOR S_CURSOR APPENDING CORRESPONDING FIELDS OF TABLE E_T_DATA PACKAGE SIZE S_S_IF-MAXSIZE. IF SY-SUBRC 0. CLOSE CURSOR S_CURSOR. RAISE NO_MORE_DATA. ENDIF. S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1. ENDIF. Initialization mode or data extraction ?ENDFUNCTION.SAP中的增量機制,可以有助系統(tǒng)提高數(shù)據(jù)抽取效率,在初始化執(zhí)行后,每天只更新新增和修改了的記錄。在我們正常的使用或開發(fā)中,這些東西并不需要知道,只要數(shù)據(jù)正常上載,就好了,此處所介紹的內(nèi)容之為大家參考用。在介紹DELTA機制之前,先介紹下DSO和CUBE:DSO:一般DSO用來存儲明細(xì)數(shù)據(jù),其結(jié)構(gòu)比較簡單。對于值的轉(zhuǎn)換(決定了可用的DELTA類型),既可以使用合計,也可以使用覆蓋的方式。激活DSO后,其在后臺對應(yīng)3個數(shù)據(jù)表:A表,存放了最后激活的數(shù)據(jù)。即存放了匯總后的數(shù)據(jù)。LOG表:存儲了數(shù)據(jù)變化的數(shù)據(jù)記錄N表,NEW表,臨時存放更新的數(shù)據(jù),待激活后,將數(shù)據(jù)轉(zhuǎn)入A表和LOG表以上數(shù)據(jù)表,可以通過在SE11中,描述中搜索DSO技術(shù)名稱找到CUBE:典型的星型架構(gòu)。CUBE只支持?jǐn)?shù)據(jù)值的合計上載。建立了CUBE之后,可以到SE11中,通過在表名中搜索CUBE的名稱,找到對應(yīng)的維表和事實表。同樣都是數(shù)據(jù)模型,而DSO更多用于存儲明細(xì)數(shù)據(jù),星型架構(gòu)的CUBE更適合作為分析數(shù)據(jù)源。關(guān)于具體的DSO和CUBE,我們以后再介紹下面給大家介紹兩個表,是定義DELTA類型的基本表,如下:ROOSOURCE:定義了每個數(shù)據(jù)源的屬性,大部分屬性我們在創(chuàng)建自定義數(shù)據(jù)源時已介紹,請參考/pages/chunguangz/blog/archive/2010/03/18/401671.aspx,其中,DP列定義了增量類型。RODELTAM:定義了每種增量提取方式的方法,即:DP的屬性DP:增量處理名稱T: 標(biāo)識是否為 僅全量更新NIM:標(biāo)識是否為傳輸 新鏡像(即:新數(shù)據(jù)的狀態(tài))BIM:標(biāo)識是否為傳輸 前鏡像(即:更新前的狀態(tài))AIM:標(biāo)識是否為傳輸 后鏡像(即:更新后的狀態(tài))ADD:標(biāo)識是否為傳輸 差額鏡像(即:更改的差額狀態(tài))DID:標(biāo)識是否為傳輸 刪除鏡像(即:刪除狀態(tài))RIM:標(biāo)識是否為傳輸 反轉(zhuǎn)鏡像(即:沖銷的狀態(tài))SER:標(biāo)識為 哪種序列化方式,即:數(shù)據(jù)的排序1.無所需序列化2.所需的請求序列化3.所需的數(shù)據(jù)包序列化類型:DELTA處理的類型。標(biāo)識何種數(shù)據(jù)抽取方式。BW中的增量機制就是圍繞RODELTAM表設(shè)置來進(jìn)行的,首先介紹增量類型的定義,我們假設(shè)有一筆業(yè)務(wù)創(chuàng)建100,而后更改為80,然后刪除,對于以上設(shè)置,會產(chǎn)生什么樣的影響: ORDER NOSTATUSQTYRECODE TYPE創(chuàng)建訂單100000000CREATED100N將帶有記錄類型為的新建記錄上載到BW,BW以N載入DSO更改 100-80100000000CHANGED-100X前鏡像生成100000000CHANGED80“”后鏡像生成100000000CHANGED-20A差額鏡像生成標(biāo)志刪除100000000DELETED0R反轉(zhuǎn)鏡像生成100000000D刪除鏡像生成創(chuàng)建100的業(yè)務(wù):此為創(chuàng)建操作,傳輸新鏡像,在R3端,以表示新鏡像更改100-80:如果前鏡像設(shè)置:以X表示前鏡像傳輸。如果后鏡像設(shè)置:以表示后鏡像傳輸如果差額鏡像設(shè)置:以A表示差額鏡像傳輸我們下面用兩種類型來說明DELTA在R3和BW端的處理步驟:ABR:MM中采購用到這種類型,我們可以看出ABR存在新鏡像、前鏡像、后鏡像和反轉(zhuǎn)鏡像,我們創(chuàng)建一采購訂單,并查看,R3數(shù)據(jù)源給BW提供的數(shù)據(jù)。根據(jù)ABR的定義,對于采購訂單操作,應(yīng)按以下順序傳輸數(shù)據(jù):ORDER NOSTATUSQTYRECODE TYPE創(chuàng)建訂單100000000CREATED100“”將帶有記錄類型為的新建記錄上載到BW,BW以N載入DSO更改 100-80100000000CHANGED-100X前鏡像生成100000000CHANGED80“”后鏡像生成標(biāo)志刪除100000000DELETED0R反轉(zhuǎn)鏡像生成通過RSA7查看統(tǒng)計的待傳輸數(shù)據(jù):首先創(chuàng)建采購訂單:訂單號為4510000010查看RSA7的統(tǒng)計數(shù)據(jù):將100改為80:將10項目標(biāo)志位刪除: 關(guān)于在BW中的數(shù)據(jù)上載步驟: 對于存在多種鏡像屬性的數(shù)據(jù)源,系統(tǒng)會自動為其增加ROCANCEL字段,作為傳輸鏡像屬性值用。我們這里的采購訂單數(shù)據(jù)源,就是這樣的類型。我們知道,CUBE只能合計數(shù)據(jù),DSO既可以做合計,也可以做覆蓋的匯總,所以,ABR的DELTA類型是既適合CUBE又適合DSO直接更新的。用上面的數(shù)據(jù)說明,訂單傳輸?shù)胶嫌嫷母履J剑–UBE或DSO),因為連帶著前鏡像一起傳輸,所以,匯總后的結(jié)果就是最后的結(jié)果0。如果為覆蓋的話(DSO),那么序列化后的最后狀態(tài)為“R”的記錄,這樣也實現(xiàn)數(shù)據(jù)的成功上載。這種方式需要數(shù)據(jù)源的序列化,對于ABR設(shè)置為2。因此,這種方式既可以直接上載到DSO也可以直接上載到CUBE。但我們一般都會經(jīng)過DSO,保證數(shù)據(jù)模型中,存儲了所有的明細(xì)數(shù)據(jù)。接下來,我們再對FI的數(shù)據(jù)源和自定義的數(shù)據(jù)源做一下分析:首先說明一下,自定義的數(shù)據(jù)源默認(rèn)都是AIE的增量處理方式,即:只提供后鏡像的數(shù)據(jù)源,而且沒有提供更改增量處理的方法。與FI的數(shù)據(jù)源相似。這樣就說明,這些數(shù)據(jù)源只能首先上載到DSO,然后在進(jìn)行分析。以我們前面做的自定義的數(shù)據(jù)源為例:AIE只支持后鏡像,即:所有的新建或修改后,都只將最后的狀態(tài)傳輸?shù)紹W,并且只支持一種傳輸方式的數(shù)據(jù)源不建立ROCANCEL字段,默認(rèn)為空。執(zhí)行初始化,并將數(shù)據(jù)上載到DSO,不激活DSO數(shù)據(jù),我們在后臺數(shù)據(jù)表中,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論