如果用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培訓 商業智能 商務智能 天善智能 上海天善