如何从 Mondrian 输出生成 JSON 文件

Posted

技术标签:

【中文标题】如何从 Mondrian 输出生成 JSON 文件【英文标题】:How to generate a JSON file from Mondrian output 【发布时间】:2012-03-19 16:18:21 【问题描述】:

我是蒙德里安的新手。我在我的项目中使用它进行 OLAP 操作。 我正在使用 Foodmart 数据库对其进行测试。 问题是我需要 JSON 格式的 OLAP 操作结果。 我知道 mondrian 具有与 JSON 相同的层次结构。 我想生成一个 JSON 文件作为 mondrian MDX 查询结果的输出。 结果应该类似于 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));

实际上我需要对存储在 MySQL 中的数据仓库执行 OLAP 操作。 结果数据应该是 JSON 格式,我将传递给 D3 http://mbostock.github.com/d3 进行可视化。 对于数据格式,我必须使用 JSON 格式。 请任何建议如何迭代 MDX 结果并将其转换为 JSON 文件。 为此,我正在使用 Pentaho Mondrian。 谢谢。

【问题讨论】:

【参考方案1】:

如果您正在使用 php,您可以使用此库将 xmla 结果转换为 Json http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/

【讨论】:

【参考方案2】:

这是我想你想做的一个例子:

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

【讨论】:

以上是关于如何从 Mondrian 输出生成 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Mondrian OlapConnection 获取 org.olap4j.metadata.Cube

如何从 Json 文件生成 Java 类? [复制]

如何从泽西岛资源生成 JSON?

如何从codeigniter中的模型生成json格式

如何从另一个主Json配置文件生成Json

如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?