2012-03-19 2 views
1

몬드리안을 처음 사용했습니다. OLAP 작업을 위해 내 프로젝트에서 사용하고 있습니다. Foodmart 데이터베이스로 테스트 중입니다. 문제는 JSON 형식의 OLAP 연산 결과가 필요하다는 것입니다. 몬 드리 안 (mondrian)은 JSON과 동일한 구조를 계층 구조의 형태로 가지고 있습니다. mondrian MDX 쿼리의 결과에서 JSON 파일을 출력으로 생성하려고합니다. 결과는 OLAP 조작과 유사해야합니다. MDX 쿼리에서 생성 된 결과를 반복하는 방법을 모르겠습니다. 다음은 코드입니다.몬드리안 출력에서 ​​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 작업을 수행해야합니다. 결과 데이터는 시각화를 위해 D3 http://mbostock.github.com/d3에 전달할 JSON 형식이어야합니다. 데이터 형식의 경우 JSON 형식을 사용해야합니다. MDX 결과를 반복하고 JSON 파일로 변환하는 방법을 제안하십시오. 나는이 목적으로 펜타 호 몬드리안을 사용하고 있습니다. 감사합니다. . 당신이 PHP로 작업하는 경우

답변

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();