Как сгенерировать файл JSON из вывода Mondrian - PullRequest
1 голос
/ 19 марта 2012

Я новичок в Мондриане. Я использую его в своем проекте для операций OLAP. Я проверяю это с базой данных Foodmart. Проблема в том, что мне нужны результаты операций OLAP в формате JSON. Я знаю, что Mondrian имеет ту же структуру, что и JSON в форме иерархий. Я хочу сгенерировать файл JSON в качестве вывода из результата запроса MDX Mondrian. Результат должен быть похож на операции OLAP. Я не знаю, как перебрать результат, сгенерированный из запроса MDX. Вот код.

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

На самом деле мне нужно выполнить операции OLAP с хранилищем данных, которое хранится в MySQL. Приведенные данные должны быть в формате JSON, который я передам в D3 http://mbostock.github.com/d3 для визуализаций. Для формата данных я должен использовать формат JSON. Пожалуйста, любые предложения, как повторить результат MDX и преобразовать его в файл JSON. Я использую Pentaho Mondrian для этой цели. Спасибо.

Ответы [ 2 ]

1 голос
/ 09 апреля 2015

Вот пример того, что, я полагаю, вы хотите сделать:

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();
1 голос
/ 21 августа 2012

если вы работаете с PHP, вы можете использовать эту библиотеку для преобразования результата xmla в Json http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/

...