版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1. Mondrian是什么?,Mondrian是一個開源項目。一個用Java寫成的OLAP引擎。它用MDX語言實現(xiàn)查詢,從關(guān)系數(shù)據(jù)庫(RDBMS)中讀取數(shù)據(jù)。然后經(jīng)過Java API以多維的方式對結(jié)果進行展示。 Mondrian的使用方式同JDBC驅(qū)動類似。可以非常方便的與現(xiàn)有的Web項目集成,1.1 Mondrian的體系結(jié)構(gòu)(Architecture),Mondrian OLAP 系統(tǒng)由四個層組成; 從最終用戶到數(shù)據(jù)中心, 順序為: 1.1.1 表現(xiàn)層(the presentation layer) 1.1.2 維度層(the dimensional layer) 1.1.3 集合層(t
2、he star layer) 1.1.4 存儲層(the storage layer) 結(jié)構(gòu)圖如下:,模式管理器,Mondrian的模式文件,它定義了關(guān)系數(shù)據(jù)到多維數(shù)據(jù)的映射。需要我們生成,表現(xiàn)層,多維層,集合層,存儲層,1.1.1 表現(xiàn)層(the presentation layer),表現(xiàn)層決定了最終用戶將在他們的顯示器上看到什么, 及他們?nèi)绾瓮到y(tǒng)產(chǎn)生交互。 有許多方法可以用來向用戶顯示多維數(shù)據(jù)集, 有 pivot 表 (一種交互式的表), pie, line 和圖表(bar charts)。它們可以用Swing 或 JSP來實現(xiàn)。 表現(xiàn)層以多維文法(grammar)(維、度量、單元)”
3、的形式發(fā)出查詢,然后OLAP服務(wù)器返回結(jié)果。,下面我們將對mondrian在 java web端使用的jpivot表現(xiàn)層進行簡單介紹, Jpivot表現(xiàn)層,JPivot是Mondrian的表現(xiàn)層TagLib,一直保持著良好的開發(fā)進度。 您可以通過訪問jpivot的官方網(wǎng)站,jpivot使用XML/ XSLT渲染OLAP報表:,JPivot使用 WCF (Web Component Framework) ,基于XML/XSLT來渲染W(wǎng)eb UI組件。這使它顯得十分另類。不過,OLAP報表這種非常復(fù)雜但又有規(guī)律可循的東西,最適合使用XSLT來渲染。,jpivot完全基于JSP+Tag
4、Lib:,JPivot另外一個可能使人不慣的地方是它完全基于taglib而不是大家熟悉的MVC模式。 但它可以很方便的將多維數(shù)據(jù)展示給最終用戶,如下表格:,jpivot其實是一個自定義jsp的標(biāo)簽庫。它基于XML/XSLT配置來生成相應(yīng)的html。所幸的是,我們并不需要了解太多關(guān)于這方面的內(nèi)容,我們只要掌握相應(yīng)jsp標(biāo)簽的使用即可。 在本教程的實例中,我們將會對一些常用到的jpivot標(biāo)簽進行講解。 您還可以通過漢化WEB-INF/jpivot下的xml文件來完成對jpivot的漢化工作,1.1.2 維度層(the dimensional layer),維度層用來解析、驗證和執(zhí)行MDX查詢要求
5、。 一個MDX查詢要通過幾個階段來完成:首先是計算坐標(biāo)軸(axes),再者計算坐標(biāo)軸axes 中cell的值。 為了提高效率,維度層把要求查詢的單元成批發(fā)送到集合層,查詢轉(zhuǎn)換器接受操作現(xiàn)有查詢的請求,而不是對每個請求都建立一個MDX 聲明。,集合層負責(zé)維護和創(chuàng)建集合緩存,一個集合是在內(nèi)存中緩存一組單元值, 這些單元值由一組維的值來確定。 維度層對這些單元發(fā)出查詢請求,如果所查詢的單元值不在緩存中,則集合管理器(aggregation manager)會向存儲層發(fā)出查詢請求,1.1.3 集合層(the star layer),1.1.4 存儲層(the storage layer),存儲層是一個
6、關(guān)系型數(shù)據(jù)庫(RDBMS)。它負責(zé)創(chuàng)建集合的單元數(shù)據(jù),和提供維表的成員。,1.2 API,Mondrian 為客戶端提供一個用于查詢的API 因為到目前為止,并沒有一個通用的用于OLAP查詢的API,因此Mondrian提供了它私有的API. 盡管如此,一個常使用JDBC的人將同樣發(fā)現(xiàn)它很熟悉.不同之處僅在于它使用的是MDX查詢語言,而非SQL,下面的java片段展示了如何連接到Mondrian,然后執(zhí)行一個查詢,最后打印結(jié)果. import mondrian.olap.*;import java.io.PrintWriter;Connection connection = DriverMan
7、ager.getConnection(Provider=mondrian; +Jdbc=jdbc:odbc:MondrianFoodMart; +Catalog=/WEB-INF/FoodMart.xml;,null,false);Query query = connection.parseQuery(SELECT Measures.Unit Sales, Measures.Store Sales on columns, + Product.children on rows +FROM Sales +WHERE (Time.1997.Q1, Store.CA.San Francisco);Re
8、sult result = connection.execute(query);result.print(new PrintWriter(System.out);,與JDBC類似,一個Connection由DriverManager創(chuàng)建, Query 對象類似于JDBC 的Statement,它通過傳遞一個MDX語句來創(chuàng)建.Result對象類似于JDBC的ResultSet,只不過它里面保存的是多維數(shù)據(jù) 您可以通過查看Mondrian幫助文檔里的javadoc來獲取更多關(guān)于Mondrian API的資料,通過上面的介紹,您應(yīng)該對mondrian的體系有一個基本的了解。 下面我們將通過一個簡單的
9、例子來加深您的理解。,2. 一個簡單的Mondrian例子,現(xiàn)在讓我們用一個簡單的例子來說明將Mondrian支持添加到您java web的具體步驟。,2.1 準(zhǔn)備開發(fā)工具及環(huán)境,本測試需要的環(huán)境: 操作系統(tǒng):Windows 2000; Web服務(wù)器:tomcat6.0; 關(guān)系數(shù)據(jù)庫:sql server 2000; 開發(fā)工具:eclipse + myeclipse; JDBC驅(qū)動:jtds-1.2.2; 您可以在/上下載到tomcat的最新版本及幫助; 您可以在,2.2 準(zhǔn)備Mondrian資源:,從,點擊此處下載,2.3 創(chuàng)建項目,啟動ecli
10、pse。 在eclipse中新創(chuàng)建一個web項目,名為Tezz。注意需要加入JSTL支持。 具體步驟如下:,點擊此處新打開建web項目對話框,2.3.1 打開新建web項目對話框,1. 輸入項目名稱Tezz,2.在這里打勾以加入JSTL支持,3. 選擇JSTL1.1,4.單擊此處完成創(chuàng)建,一個新項目Tezz的文件結(jié)構(gòu)如下:,項目名稱,Web根目錄,2.4 添加必須的文件,將下載的壓縮包進行解壓。完成后,進入文件夾可以看到如下目錄結(jié)構(gòu)。雙擊進入lib文件夾。,進入此文件夾,Lib文件夾有如下內(nèi)容: 注意到這里的mondrian.war文件是一個可直接布署的項目,我們需要將它解壓, 然后從中取出我
11、們所需要的文件。(建議將其擴展名改成zip,然后直接右鍵解壓),我們需要的文件在這個項目文件中,進入解壓后的文件夾,選中jpivot、wcf二個文件夾及busy.jsp、error.jsp、testpage.jsp三個文件,我們需要將這些資源復(fù)制到我們測試項目的WebRoot文件夾中。按ctrl+C鍵復(fù)制。,注:jpivot、wcf這兩個文件夾包含mondrian使用的圖像和css文件。Busy.jsp顯示等 待頁面、error.jsp顯示出錯頁面、testpage.jsp這文件的用處將在后面介紹。,切換到eclipse界面,在我們的Tezz項目的WebRoot文件夾處右擊鼠標(biāo),在彈出的菜單中
12、選擇Paste(粘貼)即可,粘貼完成后的項目結(jié)構(gòu)如下,注意:因為我們還未將所有資料復(fù)制到項目中,因此eclipse會顯示錯誤圖標(biāo),包含jpivot所用到的圖像及css樣式,包含wcf所用到的圖像及css樣式,調(diào)用jpivot標(biāo)簽來處理MDX查詢請求,并將最終結(jié)果以html的格式返回給用戶,最后進入WEB-INF文件夾(在上面步驟中解壓的項目文件mondrian.war里),選中jpivot、lib、wcf這三個文件夾,同樣需要復(fù)制它們到測試項目的WEB-INF文件夾中。,Jpivot、wcf這兩個文件夾包含jpivot和wcf用于生成用戶界面的配置文件(*.xml、*.xsl)及標(biāo)簽文件(*.
13、tld)的定義。Lib文件夾包含的是mondrian所要用的java包。,切換到eclipse界面,在我們的Tezz項目的WebRoot文件夾處右擊鼠標(biāo),在彈出的菜單中選擇Paste(粘貼),至此Mondrian的支持添加完畢,下面我們將配置web.xml,讓我們的項目能夠使用到mondrian的功能。,包含jpivot和wcf用于生成用戶界面的配置文件(*.xml)及標(biāo)簽文件(*.tld)的定義,2.5 配置web.xml,用eclipse打開我們在上面解壓的布署項目的WEB-INF/web.xml文件,我們需要從該web.xml文件中抽取出所需要的配置。,過濾器(filter) 復(fù)制右圖中
14、所示的xml代碼到我們測試項目Tezz的web.xml文件中。 作用: 這個過濾器在訪問/testpage.jsp前被調(diào)用。它被設(shè)計成jpivot的前端控制器,用于判斷并將用戶的請求發(fā)送到某個頁面。 注: 在實際項目中可以使用您自己定義的servlet或使用其他技術(shù)來替代它以提供更多的功能, JPivotController com.tonbeller.wcf.controller.RequestFilter indexJSP /index.html 如果這是一個新的會話,則轉(zhuǎn)到此頁面 errorJSP /error.jsp 出錯時顯示的頁面 busyJSP /busy.jsp 這個頁面用于當(dāng)
15、用戶點擊一個查詢時,在這個查詢還未將結(jié)果還回給用戶時所顯示的界面 JPivotController /testpage.jsp ,復(fù)制下面的listener到我們的web.xml文件中(用于初始化一些資源),Print servlet,該servlet用于將數(shù)據(jù)生成Excel文件或pdf文件并返回給用戶,如果您需要用到該功能,則需要將其copy到您項目的web.xml文件中, mondrian.web.taglib.Listener com.tonbeller.tbutils.res.ResourcesFactoryContextListener , Print Print Default c
16、onfiguration created for servlet. com.tonbeller.jpivot.print.PrintServlet Print /Print , MDXQueryServlet mondrian.web.servlet.MDXQueryServlet connectString mondrian.webapp.connectString MDXQueryServlet /mdxquery ,MDXQueryServlet用于接受并執(zhí)行一個MDX查詢,然后將該查詢以Html表格的形式返回。其中的參數(shù)connectString用于指定連接到數(shù)據(jù)庫的字符串,例如使用j
17、tds驅(qū)動連接到sql server 2000的字符串如下: Provider=mondrian;Jdbc=jdbc:jtds:sqlserver:/localhost/Tezz;user=sa;password=123456;Catalog=/WEB-INF/queries/tezz.xml;JdbcDrivers=net.sourceforge.jtds.jdbc.Driver; 如果您需要用到該功能,則需要將其copy到您項目的web.xml文件中。,DisplayChart 和GetChart 這兩個Servlet 用于生成圖表和將其顯示給最終用戶,如果您需要用到該功能,則需要將其co
18、py到您項目的web.xml文件中。, DisplayChart org.jfree.chart.servlet.DisplayChart GetChart GetChart Default configuration created for servlet. com.tonbeller.jpivot.chart.GetChart DisplayChart /DisplayChart GetChart /GetChart ,它們用于向用戶生成和顯示如下所示的各種圖表:,最后添加以下標(biāo)簽庫到我們的web.xml項目中即可, /WEB-INF/wcf/wcf-tags.tld /WEB-INF/j
19、pivot/jpivot-tags.tld ,到這里,您應(yīng)該對mondrian在web.xml的配置有一定的了解,并可按需要 添加相應(yīng)的功能。 接下來我們將要創(chuàng)建本例子所要用到的表格及數(shù)據(jù)。,2.6 準(zhǔn)備測試用表,本例使用的表結(jié)構(gòu)如下所示:,Sale是事實表,它有兩個維:客戶(customer)維和由兩個表組成的產(chǎn)品(Product)維。 表格的創(chuàng)建很簡單,您只需要將下面的sql語句導(dǎo)入數(shù)據(jù)庫即可,2.6.1 使用以下sql語句創(chuàng)建表,/*銷售表*/create table Sale (saleId int not null,proId int null,cusId int null, uni
20、tPrice float null, -單價number int null, -數(shù)量constraint PK_SALE primary key (saleId) /*用戶表*/create table Customer (cusId int not null,gender char(1) null, -性別constraint PK_CUSTOMER primary key (cusId)/*產(chǎn)品表*/create table Product (proId int not null,proTypeId int null,proName varchar(32) null,constraint
21、PK_PRODUCT primary key (proId)/*產(chǎn)品類別表*/create table ProductType (proTypeId int not null,proTypeName varchar(32) null,constraint PK_PRODUCTTYPE primary key (proTypeId),2.6.2 使用以下sql語句導(dǎo)入數(shù)據(jù),insert into Customer(cusId,gender) values(1,F)insert into Customer(cusId,gender) values(2,M)insert into Customer(
22、cusId,gender) values(3,M)insert into Customer(cusId,gender) values(4,F) insert into producttype(proTypeId,proTypeName) values(1,電器)insert into producttype(proTypeId,proTypeName) values(2,數(shù)碼)insert into producttype(proTypeId,proTypeName) values(3,家具) insert into product(proId,proTypeId,proName) value
23、s(1,1,洗衣機)insert into product(proId,proTypeId,proName) values(2,1,電視機)insert into product(proId,proTypeId,proName) values(3,2,mp3)insert into product(proId,proTypeId,proName) values(4,2,mp4)insert into product(proId,proTypeId,proName) values(5,2,數(shù)碼相機)insert into product(proId,proTypeId,proName) valu
24、es(6,3,椅子)insert into product(proId,proTypeId,proName) values(7,3,桌子) insert into sale(saleId,proId,cusId,unitPrice,number) values(1,1,1,340.34,2)insert into sale(saleId,proId,cusId,unitPrice,number) values(2,1,2,140.34,1)insert into sale(saleId,proId,cusId,unitPrice,number) values(3,2,3,240.34,3)in
25、sert into sale(saleId,proId,cusId,unitPrice,number) values(4,3,4,540.34,4)insert into sale(saleId,proId,cusId,unitPrice,number) values(5,4,1,80.34,5)insert into sale(saleId,proId,cusId,unitPrice,number) values(6,5,2,90.34,26)insert into sale(saleId,proId,cusId,unitPrice,number) values(7,6,3,140.34,7
26、)insert into sale(saleId,proId,cusId,unitPrice,number) values(8,7,4,640.34,28)insert into sale(saleId,proId,cusId,unitPrice,number) values(9,6,1,140.34,29)insert into sale(saleId,proId,cusId,unitPrice,number) values(10,7,2,740.34,29)insert into sale(saleId,proId,cusId,unitPrice,number) values(11,5,3
27、,30.34,28)insert into sale(saleId,proId,cusId,unitPrice,number) values(12,4,4,1240.34,72)insert into sale(saleId,proId,cusId,unitPrice,number) values(13,3,1,314.34,27)insert into sale(saleId,proId,cusId,unitPrice,number) values(14,3,2,45.34,27),2.7 建立模式(schema)文件,一個模式定義了一個多維數(shù)據(jù)庫. 它包含一個邏輯模型(logical mo
28、del)、一組數(shù)據(jù)立方(consisting of cubes)、層次(hierarchies)、和成員(members), 并映射到物理模型(關(guān)系數(shù)據(jù)庫)上。 簡單的說,配置一個模式就是配置一個關(guān)系數(shù)據(jù)結(jié)構(gòu)到多維數(shù)據(jù)結(jié)構(gòu)的映射。,注: 關(guān)于mondrian的模式及模式的配置,您可以通過閱讀mondrian的基本模式.pptx來了解。這里我們只對其進行了簡單介紹。,2.7.1 創(chuàng)建模式文件: 模式文件的創(chuàng)建很簡單。首先在WEB-INF下新建一個queries的文件夾,然后在該文件夾下創(chuàng)建一個名為tezz.xml的文件。再按下面的步驟將xml元素添加入即可。,將模式文件tezz.xml創(chuàng)建在這里
29、,2.7.2 配置模式文件:, 添加數(shù)據(jù)立方Sales: 往tezz.xml中添加如下代碼:, ,該模式的名稱,數(shù)據(jù)立方的名稱,數(shù)據(jù)立方Sales在關(guān)系數(shù)據(jù)庫中對應(yīng)的事實表的表名稱, 添加數(shù)據(jù)立方Sales的維: 添加客戶維:, , ,復(fù)制到,該維的名稱,事實表sale中用于引用維表Customer的外鍵列,表示該維的所有成員,維表Customer的主鍵,維表Customer在關(guān)系數(shù)據(jù)庫中的名稱,級別的名稱,級別gender在維表Customer中的列名稱,添加產(chǎn)品維(因為產(chǎn)品維由兩個表連接而成,因此比客戶維復(fù)雜些):, ,將上面的代碼復(fù)制在客戶維的下面即可,因為P
30、roduct維有兩個表,所以您必須在這里指定該維的主表,Join元素,用于將兩個以上的表連接起來,需要指定包含該級別的表,添加度量(共有三個度量:數(shù)量、平均單價和總銷售額):, (unitPrice*number) Measures.總銷售額 / Measures.數(shù)量 ,該度量在事實表中的列,度量的名稱,該度量的聚合方式,該度量的數(shù)據(jù)類型,總銷售額”這個度量并沒有引用事實表中的列,而是使用sql片斷unitPrice*number來生成一個列,用于定義一個計算成員,表示該計算成員是一個度量,該計算成員的生成規(guī)則,將這些xml元素添加在維元素下面即可, (unitPrice*number) M
31、easures.總銷售額 / Measures.數(shù)量 ,最后生成的tezz.xml文件內(nèi)容如下:,2.8 編寫MDX查詢語句,在模式文件定義完成之后,我們就可以根據(jù)它來編寫相應(yīng)MDX查詢語句了。 本例所用的MDX語句如下:,select Measures.數(shù)量,Measures.平均單價,Measures.總銷售額 on columns, (產(chǎn)品類別.所有產(chǎn)品,客戶性別.所有性別) on rows from Sales,數(shù)據(jù)請求子句,與sql中的select類似。它決定 MDX 語句的軸維度,指定從多維數(shù)據(jù)源sales中獲取數(shù)據(jù)(即上面定義的數(shù)據(jù)立方sales),定義第一個軸維度(別名columns),第二個軸維度 (別名rows),您應(yīng)該可以很清楚的看出,columns軸維度 包含的是度量。Rows軸維度包含的是維度 中的層次的所有成員(allMemberName),2.9 創(chuàng)建查詢文件,現(xiàn)在我們將創(chuàng)建一個jsp文件,該jsp使用jpivot的mondrianQuery標(biāo)簽來完成查詢。 該文件最后將被t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年浙江工貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 2026年浙江同濟科技職業(yè)學(xué)院單招綜合素質(zhì)考試模擬測試卷附答案
- 2026年廣東交通職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- 2026年安徽藝術(shù)職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案1套
- 2026年美女教師心理考試題庫及參考答案1套
- 2026年承德應(yīng)用技術(shù)職業(yè)學(xué)院單招職業(yè)適應(yīng)性考試題庫及答案1套
- 2026年山西體育職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試模擬測試卷及答案1套
- 2026年新團員入團考試試題附參考答案(考試直接用)
- 2026年張家口職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試模擬測試卷及答案1套
- 2025廣東茂名高州市殘疾人康復(fù)中心選聘工作人員8人考試模擬卷附答案
- 清華大學(xué)教師教學(xué)檔案袋制度
- 公租房完整租賃合同范本
- 東南大學(xué)附屬中大醫(yī)院2026年招聘備考題庫及答案詳解參考
- 2025新疆阿瓦提縣招聘警務(wù)輔助人員120人參考筆試題庫及答案解析
- 貴州國企招聘:2025貴州鹽業(yè)(集團)有限責(zé)任公司貴陽分公司招聘考試題庫附答案
- 2025-2026學(xué)年秋季學(xué)期教學(xué)副校長工作述職報告
- GB/T 3098.5-2025緊固件機械性能第5部分:自攻螺釘
- 2026年服裝電商直播轉(zhuǎn)化技巧
- 2025-2026學(xué)年小學(xué)美術(shù)浙美版(2024)二年級上冊期末練習(xí)卷及答案
- 會所軟裝合同范本
- 沖刺2026中考-科學(xué)備考班會課件
評論
0/150
提交評論