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