對 數據進行轉換就是對數據的合並、清理和整合。通過轉換,可以實現不同的源數據在語義上的一致性。SAP BI 的轉換(Transformation) 定義的就是對數據進行處理的規則。當數據從一個BI 對象加載到另一個BI 對象時,數據是經過轉換的。在源對象和目標對象之間創建一個轉換,轉換將源對象的字段格式轉變成目標對象的字段格式。從前面的章節可以看出轉換在SAP BI 數據流中的地位和作用,其中信息提供者是信息對象、數據存儲對象、信息立方體和信息集等對象的統稱。
接着,我們來創建一個轉換。首先右鍵對應的數據源,點擊“創建轉換”。彈出下面的窗口。在Object Type中可以選擇要傳輸的目標對象,然后填寫目標名稱。源數據的信息是系統自動填充的。這時點擊繼續。
下面我們來定義轉換規則。
一個轉換可以包含多個轉換例程與轉換規則組。每個轉換規則組可以有多個轉換規則。
通常系統根據數據源的情況來自動關聯一些字段,但是我們還是需要做繼續的修改才能達到我們的目標。上面的圖示中左側的表格是代表數據源,右側的代表對應字段的轉換規則,也就是說要想把數據從開始的數據源轉換為最后我們想要的格式化后的數據,就需要在右側表格中進行規則化。
我們來詳細闡述下怎么創建和編輯規則。當你把對應字段拖動完成后,你可以雙擊此線,然后會彈出下面的窗口。請重點看規則類型中的規則。
(1) 常數。直接為目標字段指定一個常數值,而不是使用源字段。
(2) 直接分配。直接使用所選的源字段的值填充目標字段。這是最常用的一種賦值方式。
(3) 公式。選擇公式后會彈出一個窗口,在里面可以進行對字段的加減乘除等等公式計算。
(4) 初始值/無轉換
對於關鍵字段,即目標對象的鍵值,系統提供的選項是"初始值"系統自動為根據目標字段的類型賦予一個初始值。對於非關鍵字段,系統提供的選項是"無轉換"系統不在目標對象中更新目標字段,這使得目標字段保存原來的值成為可能。
(5) 讀主數據
這里的主數據指的是信息對象中含有屬性的特性。源字段是特性的鍵值,通過源字段讀取特性里的屬性,用屬性的值更新目標字段。因此,源字段必須包含特性的鍵值,而特性必須包含目標字段對應的信息對象作為屬性。
(6) 例程
例程就是我們可以自己定義的程序代碼。我們可以自己編程定義轉換例程,為目標字段賦值。如果更新的目標字段是具有單位的關鍵值,如收入或數量,我們還可以使用規則類型"具有單位的例程"。在例程的返回參數中,除了目標字段,還有單位字段。
(例程詳細請參見SAP顧問靠手BW篇 — SAP中的例程)
轉換例程應用:
在數據傳輸過程中需要補充物料前導零,則在信息對象例程中加入以下代碼即可。
*$*$ begin of routine - insert your code only below this line
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = SOURCE_FIELDS-MATNR
IMPORTING
OUTPUT = RESULT.
*$*$ end of routine - insert your code only before this line
(7) 時間更新
由於時間字段的特殊性,系統提供了3 種不同的時間更新的方式。
1 )直接更新。系統直接將源字段的值賦予目標字段的值。這適用於源字段和目標字段
類型相同的情況,比如都是日歷年。
2) 時間轉換。系統會自動辨別源字段與目標字段的類型,可使用相應的時間轉換函數。
比如從日歷天到日歷年的轉換,系統會自動使用時間轉換。
3) 時間分配。用於從大的時間單位向小的時間單位賦值。系統會自動將源對象的數據
字段,即關鍵值,按比例分給目標字段的數據字段。
注意:
上面我們講到的轉換通常在不同的信息體中是有略微的差別,看下面圖例,我們來介紹下。
圖中多了一個集合(Aggregation)的選擇框。
1) 如果目標對象是信息立方體,可能的選項有: 合計、最大值和最小值。
2) 對於信息對象,即特性,只有"覆蓋"這一選項。對於主鍵相同的記錄,后面的記錄的
值會直接覆蓋以前的記錄。
3) 對於數據存儲對象,根據數據和數據源的不同,可能的選項有4 種。
①合計:當數據源支持加總的增量更新時才可用。對於數據類型字符、日期、時間、貨幣、單位等不能使用匯總選項。
②最大值。
③最小值。
④覆蓋:當數據源支持增量更新時才可用。
對 於數值型的字段,系統使用特性ORECORDMODE 來表明更新的類型。如果數據源只提供殘留圖像,系統會建議使用"覆蓋"選項。當然,我們也可以根據應用情景改變這一設置。比如我們想統計記錄變化的次數, 可以設置一個計數器字段,在更新規則中,將它的值設置為常數"1 ,並將更新類型設置為"合計"。
特性ORECORDMODE 用於標志從SAP 源系統的增量更新記錄。如果不是將增量請求更新到數據存儲對象,或者只是以文本文件作為數據源,可以不必使用特性
ORECORDMODE 。
學習完轉換類型后,我們再看學習下什么叫規則組,這也是轉換中一個很重要的東西。
顧名思義,規則組是轉換規則的組合。一個轉換可以包含多個規則組。每一個轉換至少包括一個規則組,稱為標准組。其他的規則組都以標准組為參照。就是說,如果標准組發生
了變化,其他規則組可以選擇自動進行與標准組同樣的變化。當對標准組進行修改時,系統會彈出對話框詢問是否將變化應用到所有規則組或者只是改變標准組。
從 轉換規則,特別是集合類型的介紹中我們可以看出,所有的關鍵值〈數值字段〉的更新都是與特定的特性(關鍵字段)相關的。關鍵值也只有與系統的特性相聯系, 才具有具體的業務含義。但是,對於有些關鍵值而言,需要同時更新不同的特性的組合。這時候,就需要多個規則組來實現關鍵值對不同特性組合的更新。
我們可以根據上面的一張圖來找到Rule Group。點擊后可以看到新建規則組,然后我們輸入規則組名稱,這樣就可以新建一個規則組了。然后我們對規則進行編輯以達到我們的需求。
使用多個規則組的一個例子
某公司在計算銷售人員的獎金時是以銷售額作為計算基數的。對於一線的銷售人員,他們取得的銷售額就是計算基數。對於經理人員,他們手下的銷售人員的銷售額的10% 計入經理人員的獎金計算基數。
在系統實現時,源對象存儲了銷售的原始數據,目標對象存儲獎金計算基數。這時,我們可以使用兩個規則組實現,如圖下所示。
看下圖,綠色的圖標就是創建的轉換。