2012-03-19 76 views
1

我是Mondrian的新手。我在我的項目中使用它來進行OLAP操作。 我正在用Foodmart數據庫測試它。 問題是我需要JSON格式的OLAP操作結果。 我知道mondrian與層次結構中的JSON具有相同的結構。 我想生成一個JSON文件作爲mondrian MDX查詢結果的輸出。 結果應該與OLAP操作類似。 我不知道如何遍歷從MDX查詢生成的結果。 這是代碼。如何從Mondrian輸出生成JSON文件

String connStr = "Provider=mondrian;" + 
        "Catalog=/WEB-INF/FoodMart.xml;" + 
        "JdbcDrivers=com.mysql.jdbc.Driver;" + 
        "Jdbc=jdbc:mysql://localhost/foodmart;" + 
        "jdbcUser=root;" + 
        "jdbcPassword=;"; 

String queryStr ="select {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].>Store Sales]} ON COLUMNS,"+"Crossjoin(Hierarchize(Union({[Promotion Media].[All Media]}, >[Promotion Media].[All Media].Children)), {[Product].[All Products]}) 
ON ROWS"+" from [Sales]"+"where [Time].[1997]"; 

Connection connection = DriverManager.getConnection(connStr, null);   
Query query = connection.parseQuery(queryStr); 

Result result = connection.execute(query); 
result.print(new PrintWriter(System.out)); 

其實我需要在存儲在MySQL中的數據倉庫上執行OLAP操作。 結果數據應採用JSON格式,我將傳遞給D3 http://mbostock.github.com/d3進行可視化。 對於數據格式,我必須使用JSON格式。 請給出任何建議如何迭代MDX結果並將其轉換爲JSON文件。 我正在使用Pentaho Mondrian來達到這個目的。 謝謝。

回答

1

這裏是什麼,我想你想要做一個例子:

Class.forName("mondrian.olap4j.MondrianOlap4jDriver"); //load the driver 

Connection connection = DriverManager.getConnection("Provider=mondrian;" + 
       "Catalog=/WEB-INF/FoodMart.xml;" + 
       "JdbcDrivers=com.mysql.jdbc.Driver;" + 
       "Jdbc=jdbc:mysql://localhost/foodmart;" + 
       "jdbcUser=root;" + 
       "jdbcPassword=;"); 

OlapWrapper wrapper = (OlapWrapper) connection; 
OlapConnection olapConnection = wrapper.unwrap(OlapConnection.class); 

CellSet cellSet = statement.executeOlapQuery(query); 
CellSetAxis rows = cellSet.getAxes().get(1); //cube rows 
CellSetAxis columns = cellSet.getAxes().get(0); //cube columns 

int resultSize = rows.getPositionCount() * columns.getPositionCount(); 
String resultValues[] = new String[resultSize]; 
int valueIndex = 0; 

for (Position row : rows) { 
    for (Position column : columns) { 
     Cell cell = cellSet.getCell(column, row); 
     String cellValue = cell.getFormattedValue(); 
     resultValues[valueIndex++] = cellValue; 
    } 
} 

Gson gson = new Gson(); //gson library instance 
String resultString = gson.toJson(responseValues); //json string 
olapConnection.close(); 
connection.close();