DSO的記錄模式Record Mode字段測試


不管是哪種DSO,表里的數據都會有Record Mode這一字段,NEW表與Active表里的該字段是由數據源上傳上來的,而Chang Log則是由BW系統在激活時由抽取上來的數據與Change Log里原有數據進行比對得到的,並且 后像、A像 都以是 X前像+后像來記錄,R像與D像 則還是以本身的像類型記錄
 
(注:Push方式的Delta-Queue里的數據也會帶有記錄模式,這種是用戶在維護數據時SAP系統記錄的(並且不同的Delta Proess增量處理模式,則會導致Delta-Queue存入數據有不同的記錄模式Record Mode),但不知道Pull方式的Delta-Queue是否也帶?需測試
 
下面以上面文件數據源為源,來測試記錄模式
 
新建標准DSO,將文件中的數據抽到此DSO中:
5267fa63-2804-4789-9ed4-2f8739c8d4bf   bbcf6033-5047-43be-bae1-a625da538862
7385aab9-4fee-4295-86aa-cc1c497a550c
激活前,New中的數據如下,此時Record Mode並沒有數據:
3d092462-2e5f-4173-8965-e9a2c8de6ec8
激活后,Active表與Change Log中的數據如下:
2a3bcc64-9ceb-4be7-8173-f2c6960e746f
2cd1221e-2ab6-4c0e-b33d-73d411f2dd9c
Active表中的Record Mode也是空的,只有Change Log表里的Record Mode有數據,且都是新像,它是由系統自己對比數據自動設置的,但是New表與Active表里的Record Mode的值是由數據源本身提供的,但此時的文件數據源沒有提供,所以是空的
a1b3ef0f-dc13-4a25-adb0-81dff3fea20e
 
修改文件里的數據,再抽:
b88ee917-4d6e-4fd5-9adf-c9513fe93c9d
94e89a8a-7240-4a35-86b9-1aa5121aa72f   b248fd0b-2ff5-4fe3-a687-d93c7c6df57b
抽到DSO后激活,再看Active表與Change Log表里的數據如下:
cc7d8982-ea80-4990-b7ef-fc19cacdece5
dc83b183-4afb-4a39-a613-9cc341a3e52e
由於500那條記錄沒有作修改,所以這次抽取時,Change Log沒有增加與它相關的數據
從Change Log可以看出,在DSO做激活時,系統會拿本次抽上來的數據與Change Log表里的數據作比對,然后生成修改過程的數據(如前像),正是因為有了Change Log表,所以AIE增量處理方式的數據源原本數據是不能直接抽到累加型的DSO與CUBE中的,但如果中間通過標准覆蓋型DSO后,就可以再將數據抽到累加型的DSO與CUBE中
 
問題引出:通過DSO關鍵值字段默認覆蓋特點,上面對修改新增都會支持的很好,如果數據源中的數據被物理刪除了,那么怎么讓DSO也知道呢?
其實在Transformateion中,我們可以看到Record Mode其實是技術字段,那么只要我們的上來的數據中有Record Mode這樣一個字段時,實質上也是可以抽到DSO的New與Active表中的Record Mode中的:
e0b0b484-1aea-430b-a1a6-e0678bd07adf
下面我們在上面文件數據源上加上Record Mode這樣一個字段:
c3b894f3-af33-4736-8750-04930d19fb28
然后在文件中也加上一列 Record Mode
685f843e-bd9c-45cd-8d33-fbbd820e12ea
然后Transformateion做一下字段映射,映射之前需要將常量修改為直接分配規則方式:
fadc62ce-df48-4b4a-8fed-abbc2d58976f
3b8e1d0c-1bb5-4006-8601-9baaf4eafc20
再開始傳數據,此時PSA里的數據如下:
daab3e2c-2277-4a88-bc4c-f3bba4800e94
運行信息包后,DSO表中數據如下:
71a9b375-92b5-469a-834b-887e63098c95
此時發現將N像新增像)統一變成了X后像,即修改結果像
4d4801e5-d8bd-430a-8df9-9c79fb0bcbd4
發現Active表里少了一條數據了,即R像的數據被刪除
37de7839-bef8-4f7b-8074-2249714b356f
此時Chage Log里會增加一條R像的數據,即Active中被刪除的那條數據。但1001、1002都沒有變化,因為轉過來時的Record Mode分別為新項與后項,最后都將它們看做是后項即修改,但數據又沒有發生任何變化,所以日志表里對這兩條記錄沒有記錄任何日志
 
下面來測試一下A像(累加項),在做之前,需要重新創建另外一個DSO,其金額字段轉換規則需要使用累加型(默認情況下是覆蓋型的,如上面的DSO):
6e54cbce-f32b-444d-8529-a825562231da
82e197a3-656a-4eba-b651-3c19ea84f7d4   744d18d6-0bc9-4ff6-a3d5-02b64de72817
再修改文件內容,都修改成后像
cef4daec-80f8-4abb-8172-747b89d2be35
在測試之前,刪除數據源中PSA里以前抽的所有數據請求Request
 
再運行信息包:
b29854a9-1969-4922-979f-f49ec0e03c00
運行DTP,查看DSO的Active表:
6c39dc97-a8b0-4358-89ba-719b433eeb7a
再次運行信息包與DTP后,Active表中發現Amount累加(2倍)
f952cde8-6cfd-43fc-a2cf-bca6f2e4fa7f
Change Log表中,后像的值都是累加后的值(2倍值),而不是傳過來的文件里設置的值:
2d6ae66d-0377-469c-a3ae-b06d49a605c7
 
 
下面再次修改文件,使用A像
466c8f00-3ab2-45eb-8b76-e50aa22122bc
運行信息包與DTP后,New表:
bee1848a-6071-45ea-b37c-2bd547d112d4
Active表里的數據變成了3倍
b22b5c4e-1ab1-4a59-970c-f020167ca7b0
Change Log表
e07a1a5c-9838-41bc-a54a-c27e881498b7
再運行一次信息包與DTP后:
b22c122b-8d2e-4090-a233-eaf0063b6634
d2d05372-d587-4cdf-a17a-89bf124da168
 
再修改文件成R像
e1e03f5a-ead5-4910-8e42-299b3d9660b1
運行信息包與DTP:
f959ccee-6292-4098-b63c-552d6ca0e21b
8862bc40-77c6-440e-941f-beef6ae21495
此時Active里沒有數據了,發現全部被刪除了:
dfe39dc8-fe3c-4282-9b93-5e4a90ed22f9
(原因:因為是R像,R像本意最終是要將記錄刪除的,所以Active表里的數據最后被全部刪除了,既然是刪除則R反沖多少已經並不重要了,重要的是要將對應的數據刪除掉)
 
此時的日志表里的數據不會被刪除(因為是日志表嘛,不會直接刪除,它是要記錄數據變化的整個過程的),但最終的結果也要與Active表里數據結果相同,即要求將最終的累計結果沖為零,所以最后加了以下三項反沖,但反沖的數值並不是我們文件中的值,而原來有多少就沖多少(即好比數據被刪除了):
da1537b9-7412-406b-af0e-dc6308836bfb


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM