2013-05-24 2 views
1

Как использовать DRILLTHROUGH запросы с помощью Mondrian? Например, этот MDX запросаКак использовать DRILLTHROUGH с Mondrian OLAP?

DRILLTHROUGH 
SELECT 
    measures.MEMBERS ON 0 
FROM 
    events 

генерирует исключение:

java.lang.ClassCastException: mondrian.olap.DrillThrough cannot be cast to mondrian.olap.Query 
    at mondrian.olap4j.MondrianOlap4jStatement$1.execute(MondrianOlap4jStatement.java:362) 
    at mondrian.olap4j.MondrianOlap4jStatement$1.execute(MondrianOlap4jStatement.java:360) 
    at mondrian.server.Locus.execute(Locus.java:87) 
    at mondrian.server.Locus.execute(Locus.java:72) 
    at mondrian.olap4j.MondrianOlap4jStatement.parseQuery(MondrianOlap4jStatement.java:356) 
    at mondrian.olap4j.MondrianOlap4jStatement.executeOlapQuery(MondrianOlap4jStatement.java:346) 

В коде, я передаю строку MDX на заявление следующим образом:

OlapConnection connection = DriverManager.getConnection(connection_string).unwrap(OlapConnection.class); 
connection.createStatement.executeOlapQuery(mdx); 

Я также экспериментировал с вызовом drillThrough на Cell, но это приводит к исключению org.postgresql.util.PSQLException: FATAL: sorry, too many clients already. Возможно, я неправильно управляю соединениями? См. Мой другой вопрос: Mondrian OLAP connection management.

ответ

2

операции детализированный возвращает ResultSet (реализующий регулярные JDBC API), так что вы должны использовать вместо этого:

olapConnection.createStatement().executeQuery(String mdx) 
+0

Спасибо. Таким образом, используя JDBC API, я неявно выполняю более низкий уровень абстракции. Если я намерен предоставить MDX моему клиенту с поддержкой DRILLDOWN, какой рекомендуемый подход? Могу ли я сначала проанализировать MDX, а затем изучить AST, чтобы определить, следует ли использовать API OLAP или JDBC? –

+0

Ну, так как DRILLTHROUGH является зарезервированным ключевым словом, можно с уверенностью предположить, что если он выглядит некорректным/неэкранированным, тогда запрос является детализацией. – Luc

Смежные вопросы