HR数据抽取:通过 Read Master Data 转换规则读取时间相关主属性数据
生活随笔
收集整理的這篇文章主要介紹了
HR数据抽取:通过 Read Master Data 转换规则读取时间相关主属性数据
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
員工?0HR_PA_0?業(yè)務(wù)數(shù)據(jù)源中有一個(gè)CALMONTH日歷年/月的字段,只要員工還在職,每個(gè)員工每個(gè)月都會(huì)產(chǎn)生一條數(shù)據(jù): ? ? 人事事件?0HR_PA_1?業(yè)務(wù)數(shù)據(jù)源中有一個(gè)CALDAY日歷天的字段,只要員工發(fā)生人事事件(如入職、晉升、調(diào)離、離職等),該數(shù)據(jù)源中就會(huì)產(chǎn)生一條數(shù)據(jù): ? 需求:將 0HR_PA_0 、0HR_PA_1 兩個(gè)數(shù)據(jù)源中的數(shù)據(jù)抽到DSO后,需要在原有的數(shù)據(jù)字段上附加上 人事子范圍 、公司代碼、員工組 、員工子組、人事范圍、雇傭狀態(tài) 、組織單位、業(yè)務(wù)范圍? 這些數(shù)據(jù)字段(從上面圖中可以看到這兩個(gè)業(yè)務(wù)數(shù)據(jù)源中原本沒有這些字段),即需要將主數(shù)據(jù)屬性直接存入到交易數(shù)據(jù)中(而非導(dǎo)航屬性那樣,主數(shù)據(jù)屬性是通過導(dǎo)航的方式關(guān)聯(lián)起來(lái),而這里是要求將這些主數(shù)據(jù)屬性直接存儲(chǔ)到Fact表的維度表中,即要求以場(chǎng)景A來(lái)建模,場(chǎng)景A具體應(yīng)用及實(shí)現(xiàn)請(qǐng)參照另一篇文章),如何用場(chǎng)景A來(lái)實(shí)現(xiàn)? ? 分析:現(xiàn)需要將業(yè)務(wù)數(shù)據(jù)源中原本沒有的這些字段附加到業(yè)務(wù)數(shù)據(jù)上,除了通過直接對(duì)業(yè)務(wù)數(shù)據(jù)源進(jìn)行增強(qiáng)外,針對(duì)這兩個(gè)業(yè)務(wù)數(shù)據(jù)源(?0HR_PA_0 、0HR_PA_1 ),有更簡(jiǎn)便的方法就是在DSO層,通過 ?Read Master Data 讀取主數(shù)據(jù)轉(zhuǎn)換規(guī)則 將這些附加字段數(shù)據(jù)從相應(yīng)主數(shù)據(jù)中讀取出來(lái)(前提是附加的這些字段是交易數(shù)據(jù)能關(guān)聯(lián)到的主數(shù)據(jù)屬性字段, 如這里附加的這些字段,都是可以通過0HR_PA_0 、0HR_PA_1業(yè)務(wù)數(shù)據(jù)源與員工0EMPLOYEE、組織0ORGUNIT關(guān)聯(lián)得到的,但增強(qiáng)方式?jīng)]有這個(gè)要求)。由于 ?人事子范圍 、公司代碼、員工組 、員工子組、人事范圍、雇傭狀態(tài) 、組織單位? 這些字段是InfoObect員工OEMPLOYEE的屬性(且這些屬性與時(shí)間相關(guān)):而 業(yè)務(wù)范圍 又是 組織單位 0ORGUNIT信息對(duì)象 的屬性(且也與時(shí)間相關(guān)):
現(xiàn)在要附加上的這些字段分別屬于 OEMPLOYEE(?人事子范圍 、公司代碼、員工組 、員工子組、人事范圍、雇傭狀態(tài) 、組織單位) 、 0ORGUNIT(業(yè)務(wù)范圍)這兩個(gè)信息對(duì)象中,并且?業(yè)務(wù)范圍?這個(gè)字段需要在?組織單位 屬性抓出來(lái)后,才能根據(jù)組織單位到?0ORGUNIT信息對(duì)象 中將?業(yè)務(wù)范圍?屬性抓出來(lái)。下面屢一下這些附加字段的抓取順序:先將業(yè)務(wù)數(shù)據(jù)源0HR_PA_0 、0HR_PA_1的數(shù)據(jù)抽取到第一層DSO中(明細(xì)層,原樣存儲(chǔ)數(shù)據(jù)源的數(shù)據(jù),在這一層不會(huì)增加數(shù)據(jù)源抽取結(jié)構(gòu)以外的字段);再將第一層DSO數(shù)據(jù)轉(zhuǎn)換存儲(chǔ)到第二層DSO中,第二層DSO需在第一層DSO的基本上,附加上 人事子范圍 、公司代碼、員工組 、員工子組、人事范圍、雇傭狀態(tài) 、組織單位?這些字段,這些字段通過 Read Master Data? 轉(zhuǎn)換規(guī)則從主數(shù)據(jù)OEMPLOYEE中抓取出來(lái),但要注意的是這些屬性是與時(shí)間相關(guān)的,讀取時(shí)需要加上業(yè)務(wù)時(shí)間這一條件(即從0EMPLOYEE底表里抓取這些屬性字段時(shí),除了員工編號(hào)外,還需要加上 業(yè)務(wù)時(shí)間0CALMONTH 條件);最后第三層DSO在第二層的基本上再附加上業(yè)務(wù)范圍 這一字段,此時(shí)需從?0ORGUNIT信息對(duì)象 底表抓取,條件是 組織單位 + 業(yè)務(wù)時(shí)間0CALDAY。下面以 員工0HR_PA_0 數(shù)據(jù)源為例,采用三層DSO建模:
? 具體轉(zhuǎn)換規(guī)則如下: 上面在通過 ?Read Master Data?讀取主數(shù)據(jù) 轉(zhuǎn)換規(guī)則讀取主屬性時(shí),由于主屬性是時(shí)間相關(guān)的,則讀取主數(shù)據(jù)的時(shí)間條件取值可以是以下三種: 當(dāng)前日期:讀取主屬性時(shí),會(huì)以當(dāng)前時(shí)間點(diǎn)(YYYYMMDD)為時(shí)間限制條件值,抓取當(dāng)前時(shí)間點(diǎn)所對(duì)應(yīng)有效屬性,即抓取滿足?DateFrom <= 當(dāng)前時(shí)間 <=DateTo 時(shí)間條件的主數(shù)據(jù)(?DateFrom 、?DateTo為主數(shù)據(jù)底表兩個(gè)字段,用它們來(lái)表示數(shù)據(jù)的有效期) 常數(shù)日期:以某個(gè)常數(shù)日期(也是YYYYMMDD,到天)為時(shí)間條件,讀取相應(yīng)時(shí)間點(diǎn)的有效主屬性 Form(從):以DSO源中的某個(gè)日期字段(上面選擇的為0CALMONTH,該字段為源DSO中的某個(gè)時(shí)間字段,只到月)為時(shí)間條件,讀取相應(yīng)時(shí)間點(diǎn)的主屬性。由于這里選擇的日期字段0CALMONTH只到月,以此為時(shí)間限制條件(DateFrom <= 0CALMONTH <=DateTo?)去主數(shù)據(jù)底表里查詢時(shí),可能會(huì)有多條數(shù)據(jù)對(duì)應(yīng),這時(shí)是取最早的,還是最晚的數(shù)據(jù)(但不能取到中間某個(gè)時(shí)間段主數(shù)據(jù)),就要看選擇的是“開始”還是“結(jié)束”了,選擇的不同,抓取到的主屬性也是不一樣的,具體請(qǐng)看下面的測(cè)試: ? 員工 0HR_PA_0 業(yè)務(wù)數(shù)據(jù)源 中的日歷年月CALMONTH只到月,以此字段作為業(yè)務(wù)產(chǎn)生的時(shí)間來(lái)讀取時(shí)間相關(guān)的主數(shù)據(jù)屬性時(shí),”開始“、”結(jié)束“測(cè)試結(jié)果如下: 人事事件 0HR_PA_1 業(yè)務(wù)數(shù)據(jù)源 中的日歷天CALDAY與上面區(qū)別在于精確到天了,所以不管選擇”開始“還是”結(jié)束“,同一業(yè)務(wù)數(shù)據(jù)所抓取到的主數(shù)據(jù)結(jié)果是一樣的: 所以從上面兩組(0HR_PA_0、0HR_PA_1)測(cè)試結(jié)果來(lái)看,”開始“、”結(jié)束“只對(duì)到月(或季度、年)業(yè)務(wù)時(shí)間起作用,如員工0HR_PA_0數(shù)據(jù)源的0CALMOTH業(yè)務(wù)時(shí)間字段;對(duì)已精確到天的業(yè)務(wù)時(shí)間不起作用,如人事事件0HR_PA_1數(shù)據(jù)源的0CALDAY業(yè)務(wù)時(shí)間字段,到天時(shí)不管選擇的是“開始”還是“結(jié)束”讀取到的主數(shù)據(jù)屬性都是一樣的,因?yàn)橐丫_到某一天,所以讀取到的主數(shù)據(jù)有且僅有一條; 根據(jù)不到天(如只到月、季度、年)的業(yè)務(wù)時(shí)間來(lái)抓取時(shí)間相關(guān)主數(shù)據(jù)時(shí),??Read Master Data 中選擇“開始”時(shí),如果有多條符合(原因就是業(yè)務(wù)時(shí)間沒有精確到天,而主數(shù)據(jù)的DATEFrom與DAETo是到天的,在以業(yè)務(wù)時(shí)間為條件從主數(shù)據(jù)底表讀取主屬性時(shí),會(huì)忽略掉主數(shù)據(jù)有效時(shí)間字段DATEFrom與DAETo中的天,這樣就會(huì)匹配到多條主數(shù)據(jù)),就取有效時(shí)間段最早的那條;如果選擇“結(jié)束”時(shí),有多條符合就取最晚(最新的)的那一條,注:不可能只取中間某個(gè)時(shí)間的主數(shù)據(jù) 上面實(shí)例是以員工0HR_PA_0數(shù)據(jù)源為例,演示了如何通過 ??Read Master Data 轉(zhuǎn)換規(guī)則 讀取時(shí)間相關(guān)的主數(shù)據(jù),并且是通過三層DSO建模來(lái)實(shí)現(xiàn)的,實(shí)質(zhì)上也可以只通過兩層DSO就可以實(shí)現(xiàn)OEMPLOYEE與?0ORGUNIT主數(shù)據(jù)的讀取。具體實(shí)現(xiàn)方式:需要在第一層DSO的End Routine中,先根據(jù)數(shù)據(jù)源中的員工編號(hào)從OEMPLOYEE信息對(duì)象底表中 將?組織單位?抓取出來(lái)(注:通過End Routine程序抓取主數(shù)據(jù)時(shí),也需要考慮時(shí)間相關(guān),End Routine程序代碼中需加上時(shí)間限制條件),然后在第二層DSO的轉(zhuǎn)換規(guī)則中,通過 Read Master Data 方式將將所有的附加字段一次性全讀取出來(lái),而不需要分兩層DSO分兩次讀取OEMPLOYEE與?0ORGUNIT主數(shù)據(jù)。注:上面員工0HR_PA_0數(shù)據(jù)源不能采用這種 End Routine + ?Read Master Data 的兩層DSO方式,因?yàn)闃I(yè)務(wù)時(shí)間只到月,雖然程序可以讀取時(shí)間相關(guān)的主數(shù)據(jù),但程序無(wú)法靈活實(shí)現(xiàn)“開始”與“結(jié)束”,只有人事事件0HR_PA_1數(shù)據(jù)可以使用 End Routine + ?Read Master Data 的兩層DSO方式建模,因?yàn)橄鄳?yīng)業(yè)務(wù)時(shí)間到天了,可通過End Routine精確讀取到一條時(shí)間相關(guān)的主數(shù)據(jù),與“開始”“結(jié)束”無(wú)關(guān)。下面采用這種End Routine + ?Read Master Data只有兩層DSO方式來(lái)建模: ? 0ORGUNIT抓取是通過End Routine實(shí)現(xiàn)的,但要注意的是,0ORGUNIT的抓取雖然是放在End Routine代碼里實(shí)現(xiàn)的,不需要?jiǎng)澗€,但規(guī)則類型也不能選擇“無(wú)轉(zhuǎn)換”,否則DSO 激活時(shí),New表里抓取到的 組織單位 在激活后Active表里的組織單位就會(huì)丟失,所以最好選擇規(guī)則類型為常數(shù)轉(zhuǎn)換規(guī)則,值為空,這樣在激活后就不會(huì)消失),具體代碼如下: ?METHOD end_routine.
*=== Segments ===
??? FIELD-SYMBOLS:
????? <RESULT_FIELDS>??? TYPE _ty_s_TG_1.
??? DATA:
????? MONITOR_REC???? TYPE rstmonitor.
*$*$ begin of routine - insert your code only below this line??????? *-*
??? ... "insert your code here
*--? fill table "MONITOR" with values of structure "MONITOR_REC"
*-?? to make monitor entries
??? ... "to cancel the update process
*??? raise exception type CX_RSROUT_ABORT.
??? DATA:t_docinfo TYPE TABLE OF _ty_s_TG_1.
??? DATA:wa_docinfo TYPE? _ty_s_TG_1.
**=======調(diào)試使用
??? Data: t_zjzjtest TYPE TABLE OF zjzjtest .
??? DATA wa_zjzjtest type zjzjtest.
**=======end
??? SELECT ORGUNIT EMPLOYEE
????? INTO CORRESPONDING FIELDS OF TABLE t_docinfo
????? FROM /BI0/MEMPLOYEE FOR ALL ENTRIES IN RESULT_PACKAGE
????? WHERE EMPLOYEE = RESULT_PACKAGE-EMPLOYEE
????? "員工主數(shù)據(jù)表為 /BI0/MEMPLOYEE,其屬性是與時(shí)間相關(guān)的,所以查詢時(shí)需加上時(shí)間條件,
????? "讀取業(yè)務(wù)數(shù)據(jù)產(chǎn)生時(shí)所對(duì)應(yīng)的主數(shù)據(jù). RESULT_PACKAGE-CALDAY 為業(yè)務(wù)發(fā)生的時(shí)間,
????? "dateto與datefrom為主數(shù)據(jù)的有效期
????? and datefrom <= RESULT_PACKAGE-CALDAY and dateto >=
????? RESULT_PACKAGE-CALDAY .
??? sort t_docinfo by EMPLOYEE ASCENDING.
??? LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS> .
????? READ TABLE t_docinfo WITH key EMPLOYEE = <RESULT_FIELDS>-EMPLOYEE
????? BINARY
????? SEARCH INTO wa_docinfo.
????? <RESULT_FIELDS>-ORGUNIT = wa_docinfo-ORGUNIT.
**=======調(diào)試使用
????? APPEND wa_docinfo-ORGUNIT to? t_zjzjtest.
**=======end
??? ENDLOOP.
**=======調(diào)試使用
??? DELETE FROM zjzjtest.
??? MODIFY zjzjtest from TABLE t_zjzjtest.
**=======end
*$*$ end of routine - insert your code only before this line???????? *-*
? ENDMETHOD.??????????????????? "end_routine ? 在第二層DSO中將OEMPLOYEE與?0ORGUNIT兩個(gè)主數(shù)據(jù)一次全部讀取出來(lái):
?
總結(jié)
以上是生活随笔為你收集整理的HR数据抽取:通过 Read Master Data 转换规则读取时间相关主属性数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】prometheus数据上报方式p
- 下一篇: 常见网络命令之Ping命令