這是一篇測試博客

軟件版本 Mondrian 3.6.1

       關於網上的Mondrian的教程有很多,不過好像都是copy的都長的一個樣,並且都是基於Jpivot來進行分析和闡述的,今天就和大家來聊一聊Mondrian(關係型多維分析服務器 ROLAP),其實更準確的說法應該是翻譯器(個人觀點),Mondrian本身是不存儲數據的,通過MDX語句(一個類似於SQL的查詢語言)來獲取數據,Mondrian 運行的時候要連數據庫,並且還要有一個數據模型配置文件(Mondrian叫schema),其實就是一個取數據的規則;由此可知Mondrian只不過是把MDX 翻譯成了SQL然後從數據庫中把數據拿出來給用戶,當然這中間Mondrian還做一很多工作(要不太慢了)。關於什麼是多維數據集,什麼是MDX,以及Mondrian的架構,我們會在後面的文章裏結合實例逐個講述。

       接觸過Pentaho、Saiku、Jpivot的都應該知道他們都用到了Mondrian做爲其多維數據處理的服務器,網上的很多關於Mondrian的文章也都是以Jpivot來進行分析的,不過Jpivot已經被拋棄了作者也不再更新了,並且Jpivot只能支持到Mondrian3.5 所以對於新版本的Mondrian一定是不能用Jpivot了(不過Jpivot有一個替代品Pivot4j這個還在持續維護),這裏還是推薦大家用Saiku或者Pivot4j,有興趣的同學可以研究一下它們的源碼(https://github.com/),你會發現他們的設計模式和結構很相似且和Jpivot大不相同。如果我們不想用Saiku、pivot4j 這樣現成的東西(畢竟有很多東西我們用不到)那麼如何把Mondrian 集成到我們自己的應用中去,或者我們想構建自己的多維分析服務器應該怎麼做呢!下面我們就以把Mondrian集成到WebApp中以例來講一下把Mondrian集成進去是多麼的簡單。

 首先 新建一個Web工程如圖



  

然後把所需要的Jar包引入工程(這些包可以在Saiku或者pivot4j中找到也可以自己從網上下載) 如圖



 第三步 在工程的WEB-INF目錄下新建一個xml文件取名爲datasources.xml

這裏需要說明一下我事先在Mysql數據庫中新建一個alen數據庫,庫中有三張表

這裏的datasources.xml中配置的就是連接Mysql數據庫的信息內容如下

 

Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <DataSources>  
  3. <DataSource>  
  4. <DataSourceName>alen</DataSourceName>  
  5. <DataSourceDescription>this is my first mondiran application</DataSourceDescription>  
  6. <URL>http://localhost:8083/xmla</URL>  
  7. <DataSourceInfo><![CDATA[Provider=mondrian;Jdbc=jdbc:mysql://localhost:3306/alen?user=root&password=admin&useUnicode=true&characterEncoding=utf8;JdbcDrivers=com.mysql.jdbc.Driver]]></DataSourceInfo>  
  8. <ProviderName>mondrian</ProviderName>  
  9. <ProviderType>MDP</ProviderType>  
  10. <AuthenticationMode>Unauthenticated</AuthenticationMode>  
  11. <Catalogs>  
  12. <Catalog name="cname">  
  13. <Definition>/WEB-INF/schema/demo.mondrian.xml</Definition>  
  14. </Catalog>  
  15. </Catalogs>  
  16. </DataSource>  
  17. </DataSources>  

DataSourceName:自定義保持唯一

 

URL:配置的是Web向外發佈的訪問接口,要和Web下面配置的Servlet保持一致;

DatasourceInfo:這裏配置的是訪問數據庫的信息

Definition: 數據模型配置文件所在位置(Schema)

這裏的DataSource可以配置多個(爲了簡單這時只配置了一個)。

注意:這裏的XML每個節點都不能省要不會報錯

 

數據源有了,下面就是數據模型的配置了,也就是上面說的那個schema 可以使用schema-workbench工具來配置非常方便,友好 工具界面如圖:



 

配置好數據模型文件後把它放到WEB-INF/schema/目錄下這也是datasource.xml中配置的

 

最後一步,數據有了,數據模型也有了,下面就是怎麼訪問這些數據 了 你只需要配置一個Servlet就可以了

修改web.xml 向其加入mondrian Servlet 內容如下

 

Xml代碼  收藏代碼
  1. <servlet>  
  2.  <servlet-name>mondrian</servlet-name>  
  3. <servlet-class>mondrian.xmla.impl.MondrianXmlaServlet</servlet-class>   
  4.  </servlet>    
  5.  <servlet-mapping>  
  6.  <servlet-name>mondrian</servlet-name>  
  7.  <url-pattern>/xmla</url-pattern>  
  8.  </servlet-mapping>  

 

 

好了大功告成 把你的WebApp部署到Tomcat中試試吧!

果斷部署運行 打開 瀏覽器 輸入 http://localhost:8083/mondrianweb/xmla



 

嗯,這是怎麼回事 哪裏配置錯了嗎,no no 恭喜你 已經大功告成了,只不過 你的訪問方法不對這個接口是基於SOAP的所以只能以調用Webservice的方式調用 不過這裏我們可以通過 Olap4j來訪問 新建Java工程 引入包 olap4j,olap4j-xmla,xercesImpl 新建包含main方法的測試類內容如下

 

Java代碼  收藏代碼
  1. public static void main(String[] args) throws ClassNotFoundException, SQLException {  
  2.         // TODO Auto-generated method stub  
  3.         //callschema();  
  4.         callxmla();  
  5.           
  6.       
  7.     }  
  8.       
  9.     public static void callxmla() throws ClassNotFoundException, SQLException{  
  10.         Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");  
  11.         Connection connection =  
  12.             DriverManager.getConnection(  
  13.                 "jdbc:xmla:Server=http://localhost:8083/mondrianweb/xmla");  
  14.         OlapConnection olapConnection = connection.unwrap(OlapConnection.class);  
  15.         OlapStatement statement = olapConnection.createStatement();  
  16.         CellSet cellSet =  
  17.                 statement.executeOlapQuery(  
  18.                         "SELECT {[Measures].[Totalcount]} ON 0,"  
  19.                         + "{[customer].[gender].members} on 1"  
  20.                         + "FROM [prd]");  
  21.           
  22.         for (Position row : cellSet.getAxes().get(1)) {  
  23.             for (Position column : cellSet.getAxes().get(0)) {  
  24.                 for (Member member : row.getMembers()) {  
  25.                     System.out.println("row members:"+member.getUniqueName());  
  26.                 }  
  27.                 for (Member member : column.getMembers()) {  
  28.                     System.out.println("column members:"+member.getUniqueName());  
  29.                 }  
  30.                 final Cell cell = cellSet.getCell(column, row);  
  31.                 System.out.println("cell value:"+cell.getValue());  
  32.                 System.out.println();  
  33.             }  
  34.         }  
  35.     }  

 

運行出現如下結果:

row members:[customer].[1]
column members:[Measures].[Totalcount]
cell value:79.0

row members:[customer].[2]
column members:[Measures].[Totalcount]
cell value:96.0

 

至此 我們就把Mondrian集成到了我們自己的WebApp中 OK 今天 就到這裏吧!

 

 

本人接觸Pentaho時間不長如果文中有錯誤望高手指出謝謝!

如果對文中有疑問請聯繫我


下期預告:Mondrian 集成 另一種方法

 

我的Email:[email protected]

我的博客:http://alenzhai.iteye.com/

另外也歡迎大家加入 下面的羣來聊一聊 開源BI那些事!

開源BI交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章