吳衛(wèi)亮++馬一然++范春迎
摘 要:ETL過程對(duì)是數(shù)據(jù)倉庫的核心和靈魂,它包括數(shù)據(jù)的抽取,轉(zhuǎn)換和裝載三個(gè)過程,是實(shí)施數(shù)據(jù)倉庫過程中的一個(gè)重要步驟。例程則是ETL過程中常用的一種采用編程的方式來解決圖形化界面無法完成的復(fù)雜的數(shù)據(jù)轉(zhuǎn)換的方法。本文主要?dú)w納了針對(duì)SAP BI 7.0后的版本中ETL過程中數(shù)據(jù)轉(zhuǎn)換時(shí)所有類型的例程,并結(jié)合唐鋼SAP商務(wù)智能系統(tǒng)中用到的相關(guān)例程的實(shí)例對(duì)例程的如何運(yùn)用做了詳細(xì)的介紹及解析。
關(guān)鍵詞:商務(wù)智能;ETL;例程
中圖分類號(hào):F713 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-2064(2017)02-0039-02
BI,是商務(wù)智能(Business Intelligence)英文的縮寫,BI的概念最早在1996年就提出來了。確切的講,商務(wù)智能并不是一項(xiàng)新技術(shù),它是將數(shù)據(jù)倉庫(DW)、在線分析處理(OLAP)、數(shù)據(jù)挖掘(DM)等技術(shù)與客戶關(guān)系管理等應(yīng)用系統(tǒng)結(jié)合起來應(yīng)用于商業(yè)活動(dòng)實(shí)際過程當(dāng)中,及時(shí)服務(wù)于管理層決策的目的。SAP BI主要由企業(yè)數(shù)據(jù)倉庫、商務(wù)智能平臺(tái)和業(yè)務(wù)瀏覽器套件構(gòu)成。商業(yè)智能的關(guān)鍵就是通過數(shù)據(jù)倉庫系統(tǒng)從許多來自不同的企業(yè)運(yùn)作系統(tǒng)的數(shù)據(jù)中提取出有用的數(shù)據(jù)并進(jìn)行清理,以保證數(shù)據(jù)的正確性,然后經(jīng)過抽?。‥xtraction)、轉(zhuǎn)換(Transformation)和裝載(Load),即ETL過程,合并到一個(gè)企業(yè)級(jí)的數(shù)據(jù)倉庫里,從而得到企業(yè)數(shù)據(jù)的一個(gè)全局視圖,在此基礎(chǔ)上利用合適的查詢和分析工具、數(shù)據(jù)挖掘工具、OLAP工具等對(duì)其進(jìn)行分析和處理,最后將信息知識(shí)呈現(xiàn)給管理者,為管理者的決策過程提供支持。
1 例程與ETL過程
從引言中我們可以看到,企業(yè)數(shù)據(jù)倉庫系統(tǒng)在商務(wù)智能中占據(jù)著十分重要的地位。數(shù)據(jù)倉庫的架構(gòu)大體可以三部分:后臺(tái)是數(shù)據(jù)儲(chǔ)存和計(jì)算引擎;前端是數(shù)據(jù)戰(zhàn)線分析的用戶界面;還有一個(gè)重要的部分就是ETL。ETL過程,即對(duì)數(shù)據(jù)的抽取,轉(zhuǎn)換和裝載的過程,它是數(shù)據(jù)倉庫的核心和靈魂。ETL過程能夠按照統(tǒng)一的規(guī)則集成并提高數(shù)據(jù)的價(jià)值,是負(fù)責(zé)完成數(shù)據(jù)從數(shù)據(jù)源向目標(biāo)數(shù)據(jù)倉庫轉(zhuǎn)化的過程,是實(shí)施數(shù)據(jù)倉庫的重要步驟。由于實(shí)際的源系統(tǒng)中可能會(huì)有多種完全不同的儲(chǔ)存格式,甚至還有許多要求的數(shù)據(jù)在源系統(tǒng)中并不直接存在,而是需要根據(jù)某些公式對(duì)各部分?jǐn)?shù)據(jù)進(jìn)行計(jì)算才能得到。因此,這就要求ETL工具必須對(duì)所抽取的數(shù)據(jù)進(jìn)行靈活的計(jì)算、合并、拆分等轉(zhuǎn)換工作。例程則是ETL過程中常用的一種采用編程的方式來解決圖形化界面無法完成的復(fù)雜的數(shù)據(jù)轉(zhuǎn)換的方法。
2 例程及其應(yīng)用
例程使用的是ABAP對(duì)象編程技術(shù),由預(yù)置的定義部分和實(shí)現(xiàn)部分組成。例程的輸入、輸出以及方法的標(biāo)簽是在定義部分就確定的,方法的具體實(shí)現(xiàn)邏輯由實(shí)現(xiàn)部分完成。例程主要分為以下幾種類型:
(1)開始例程:開始例程在每個(gè)數(shù)據(jù)包開始進(jìn)行轉(zhuǎn)換時(shí)運(yùn)行。開始例程沒有返回的值,它直接對(duì)數(shù)據(jù)包進(jìn)行計(jì)算、修改或刪除等操作,然后將操作的結(jié)果直接保存在數(shù)據(jù)包中進(jìn)行后續(xù)的轉(zhuǎn)換步驟。
(2)特性或關(guān)鍵值的例程:這種例程是作為一種規(guī)則類型出現(xiàn)的,它屬于轉(zhuǎn)換規(guī)則的一部分。它可以為一個(gè)關(guān)鍵值或一個(gè)特性定義一個(gè)單獨(dú)的例程。
(3)結(jié)束例程:結(jié)束例程對(duì)經(jīng)過轉(zhuǎn)換規(guī)則轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行操作,它操作的是一個(gè)與目標(biāo)對(duì)象字段結(jié)構(gòu)一致的表結(jié)構(gòu)。與開始例程一樣,它也是逐個(gè)數(shù)據(jù)包進(jìn)行處理的。在結(jié)束例程中,可以進(jìn)行各種數(shù)據(jù)的操作,比如,刪除不需要的數(shù)據(jù)、進(jìn)行數(shù)據(jù)質(zhì)量檢查等。
(4)專家例程:專家例程是系統(tǒng)提供的進(jìn)行數(shù)據(jù)轉(zhuǎn)換的另一個(gè)選項(xiàng),這種類型的例程很少使用。一旦為一個(gè)轉(zhuǎn)換創(chuàng)建了專家例程,系統(tǒng)會(huì)刪除同一轉(zhuǎn)換內(nèi)已經(jīng)定義好的其他轉(zhuǎn)換規(guī)則。
此外,還有一種特殊的例程,在圖一中沒有標(biāo)示,即反向例程。它將目標(biāo)對(duì)象在運(yùn)行報(bào)表時(shí)的選擇條件和輸出字段轉(zhuǎn)化為源對(duì)象的選擇條件和輸出字段的要求。反向例程在實(shí)際應(yīng)用中也是很少使用的。
下面我們以唐鋼SAP BI系統(tǒng)中實(shí)際用到的一些例程作為實(shí)例來做詳細(xì)的介紹:
先以一個(gè)由產(chǎn)品利潤分析CUBE到銷售CUBE的轉(zhuǎn)換規(guī)則中的開始例程為例,我們?cè)谵D(zhuǎn)換規(guī)則的編輯界面中單擊“開始例程”就可以對(duì)開始例程進(jìn)行編輯。
編輯界面中已有一些程序代碼,代碼用不同的顏色標(biāo)示。其中灰色的代碼是系統(tǒng)預(yù)定義的部分,用戶是不能更改的;黑色的代碼是用戶可以修改的部分。例程中的代碼分為全局部分和本地部分。在全局部分,聲明的數(shù)據(jù)對(duì)所有例程都是有效的;本地的數(shù)據(jù)聲明只對(duì)本例程有效。
在代碼*$*$ begin of global。。。和*$*$ end of global。。。之間輸入用戶的數(shù)據(jù)定義。用戶可以使用兩種方式聲明數(shù)據(jù):
(5)使用語句“CLASS DATA”進(jìn)行全局?jǐn)?shù)據(jù)聲明。用這一方法聲明的數(shù)據(jù)在整個(gè)數(shù)據(jù)請(qǐng)求中都有效。
(6)使用語句“DATA”進(jìn)行全局?jǐn)?shù)據(jù)聲明。用這一方法聲明的數(shù)據(jù)只在當(dāng)前的數(shù)據(jù)包中都有效。
全局?jǐn)?shù)據(jù)聲明使不同的例程之間共享數(shù)據(jù)成為可能。例如,可以在例程中使用其他例程的中間計(jì)算結(jié)果,或者在稍后再次調(diào)用例程時(shí)重用例程的數(shù)據(jù)。
代碼的第二部分是例程類的實(shí)現(xiàn)部分,具體定義了各種方法的實(shí)現(xiàn)邏輯。用戶可以在代碼*$*$ begin of routine。。。和*$*$ end of routine。。。之間進(jìn)行程序代碼編寫,完成編寫后檢查并保存代碼,便完成了開始例程的編輯。
同樣的,對(duì)結(jié)束例程編輯的方法與開始例程大同小異,點(diǎn)擊“結(jié)束例程”,然后按照開始例程的編輯方法就可以實(shí)現(xiàn)。
對(duì)于某個(gè)特性或關(guān)鍵值的例程的編輯,在規(guī)則類型中選擇例程選項(xiàng),然后點(diǎn)擊更改規(guī)則就進(jìn)入了例程的編輯界面,界面與上述開始例程的大體一樣。程序代碼用CONCATENATE語句將源對(duì)象中的會(huì)計(jì)年度/期間FISCPER字段前4位和后2位字符組合起來賦值給RESULT字段,而RESULT字段就是目標(biāo)對(duì)象日歷年/月0CALMONTH字段,最終實(shí)現(xiàn)了源數(shù)據(jù)向目標(biāo)數(shù)據(jù)的轉(zhuǎn)換。
專家例程的結(jié)構(gòu)與其他例程的結(jié)構(gòu)是一樣的。其輸入?yún)?shù)是所有源字段,輸出是所有的結(jié)果字段。不過一旦創(chuàng)建了專家例程,系統(tǒng)會(huì)刪除同一轉(zhuǎn)換內(nèi)已經(jīng)定義好的其他轉(zhuǎn)換規(guī)則,也就是說,專家例程會(huì)替換整個(gè)轉(zhuǎn)換。
對(duì)于上述的幾種例程,在例程創(chuàng)建時(shí),SAP BI自動(dòng)生成了相應(yīng)的反向例程。以開始例程為例,系統(tǒng)在開始例程中自動(dòng)生成一個(gè)方法inverse_start_routine。用戶同樣在代碼*$*$ begin of inverse routine。。。和*$*$ end of inverse routine。。。之間進(jìn)行程序代碼編寫。運(yùn)用反向例程會(huì)將在運(yùn)行報(bào)表時(shí)目標(biāo)對(duì)象選擇條件和輸出字段完全轉(zhuǎn)化為對(duì)應(yīng)源對(duì)象的選擇條件和輸出字段的要求。