1

モンドリアン初心者です。プロジェクトで OLAP 操作に使用しています。Foodmart データベースでテストしています。問題は、OLAP 操作の結果を JSON 形式にする必要があることです。mondrian が JSON と同じ構造を階層という形で持っていることは知っています。mondrian MDX クエリの結果からの出力として JSON ファイルを生成したいと考えています。結果は 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ファイルに変換する方法を提案してください。私はこの目的のためにペンタホ モンドリアンを使用しています。ありがとう。

4

2 に答える 2

1

PHP を使用している場合は、このライブラリを使用して xmla の結果を Json http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/に変換できます。

于 2012-08-20T20:38:39.177 に答える
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();
于 2015-04-09T15:52:43.797 に答える