摘 要: 在介紹Oracle OLAP和BI Beans體系結(jié)構(gòu)的基礎(chǔ)上,結(jié)合一個(gè)決策支持系統(tǒng)的實(shí)例,論述了利用BI Beans開(kāi)發(fā)企業(yè)OLAP應(yīng)用系統(tǒng)的方法和基本過(guò)程。
關(guān)鍵詞: 聯(lián)機(jī)分析處理系統(tǒng) 商務(wù)智能組件 Oracle BI Beans 決策支持系統(tǒng)
隨著信息技術(shù)的發(fā)展和企業(yè)信息化的不斷推進(jìn),許多企業(yè)建立了自己的信息系統(tǒng)。大部分信息系統(tǒng)是建立在傳統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)上的事務(wù)系統(tǒng),一般稱(chēng)為聯(lián)機(jī)事務(wù)處理系統(tǒng)(OLTP)。OLTP用來(lái)處理企業(yè)相關(guān)事務(wù)信息,例如:生產(chǎn)記錄、定貨記錄、銷(xiāo)售記錄等。而在企業(yè)管理層的決策中,需要的是對(duì)這些事務(wù)系統(tǒng)的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、加工后的分析。例如,對(duì)一個(gè)時(shí)期銷(xiāo)售情況的統(tǒng)計(jì)分析和去年同一時(shí)期進(jìn)行比較,尋找最熱銷(xiāo)的產(chǎn)品等。這就需要建立聯(lián)機(jī)分析處理系統(tǒng)(OLAP)。
聯(lián)機(jī)分析處理的概念最早是由關(guān)系數(shù)據(jù)庫(kù)之父E.F.Codd于1993年提出的。隨著傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的不斷擴(kuò)大以及數(shù)據(jù)量的增多,利用SQL對(duì)大數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單查詢(xún)已不能滿(mǎn)足用戶(hù)分析的需求。用戶(hù)的決策分析需要對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行大量計(jì)算才能得到結(jié)果。因此Codd提出了多維數(shù)據(jù)庫(kù)和多維分析的概念,即OLAP。
和OLTP相比較,OLAP有其自身的特點(diǎn):
(1)OLAP一般是面向“知識(shí)工人”的,用于數(shù)據(jù)分析;
(2)OLAP一般涉及歷史數(shù)據(jù),是對(duì)歷史數(shù)據(jù)的匯總和聚集基礎(chǔ)上的分析;
(3)OLAP不但涉及本部門(mén)的數(shù)據(jù),還會(huì)涉及企業(yè)或組織外部的相關(guān)數(shù)據(jù);
(4)OLAP一般是只讀訪問(wèn)的,和OLTP不同,它的訪問(wèn)可能是無(wú)計(jì)劃的,而一次訪問(wèn)可能涉及一個(gè)復(fù)雜耗時(shí)的查詢(xún);
(5)OLAP一般基于多維的數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行。
隨著企業(yè)對(duì)OLAP系統(tǒng)的需求不斷增大,OLAP應(yīng)用系統(tǒng)的開(kāi)發(fā)已成為目前信息系統(tǒng)開(kāi)發(fā)的重點(diǎn)和熱點(diǎn)。OLAP應(yīng)用系統(tǒng)應(yīng)該能提供給用戶(hù)一個(gè)支持多維數(shù)據(jù)立方的圖形化界面,能讓用戶(hù)針對(duì)數(shù)據(jù)立方進(jìn)行各類(lèi)分析活動(dòng)。
各大數(shù)據(jù)庫(kù)管理系統(tǒng)軟件提供商陸續(xù)提供了基于自己數(shù)據(jù)庫(kù)管理系統(tǒng)的OLAP服務(wù)軟件。本文將基于Oracle公司的OLAP產(chǎn)品,介紹其基本體系結(jié)構(gòu)以及利用Oracle 的BI Beans開(kāi)發(fā)OLAP應(yīng)用系統(tǒng)的基本方法和過(guò)程,并且以某石油企業(yè)的決策支持系統(tǒng)的開(kāi)發(fā)為背景提供一個(gè)開(kāi)發(fā)實(shí)例。
1 Oracle OLAP體系結(jié)構(gòu)以及開(kāi)發(fā)工具
作為一個(gè)重要的關(guān)系型數(shù)據(jù)庫(kù)軟件提供商,Oracle公司的OLAP產(chǎn)品是基于其數(shù)據(jù)庫(kù)系統(tǒng)9i的。Oracle公司的9i數(shù)據(jù)庫(kù)系統(tǒng)包含了OLAP、數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)挖掘等多個(gè)服務(wù),提供了一個(gè)集成的管理平臺(tái)和服務(wù)平臺(tái)。
在數(shù)據(jù)倉(cāng)庫(kù)中,星形模式是建立高性能查詢(xún)數(shù)據(jù)結(jié)構(gòu)最為普遍的方法。它的邏輯模式不同于關(guān)系型數(shù)據(jù)庫(kù)的關(guān)系模式,而是使用事實(shí)表和維表來(lái)表示多維數(shù)據(jù)。由于數(shù)據(jù)的多維性,一個(gè)事實(shí)表和多個(gè)維表相關(guān)聯(lián),類(lèi)似于星型,因此,這種邏輯模式稱(chēng)作星型模式。星形模式有一個(gè)變體叫雪花模式,它實(shí)際上是一個(gè)具有規(guī)范化維表的星形模式。
Oracle為OLAP應(yīng)用系統(tǒng)的開(kāi)發(fā)提供了二個(gè)層次的工具。一個(gè)是Java OLAP API,它提供了對(duì)OLAP所有功能最底層的操作支持,具有很強(qiáng)的功能和很好的柔性。另一個(gè)是商務(wù)智能組件BI Beans(Business Intelligence Beans)。通過(guò)BI Beans,開(kāi)發(fā)人員能夠快速地開(kāi)發(fā)出OLAP應(yīng)用程序。和OLAP API相類(lèi)似,BI Beans也是基于Java平臺(tái)的,但具有很好的封裝,它提供了一般OLAP應(yīng)用系統(tǒng)常用的功能,其層次結(jié)構(gòu)如圖1所示。

BI Beans分成表示Bean、OLAP Bean和目錄服務(wù)的三大類(lèi)。表示Bean分成表(Table)、交叉表(Crosstab)和圖(Graph)三個(gè)類(lèi)別。表示Bean用來(lái)向用戶(hù)提供OLAP查詢(xún)結(jié)果,可以用來(lái)表示多維的數(shù)據(jù)立方,可以進(jìn)行上卷、下鉆、旋轉(zhuǎn)等操作。對(duì)于一些關(guān)鍵數(shù)據(jù),可以用不同的顏色來(lái)著重顯示。此外,還提供了二維、三維的柱裝、條形、點(diǎn)、餅圖等形式,形象化地展示數(shù)據(jù)。
表示層Bean可以分成Java客戶(hù)端和Web端二種形式,分別對(duì)應(yīng)于客戶(hù)/服務(wù)器應(yīng)用(C/S)和瀏覽器/服務(wù)器應(yīng)用(B/S)二種軟件結(jié)構(gòu)。
OLAP Bean用來(lái)建立用戶(hù)查詢(xún)感興趣的查詢(xún)數(shù)據(jù)(Query)。通過(guò)計(jì)算構(gòu)建器,用戶(hù)可以自定義對(duì)于事實(shí)數(shù)據(jù)的計(jì)算方式,用來(lái)分析數(shù)據(jù)。例如,對(duì)銷(xiāo)售數(shù)據(jù)的移動(dòng)平均計(jì)算、最大最小計(jì)算、百分比計(jì)算等。OLAP Bean還包括對(duì)OLAP服務(wù)器連接的支持。
目錄服務(wù)類(lèi)BI Beans是對(duì)用戶(hù)自己建立的查詢(xún)立方的持久化管理。Oracle為查詢(xún)結(jié)果提供BI Bean目錄(BI Bean Catalog)服務(wù)。用戶(hù)自己定義的查詢(xún)結(jié)果可以存放在服務(wù)器的BI Bean目錄下。Oracle BI Bean目錄是存放在Oracle數(shù)據(jù)庫(kù)中的,可以為所有能訪問(wèn)數(shù)據(jù)庫(kù)的人員共享。通過(guò)權(quán)限設(shè)置,可以限定查詢(xún)被訪問(wèn)的人的范圍。
2 用BI Beans開(kāi)發(fā)OLAP應(yīng)用
由于BI Beans很好地封裝了數(shù)據(jù)的顯示和管理功能,因此,利用BI Beans能快速地開(kāi)發(fā)出OLAP應(yīng)用而不涉及OLAP底層的細(xì)節(jié)。圖2是一個(gè)典型的利用BI Beans開(kāi)發(fā)的OLAP應(yīng)用系統(tǒng)的結(jié)構(gòu)。
在圖2中,BI目錄(BI Catalog)用來(lái)存放用戶(hù)查詢(xún),實(shí)際是存在于Oracle 9i數(shù)據(jù)庫(kù)中。在數(shù)據(jù)庫(kù)中,用戶(hù)的查詢(xún)以XML形式存放。

用戶(hù)的界面可以分成二種。一種是基于Java的應(yīng)用程序,也就是所謂的胖客戶(hù)應(yīng)用。該應(yīng)用是基于客戶(hù)/服務(wù)器(C/S)模式的。另一種是基于JSP的BI應(yīng)用,是瘦客戶(hù)應(yīng)用,基于瀏覽器/服務(wù)器(B/S)模式。基于JSP應(yīng)用客戶(hù)端只需要一個(gè)瀏覽器即可。
用戶(hù)的查詢(xún)可以以交叉表(Cross Table)、圖形(Graph)及表格(Table)的形式顯示。在JSP應(yīng)用中,BI Beans提供的用戶(hù)圖形化界面是PNG格式的圖片而不是Applet應(yīng)用,是一種純HTML的應(yīng)用形式。
由于目前B/S模式的應(yīng)用是熱點(diǎn),所以在本文后面給出的實(shí)際例子中,所建立的某石油天然氣公司決策支持系統(tǒng)也是基于B/S模式的。因此,下面討論BI Beans就以B/S模式為主?;贑/S結(jié)構(gòu)的BI Beans開(kāi)發(fā)類(lèi)似,可以參考相關(guān)文檔。
BI Beans的JSP應(yīng)用可以支持各類(lèi)J2EE服務(wù)器。Oracle 9i JDeveloper支持直接向BEA Weblogic和Oracle 9iAS服務(wù)器的發(fā)布功能。發(fā)布時(shí)不需要自己寫(xiě)配置文件,利用內(nèi)置的對(duì)話(huà)框即可完成。
圖2中應(yīng)用的J2EE服務(wù)器是Oracle公司的OC4J(Oracle9iAS Containers for J2EE)。它可以獨(dú)立運(yùn)行,也可以包含在Oracle 9iAS中運(yùn)行。如果獨(dú)立運(yùn)行,只需要下載一個(gè)OC4J程序包即可。OC4J服務(wù)器是一個(gè)純Java的服務(wù),可以運(yùn)行在各類(lèi)平臺(tái),需要Jdk 1.3的支持。
在Oracle 9i Jdeveloper中已經(jīng)包含了OC4J獨(dú)立運(yùn)行版本。可以在IDE開(kāi)發(fā)環(huán)境中進(jìn)行調(diào)試。
3 開(kāi)發(fā)實(shí)例
本實(shí)例涉及的OLAP系統(tǒng)是某石油天然氣公司決策支持系統(tǒng)的一個(gè)重要組成部分。它需要對(duì)公司的生產(chǎn)計(jì)劃、實(shí)際產(chǎn)量、生產(chǎn)費(fèi)用、庫(kù)存等數(shù)據(jù)提供一個(gè)OLAP查詢(xún)系統(tǒng)。
整個(gè)OLAP應(yīng)用核心是DSS數(shù)據(jù)倉(cāng)庫(kù)。該數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)來(lái)源是公司生產(chǎn)管理信息系統(tǒng)和實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)。原始數(shù)據(jù)通過(guò)數(shù)據(jù)抽取、轉(zhuǎn)換和裝載(ETL)模塊從OLTP應(yīng)用系統(tǒng)以及實(shí)時(shí)數(shù)據(jù)庫(kù)裝載到數(shù)據(jù)倉(cāng)庫(kù)中。OLAP查詢(xún)針對(duì)數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)進(jìn)行。
數(shù)據(jù)倉(cāng)庫(kù)建立后,可以利用Jdeveloper 9i提供的查詢(xún)構(gòu)建器建立查詢(xún)。查詢(xún)是構(gòu)建BI Beans應(yīng)用的一個(gè)基礎(chǔ)。在構(gòu)建查詢(xún)時(shí),需要確定顯示對(duì)象是交叉表、圖形還是普通表格,然后選擇需要顯示的事實(shí)數(shù)據(jù)以及維數(shù)據(jù),最后將該查詢(xún)保存到BI Catalog中。
查詢(xún)建立后,建立相關(guān)的JSP頁(yè)面。由于BI Beans已經(jīng)封裝了圖形顯示、OLAP數(shù)據(jù)訪問(wèn)、人機(jī)操作響應(yīng)等細(xì)節(jié),因此,JSP網(wǎng)頁(yè)很簡(jiǎn)單。下面是一個(gè)典型的JSP頁(yè)面代碼:



其中,<orabi:Presentation />標(biāo)記就是控制所要顯示查詢(xún)的。本例中查詢(xún)的名稱(chēng)是plan(location=″plan″)。該查詢(xún)保存在BI目錄中。
<orabi:Render />標(biāo)記是控制顯示的。由于用戶(hù)要在界面上進(jìn)行操作(上卷、下鉆、統(tǒng)計(jì)等),因此,顯示界面都在一個(gè)Form中,用戶(hù)對(duì)界面的操作轉(zhuǎn)化成HTTP GET請(qǐng)求,由BI Beans自動(dòng)處理這個(gè)GET請(qǐng)求。Render標(biāo)記可以顯示各類(lèi)元素。通過(guò)id屬性與前面定義的Bean進(jìn)行關(guān)聯(lián)。
4 結(jié) 論
由于技術(shù)的發(fā)展,企業(yè)得到海量信息的能力已經(jīng)越來(lái)越強(qiáng),但對(duì)信息的分析、理解以及再利用的能力卻沒(méi)有實(shí)質(zhì)性的提高。針對(duì)這種情況,利用Oracle 的BI Beans結(jié)合數(shù)據(jù)倉(cāng)庫(kù),為企業(yè)處理海量信息、建立有效的決策支持系統(tǒng)提供了一種快捷的方法。通過(guò)OLAP在不同領(lǐng)域中的應(yīng)用,能幫助企業(yè)決策者面對(duì)商業(yè)環(huán)境的快速變化作出敏捷的反應(yīng)和更科學(xué)、更合理的商業(yè)決策。它有助于提高企業(yè)的運(yùn)作效率,建立有利的客戶(hù)關(guān)系,增加產(chǎn)品的銷(xiāo)售,幫助企業(yè)從現(xiàn)有的知本中提煉更多的價(jià)值。
用BI Beans開(kāi)發(fā)應(yīng)用是比較耗內(nèi)存的。如果發(fā)布到應(yīng)用服務(wù)器OC4J上,需要提高應(yīng)用服務(wù)器的默認(rèn)最大內(nèi)存,否則會(huì)引起內(nèi)存溢出的錯(cuò)誤。例如,對(duì)于獨(dú)立的OC4J服務(wù)器,默認(rèn)的啟動(dòng)命令是:“start java -jar oc4j.jar”,需要修改成:“start java -Xmx256M -jar oc4j.jar”,以提高最大內(nèi)存。特別是在應(yīng)用發(fā)布后,最好重新啟動(dòng)一次OC4J服務(wù)。服務(wù)器至少配置512MB內(nèi)存,否則運(yùn)行速度會(huì)很慢。不過(guò),隨著硬件價(jià)格的不斷降低,這個(gè)問(wèn)題也變得容易解決了。
參考文獻(xiàn)
1 Jiawei H,Kamber M.數(shù)據(jù)挖掘:概念與技術(shù).北京:機(jī)械工業(yè)出版社,2001
2 Inmon W H.數(shù)據(jù)倉(cāng)庫(kù).北京:機(jī)械工業(yè)出版社,2000
3 Oracle9i Business Intelligence Beans,An Oracle White Paper,http://otn.oracle.com,2002,9
4 Oracle9i OLAP:A Scalable Web-Based Business Intelligence Platform An Oracle White Paper,http://otn.oracle.com,2001,4
