用java和olap4j從SSAS中獲取數據


      如果用Java去獲取一個SSAS的cube,這在微軟技術(C#)編寫的客戶端,這是非常容易的事情,因為有大量的文檔和例子。而用java從SSAS中獲取數據卻很少有文檔,但這是可以做到的,因為SSAS用到了XMLA。

      第一件事是你需要建立一個HTTP訪問。這一步通常有好幾個選項供你選擇,一是可以開發一個web服務客戶端去調用SSAS web服務。另一個是用類似JDBC的驅動:olap4j和jdbc4Olap。

    cube是SQL Server 2008 的。服務器是WAS(Webshpere Application Server 7.0),這意味着需要JDK1.6。jdbc選擇了olap4j

     綜上所述,java程序使用web服務客戶端或者類似jdbc的驅動通過XMLA與IIS進行連接。IIS用處理HTTP請求再用msmdpump.dll把請求傳輸到SSAS中。
第一步——安裝jar包

復制.jar文件到你的class path,import到java文件中。

import org.olap4j.*  

第二步——建立連接 
 
Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");   
OlapConnection con = (OlapConnection)DriverManager.getConnection("jdbc:xmla:Server=http://myserver/olap/msmdpump.dll;Catalog=MyCatalog");   
OlapWrapper wrapper = (OlapWrapper) con;   
OlapConnection olapConnection = wrapper.unwrap(OlapConnection.class);   
OlapStatement stmt = olapConnection.createStatement(); 

 

第三步——執行OLAP查詢

在這里寫MDX語句,讓SSAS查詢:


CellSet cellSet = stmt.executeOlapQuery("SELECT {[Measures].[Qty], [Measures].[Cost Base]} ON Columns, {[Product].[Category].[Category]} ON Rows FROM [Invoices]"); 

第四步——結果處理

下面的代碼通過兩重循環填充dataset。關鍵是你可以訪問MDX返回的結果的行和列了。

 
DataSet ds = new DataSet();   
for (Position rowPos : cellSet.getAxes().get(1)) {    
  ds.addRow();    
  for (Position colPos : cellSet.getAxes().get(0)) {   
    test += Integer.toString(rowPos.getOrdinal()) + " : " + Integer.toString(colPos.getOrdinal());    
    Cell cell = cellSet.getCell(colPos, rowPos);   
    test += "Value: " + cell.getFormattedValue() + "<br />";  
    ds.addValue("column" + Integer.toString(colPos.getOrdinal()), cell.getFormattedValue());    
  }   

 

 

 

 

 

 

 

 

 

BI培訓 商業智能 商務智能 天善智能 上海天善


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM