如何在 Mondrian OLAP 中使用 DRILLTHROUGH?

Posted

技术标签:

【中文标题】如何在 Mondrian OLAP 中使用 DRILLTHROUGH?【英文标题】:How to use DRILLTHROUGH with Mondrian OLAP? 【发布时间】:2013-05-24 21:03:13 【问题描述】:

如何在 Mondrian 中使用 DRILLTHROUGH 查询?例如,这个 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);

我还尝试在Cell 上调用drillThrough,但这会导致异常org.postgresql.util.PSQLException: FATAL: sorry, too many clients already。也许我没有正确管理连接?请参阅我的另一个问题:Mondrian OLAP connection management。

【问题讨论】:

【参考方案1】:

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

olapConnection.createStatement().executeQuery(String mdx)

【讨论】:

谢谢。因此,通过使用 JDBC API,我隐式地操作了较低级别的抽象。如果我的意图是向我的客户公开 MDX 并支持 DRILLDOWN,那么推荐的方法是什么?我可以先解析 MDX,然后检查 AST 以确定是使用 OLAP 还是 JDBC API? 好吧,由于 DRILLTHROUGH 是保留关键字,因此可以安全地假设,如果它出现未引用/未转义,则查询是钻取。

以上是关于如何在 Mondrian OLAP 中使用 DRILLTHROUGH?的主要内容,如果未能解决你的问题,请参考以下文章

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

Mondrian OLAP 连接管理

OLAP了解与OLAP引擎——Mondrian入门

mondrian.olap.ResourceLimitExceededException:蒙德里安错误:要读取的成员数超出限制(10,000)

向 OLAP 多维数据集 Mondrian 模式添加百分比

我们可以将字符串值显示为 mondrian olap 上的度量吗