Как использовать 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.
Спасибо. Таким образом, используя JDBC API, я неявно выполняю более низкий уровень абстракции. Если я намерен предоставить MDX моему клиенту с поддержкой DRILLDOWN, какой рекомендуемый подход? Могу ли я сначала проанализировать MDX, а затем изучить AST, чтобы определить, следует ли использовать API OLAP или JDBC? –
Ну, так как DRILLTHROUGH является зарезервированным ключевым словом, можно с уверенностью предположить, что если он выглядит некорректным/неэкранированным, тогда запрос является детализацией. – Luc