開源BI平臺(tái)Openi的開發(fā)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)
Posted on 2007-12-14 12:45 詩(shī)特林 閱讀(5747) 評(píng)論(1) 編輯 收藏 所屬分類: BI基于開源BI平臺(tái)Openi的數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的設(shè)計(jì)開發(fā)
應(yīng)IT168寫的專稿:http://publish.itpub.net/bi/2007-12-06/200712060945646.shtml
現(xiàn)在大家比較公認(rèn)的商業(yè)智能系統(tǒng)分為報(bào)表、OLAP、數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)挖掘和即席查詢五大塊,本身商業(yè)智能系統(tǒng)也只是一個(gè)比較新的概念,也許隨著技術(shù)和應(yīng)用的發(fā)展還會(huì)擴(kuò)充出來很多模塊。本文就基于開源BI平臺(tái)Openi的數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),進(jìn)行整體設(shè)計(jì)及開發(fā),就其中比較熱門的技術(shù),如OLP、數(shù)據(jù)倉(cāng)庫(kù)等進(jìn)行初步的控告,以期起到一個(gè)拋磚引玉的作用。
一、 開源的BI平臺(tái)
商業(yè)智能也稱作BI是英文單詞Business Intelligence的縮寫。商業(yè)智能通常被理解為將企業(yè)中現(xiàn)有的數(shù)據(jù)轉(zhuǎn)化為知識(shí),幫助企業(yè)做出明智的業(yè)務(wù)經(jīng)營(yíng)決策的工具。這里所談的數(shù)據(jù)包括來自企業(yè)業(yè)務(wù)系統(tǒng)的訂單、庫(kù)存、交易賬目、客戶和供應(yīng)商等來自企業(yè)所處行業(yè)和競(jìng)爭(zhēng)對(duì)手的數(shù)據(jù)以及來自企業(yè)所處的其他外部環(huán)境中的各種數(shù)據(jù)。而商業(yè)智能能夠輔助的業(yè)務(wù)經(jīng)營(yíng)決策,既可以是操作層的,也可以是戰(zhàn)術(shù)層和戰(zhàn)略層的決策。為了將數(shù)據(jù)轉(zhuǎn)化為知識(shí),需要利用數(shù)據(jù)倉(cāng)庫(kù)、聯(lián)機(jī)分析處理(OLAP)工具和數(shù)據(jù)挖掘等技術(shù)。因此,從技術(shù)層面上講,商業(yè)智能不是什么新技術(shù),它只是數(shù)據(jù)倉(cāng)庫(kù)、OLAP和數(shù)據(jù)挖掘等技術(shù)的綜合運(yùn)用。
從國(guó)內(nèi)企業(yè)和政府部門的信息化建設(shè)發(fā)展來看,從最初的各類MIS系統(tǒng)到近幾年流行的ERP、CRM等,用戶的數(shù)據(jù)積累已達(dá)到了一定的程度,很多行業(yè)的用戶面對(duì)越來越激烈的市場(chǎng)競(jìng)爭(zhēng),他們需要對(duì)自己的數(shù)據(jù)(用戶、市場(chǎng)、產(chǎn)品)進(jìn)行分析,挖掘出潛在的商機(jī),降低公司的運(yùn)作成本,這是BI和數(shù)據(jù)倉(cāng)庫(kù)類產(chǎn)品被市場(chǎng)看好、不斷獲得增長(zhǎng)的根本原因!
在現(xiàn)有的市場(chǎng)中,對(duì)于BI類產(chǎn)品來說往往是與數(shù)據(jù)倉(cāng)庫(kù)整體解決方案相關(guān)聯(lián),一些國(guó)內(nèi)的IT公司也正在把BI和數(shù)據(jù)倉(cāng)庫(kù)的結(jié)合作為行業(yè)的解決方案來推廣到自己熟悉的領(lǐng)域。對(duì)于IT公司來說在ERP、CRM之后需要尋找新的利潤(rùn)增長(zhǎng)點(diǎn),BI和數(shù)據(jù)倉(cāng)庫(kù)的出現(xiàn)無疑是一個(gè)莫大的商機(jī)。
在商業(yè)智能系統(tǒng)出現(xiàn)之前,大家都是通過報(bào)表來展現(xiàn)數(shù)據(jù)庫(kù)中的數(shù)據(jù),報(bào)表有簡(jiǎn)單有復(fù)雜,當(dāng)然報(bào)表只能靜態(tài)的展現(xiàn)一部分?jǐn)?shù)據(jù),用戶只能看到已經(jīng)做好的報(bào)表,不能根據(jù)自己的需要重新構(gòu)造報(bào)表。隨著技術(shù)的發(fā)展,出現(xiàn)了OLAP分析,它能夠讓用戶根據(jù)自己的想法對(duì)數(shù)據(jù)進(jìn)行聚類、分類、鉆取等操作,這樣就很好的解決了報(bào)表不能動(dòng)態(tài)展現(xiàn)的問題。之后隨著數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)挖掘技術(shù)的不斷完善,大家都認(rèn)為商業(yè)智能系統(tǒng)主要是分析數(shù)據(jù),就把OLAP、數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)挖掘歸類到一起形成了BI系統(tǒng),這三項(xiàng)確實(shí)能夠體現(xiàn)Intelligence的概念。因此初期的BI系統(tǒng)都是只含有這三塊,但是用戶在使用一段時(shí)間后認(rèn)為報(bào)表模塊是必不可少的,因此都紛紛要求BI供應(yīng)商將報(bào)表模塊加進(jìn)來,為什么會(huì)出現(xiàn)這種情況呢?因?yàn)殡m然OLAP能動(dòng)態(tài)展現(xiàn)數(shù)據(jù),但是它主要還是側(cè)重于決策者的分析,而中層領(lǐng)導(dǎo)更喜歡看到的是報(bào)表,他們需要掌握自己所分管部分的運(yùn)營(yíng)情況,報(bào)表則是最好的展現(xiàn)數(shù)據(jù)的方式,因此最后各BI廠商就將報(bào)表也加入到BI系統(tǒng)中去了,例如BO收購(gòu)水晶報(bào)表,Hyperion收購(gòu)Brio等都是BI廠商收購(gòu)報(bào)表廠商來完善自己的報(bào)表功能。
下面列出相對(duì)成熟和完整,并且有借鑒意義的開源BI套件,而本文中的倉(cāng)庫(kù)系統(tǒng)的設(shè)計(jì)及開發(fā)采用就是其中的Openi這種開源的BI平臺(tái)。
(1)、Bizgres
為GreenPlum公司主導(dǎo)的開源項(xiàng)目,和Sun公司達(dá)成合作關(guān)系。Bizgres為BI應(yīng)用而對(duì)PostgreSQL做了優(yōu)化,提高了大負(fù)荷的并行計(jì)算能力,在BI環(huán)境中,相對(duì)于普通的關(guān)系型數(shù)據(jù)庫(kù)具有卓越的數(shù)據(jù)處理性能。Bizgres的數(shù)據(jù)庫(kù)平臺(tái)可以和KETL和JasperReports進(jìn)行整合,從而形成一個(gè)BI套件。
(2)、Openi
是一個(gè)Java開發(fā)的Web應(yīng)用,能對(duì)OLAP服務(wù)器、關(guān)系數(shù)據(jù)庫(kù)和數(shù)據(jù)挖掘服務(wù)器進(jìn)行分析和報(bào)表展示,非常易于使用和部署,界面美觀友好,后續(xù)還將支持?jǐn)?shù)據(jù)挖掘和ETL等。
(3)、Pentaho
是一個(gè)以工作流為核心的、強(qiáng)調(diào)面向解決方案而非工具組件的BI套件,整合了多個(gè)開源項(xiàng)目,目標(biāo)是和商業(yè)BI相抗衡。它包括。由上可見Pentaho是一個(gè)很完善的BI解決方案。Pentaho偏向于與業(yè)務(wù)流程相結(jié)合的BI解決方案,側(cè)重于大中型企業(yè)應(yīng)用。
(4)、SpagoBI
SpagoBI 集成了Mondrain和JProvit,能夠通過OpenLaszlo產(chǎn)生實(shí)時(shí)報(bào)表。SpagoBI使用java開發(fā),不依賴于具體的操作系統(tǒng),有很強(qiáng)的擴(kuò)展能力。根據(jù)其Roadmap可以看出,SpagoBI將融入更多的BI功能,甚至BI之外的功能。
二、 系統(tǒng)設(shè)計(jì)
1.系統(tǒng)體系結(jié)構(gòu)
該系統(tǒng)基與多層體系結(jié)構(gòu)設(shè)計(jì),其中包括:
WEB客戶端層;
WEB服務(wù)器層;
數(shù)據(jù)持久層。
系統(tǒng)多層體系結(jié)構(gòu)圖
2.系統(tǒng)數(shù)據(jù)流程
下面我們來介紹一下數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的數(shù)據(jù)流程,以此來讓用戶更好的把握產(chǎn)品的整體架構(gòu)和功能原理。下圖為系統(tǒng)的數(shù)據(jù)流程與相關(guān)功能關(guān)系圖。
數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的數(shù)據(jù)流程
從上面的圖中我們可以看到,數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)系統(tǒng)數(shù)據(jù)有兩類:業(yè)務(wù)數(shù)據(jù)和多維數(shù)據(jù)。業(yè)務(wù)數(shù)據(jù)由業(yè)務(wù)系統(tǒng)產(chǎn)生,經(jīng)過一系列處理并放到數(shù)據(jù)倉(cāng)庫(kù)中的關(guān)系數(shù)據(jù)庫(kù)。由于它直接來源于業(yè)務(wù)系統(tǒng),因此,它真實(shí)反映了業(yè)務(wù)系統(tǒng)的明細(xì)數(shù)據(jù),由于其數(shù)據(jù)量有可能很大,訪問時(shí)需要考慮要消耗的資源。
多維數(shù)據(jù)是系統(tǒng)從數(shù)據(jù)倉(cāng)庫(kù)中經(jīng)過匯總、統(tǒng)計(jì)而產(chǎn)生的。它通過采用多維結(jié)構(gòu)和將一些數(shù)據(jù)預(yù)先進(jìn)行了統(tǒng)計(jì)等預(yù)處理操作,對(duì)原始數(shù)據(jù)進(jìn)行重新組合,來實(shí)現(xiàn)靈活而快速的數(shù)據(jù)訪問。
3.系統(tǒng)開發(fā)框架
系統(tǒng)架構(gòu)圖
4.多維分析主題(CUBE)
存儲(chǔ)用戶所關(guān)心的某一分析主題的相關(guān)數(shù)據(jù),其下包括多個(gè)維(分析角度)和一或多個(gè)指標(biāo)。例如一個(gè)名為Sales的多維分析主題通常會(huì)包括時(shí)間、產(chǎn)品、門店、顧客以及指標(biāo)如銷售額、成本等等。
(1)、維
維度是描述事物特征的一個(gè)角度。例如門店銷售情況需要分析商品銷售的時(shí)間、地點(diǎn)、商品名等。這里的時(shí)間、地點(diǎn)、商品名就是門店銷售情況的分析維度。
(2)、維結(jié)構(gòu)
維度是有結(jié)構(gòu)的,每個(gè)維度可以由若干個(gè)層次組成的,例如時(shí)間維度,可以由四個(gè)層次組成:年、季、月、日,每一個(gè)層次又由若干個(gè)維成員組成。
(3)、維成員
組成維度的子成員,如時(shí)間維度可以由其維成員2003年、2004年、2005年等具體年份來構(gòu)成。
(4)、分析主題
用戶所關(guān)注業(yè)務(wù)的一個(gè)考核方面:如門點(diǎn)銷售情況分析,倉(cāng)庫(kù)庫(kù)存情況分析等等。
(5)、指標(biāo)
一個(gè)特殊的維度。它的成員都是數(shù)值型的,用來描述維度或維成員的的量屬性,例如門店銷售情況分析中的銷售額 ,商品成本等。
(6)、多維分析報(bào)表
多維分析報(bào)表中的數(shù)據(jù)來源于一個(gè)多維分析主題。多維分析主題能將同一個(gè)分析主題所涉及到的數(shù)據(jù),即影響因素“維”和衡量因素“指標(biāo)”集中存儲(chǔ)并且部分預(yù)先統(tǒng)計(jì)出來,多中角度,對(duì)從原始數(shù)據(jù)中轉(zhuǎn)化出來的、能夠真正為用戶所理解的、并真實(shí)反映企業(yè)特征的信息,進(jìn)行快速、一致、交互地存取,從而獲得對(duì)數(shù)據(jù)的更深入地了解。多維分析報(bào)表的優(yōu)點(diǎn)在于能夠擺脫業(yè)務(wù)系統(tǒng)數(shù)據(jù)及數(shù)據(jù)結(jié)構(gòu)的限制,真正地以客戶的思維邏輯來生成報(bào)表。
三、 系統(tǒng)開發(fā)
1 .程序運(yùn)行框架
本系統(tǒng)主要基于Spring Web MVC框架開發(fā),
Action配置文件為WEB-INF"springapp-servlet.xml,
View配置文件為WEB-INF"classes"springapp-views.properties
程序運(yùn)行框架圖如圖所示:
程序運(yùn)行框架圖
2 .WCF組件
本系統(tǒng)對(duì)OLAP的操作主要基于JPivot組件實(shí)現(xiàn),界面展現(xiàn)主要采用WCF組件進(jìn)行渲染,本節(jié)對(duì)JPivot組件和WCF組件的使用進(jìn)行詳細(xì)介紹。
WCF是一個(gè)JSP 自定制的標(biāo)簽庫(kù),它主要通過XSLT對(duì)XML進(jìn)行渲染,創(chuàng)建、展現(xiàn)和驗(yàn)證HTML表單。特別地,JPivot組件通過Renderable接口中的render方法生成組件的XML描述信息,再借助于WCF的Render標(biāo)簽可以將XML描述信息轉(zhuǎn)換為HTML發(fā)布到用戶界面上。以下對(duì)WCF部分標(biāo)簽的用法分別予以介紹。
(1).form
此組件采用XML文件的方式來創(chuàng)建HTML表單,該組件在設(shè)計(jì)階段并不中見,必須通過WCF render標(biāo)記進(jìn)行渲染后方可見。XML文件的格式如下:
示例:
<xform style="twocolumn">
<title value="Form Demo">
<imgButton label="Cancel" .../>
</title>
<textField type="int" modelReference="intValue" label="Count" .../>
<checkBox modelReference="nestedBean.boolValue" label="Check Me" .../>
</xform>
而它的數(shù)據(jù)綁定而言,關(guān)聯(lián)到了相關(guān)的JavaBean。通過modelReference屬性來對(duì)bean屬性注入值。當(dāng)然modelReference可以包含EL表達(dá)式。
示例:
<jsp:useBean id="testbean" class="com.tonbeller.wcf.form.TestBean" scope="session" />
<wcf:form id="formcomp" xmlUri="/WEB-INF/formdemo.xml" model="#{testbean}"/>
<form action="formdemo.jsp" method="POST" id="form01">
<wcf:render ref="#{formcomp}" xslUri="/WEB-INF/wcf/wcf.xsl" xslCache="true"/>
</form>
示例:
<xform style="twocolumn">
<title value="fmt:fetch.title.from.resource.bundle">
<imgButton id="cancel" src="wcf/form/cancel.png" action="revert" label="Cancel" forward="tabledemo.jsp" handler="com.tonbeller.wcf.form.ButtonHandler"/>
</title>
<!-- Text control -->
<textField id="string" type="string" modelReference="stringValue" label="Text:" value="" title="please enter some text"/>
<textField id="int" type="int" modelReference="intValue" label="Integer:" value="" title="please enter an integer"/>
<textField id="double" type="double" modelReference="doubleValue" label="Decimal number:" value="" title="please enter a decimal number"/>
<textField id="date" type="date" modelReference="dateValue" label="Date:" value="" title="please enter a date"/>
<textField id="dateTime" type="dateTime" modelReference="dateTimeValue" label="Date/Time:" value="" title="please enter a date/time"/>
<!-- Password control -->
<password id="password" type="string" modelReference="password" label="Password:" value=""/>
<!-- Text area -->
<textArea id="textarea" rows="7" cols="40" type="string" modelReference="textArea" label="Text area:" value="This is a text area"/>
<checkBox id="checkbox1" modelReference="checkBox1" label="check box 1"/>
<checkBox id="checkbox2" modelReference="checkBox2" label="check box 2"/>
<!-- ListBox, single selection -->
<listBox1 id="list1" type="int" modelReference="list1" label="List, single selection:">
<listItem id="list1.1" value="1" label="list item 1"/>
<listItem id="list1.2" value="2" label="list item 2"/>
<listItem id="list1.3" value="3" label="list item 3"/>
<listItem id="list1.4" value="4" label="list item 4"/>
</listBox1>
<!-- ListBox, multiple selection -->
<listBoxN id="listN" type="int" modelReference="listN" label="List, multiple selection:">
<listItem id="listN.1" value="1" label="list item 1"/>
<listItem id="listN.2" value="2" label="list item 2"/>
<listItem id="listN.3" value="3" label="list item 3"/>
<listItem id="listN.4" value="4" label="list item 4"/>
</listBoxN>
<!-- ListBox, single selection, dynamic item list -->
<listBox1 id="listbox" type="int" modelReference="dynList" label="List, dynamic content:" handler="com.tonbeller.wcf.form.TestItems"/>
<label label="This is a label" value="value attribute goes here"/>
<label label="Dynamic label (content from TextArea)" modelReference="textArea"/>
<radioButton id="radio1" modelReference="radioButton1" group-id="group1" label="radio button 1"/>
<radioButton id="radio2" modelReference="radioButton2" group-id="group1" label="radio button 2"/>
<buttons>
<button id="cancel" action="revert" label="Cancel" forward="tabledemo.jsp" handler="com.tonbeller.wcf.form.ButtonHandler"/>
<button id="revert" action="revert" label="Revert" handler="com.tonbeller.wcf.form.ButtonHandler"/>
<button id="validate" action="validate" label="Validate" handler="com.tonbeller.wcf.form.ButtonHandler"/>
<button id="ok" action="validate" label="OK" forward="tabledemo.jsp" handler="com.tonbeller.wcf.form.ButtonHandler"/>
</buttons>
</xform>
3.JPivot組件
JPivot - 是一個(gè)JSP 自定制的標(biāo)簽庫(kù),可以繪制一個(gè)OLAP表格和圖表。用戶可以執(zhí)行典型的OLAP操作,如上鉆、下鉆、切片、和切塊等。JPviot組件不能直接產(chǎn)生界面輸出,但Pviot所有的可發(fā)布的組件都實(shí)現(xiàn)了Renderable接口,所有組件的輸出信息都是通過Renderable接口中的render方法生成的,然后由WCF標(biāo)簽庫(kù)的render標(biāo)簽調(diào)用JPivot組件的render方法將組件信息輸出到界面上。以下對(duì)JPivot部分組件的用法分別予以介紹。
(1).chooseQuery
采用queryName屬性來創(chuàng)建查詢內(nèi)容。
示例:
<jp:mondrianQuery id="query01" queryName="name1">
SELECT ...
</jp:mondrianQuery>
<jp:mondrianQuery id="query01" queryName="name2">
SELECT ...
</jp:mondrianQuery>
...
<jp:chooseQuery id="query01" queryName="name1"/>
(2).clickable
使所有的維度成員或級(jí)別可以點(diǎn)擊,例如產(chǎn)生一個(gè)鏈接。產(chǎn)生的URL地址包含成員的唯一名稱。當(dāng)然,它的動(dòng)作依賴于sessionParam屬性,當(dāng)它存在時(shí),在新頁面展示之前,參數(shù)值將寫進(jìn)com.tonbeller.jpivot.param.SessionParamPool。當(dāng)不存在時(shí),參數(shù)值將通過編碼附加在超級(jí)鏈接后面。
示例:
<jp:mondrianQuery ...>
select .. from Sales
<jp:clickable urlPattern="/otherpage.jsp?param={0}" uniqueName="[Customers]"/>
<jp:clickable page="/yetotherpage.jsp" uniqueName="[Products].[Category]" sessionParam="Category"/>
</jp:mondrianQuery>
四、 系統(tǒng)效果
1. 設(shè)置數(shù)據(jù)源和多維模型
選擇數(shù)據(jù)源和多維模型
2. 瀏覽報(bào)表
打開并瀏覽報(bào)表