Mdx 如何在Mondrian OLAP中使用钻取?

Mdx 如何在Mondrian OLAP中使用钻取?,mdx,olap,mondrian,Mdx,Olap,Mondrian,如何使用Mondrian的钻取查询?例如,此MDX查询 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(Mondr

如何使用Mondrian的
钻取
查询?例如,此MDX查询

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

我还尝试过在
单元格上调用
钻取
,但这会导致异常
org.postgresql.util.PSQLException:FATAL:抱歉,已经有太多的客户端
。也许我没有正确管理连接?请参阅我的另一个问题:.

钻取操作将返回一个结果集(实现常规JDBC API),因此您需要改用它:

olapConnection.createStatement().executeQuery(String mdx)

非常感谢。因此,通过使用JDBCAPI,我隐式地操作了较低级别的抽象。如果我的目的是向我的客户公开MDX,并支持向下钻取,那么推荐的方法是什么?我可以先解析MDX,然后检查AST以确定是使用OLAP还是JDBCAPI吗?因为钻取是一个保留关键字,所以可以安全地假设,如果它显示为unquoted/unscaped,那么查询就是钻取。