6

我想实现一个为 MDX 查询提供支持的应用程序。为此,我想使用pentaho mondrian(具有 MDX 接口的开源 OLTP 服务器)中的一个库,它将 MDX 查询转换为下划线数据库的 SQL(基于 xml 描述),不幸的是我找不到任何信息我需要在我的项目中包含的库——以及如何使用它们——才能使 MDX 到 SQL 映射工作。

有没有人在她/他的应用程序中重用蒙德里安组件方面有一些经验?

4

4 回答 4

1

Olap4j 现在是 pentaho mondrian 的一部分。也许您可以在 olap4j API 中找到信息?http://www.olap4j.org/

在此页面上,我看到:

org.olap4j.mdx.parser:MDX 查询语言的解析器。

olap4j 是用于 OLAP 的开放 Java API。

可以将其想象为 JDBC,但用于访问多维数据。

olap4j 旨在成为任何 OLAP 服务器的通用 API,因此您可以在一个 OLAP 服务器上编写应用程序并轻松地将其切换到另一个服务器。在该 API 的基础上,将会有越来越多的工具和组件。

于 2010-09-27T16:15:05.213 回答
1

我建议下载 Mondrian 的最新 3.2.0 版本,它与所有依赖项一起分发。发行版中还包括一个 ivy 文件,它描述了它的依赖关系。

最新版本: http://forums.pentaho.com/showthread.php?77035-Mondrian-3.2-GA-Schema-Workbench-and-Agg-Designer-stable-available-on-SourceForge& p=239443#poststop

文档也可以在 Pentaho 的网站上找到。祝你好运!

于 2010-09-24T03:49:42.737 回答
0

我正在使用由 hsqldb 支持的 Mondrian,以便开发人员针对内存中的 dbs 工作,但是当我们部署到真实环境时切换到非 Mondrian OLAP 实现。意味着我们可以做一些更灵活的开发,本质上只是使用 Mondrian 将 MDX 转换为 sql。

我创建了一个 SpringBoot/mvn 测试用例并使用页面开始 - 复制 ROLAP ddl 和 Mondrian 映射模式。我使用了此处评论之一中的 MondrianDaoSupport 模板。同一页面还对所需的 mvn 依赖项有一些帮助(注意:我必须将 jflex 1.4.1 与 mondrian 3.2.0 一起使用才能解决 NPE 问题)。将 SpringBoot 与 hsqldb 一起使用,我使用测试启动时的数据创建了 ROLAP 模式。然后我将模式文件作为类路径资源注入,然后 Datasource 是自动连接的 hsqldb 数据源。到目前为止它运行良好 - 只需 ~ 秒即可运行 Junit 测试,该测试使用数据引导一个新的数据库并执行 MDX 查询。我预计在尝试使用更复杂的 MDX 查询时会出现一些问题——但让我们看看。

于 2017-09-26T10:40:23.943 回答
0

看起来 mondrian.rolap.agg.AggregationManager 有一些与之相关的代码,但它不是直截了当的。

parseTree = this.olap4jConnection.getMondrianConnection().parseStatement(mdx);
DrillThrough plan1 = (DrillThrough)parseTree;
Query query = plan1.getQuery();
query.setResultStyle(ResultStyle.LIST);
this.setQuery(query);
CellSet cellSet = this.executeOlapQueryInternal(
    query, 
    (MondrianOlap4jCellSetMetaData) null
);
List coords = Collections.nCopies(cellSet.getAxes().size(), Integer.valueOf(0));
MondrianOlap4jCell cell = (MondrianOlap4jCell) cellSet.getCell(coords);
ResultSet resultSet = cell.drillThroughInternal(
    plan1.getMaxRowCount(), 
    plan1.getFirstRowOrdinal(), 
    plan1.getReturnList(), 
    true, 
    (Logger)null, 
    rowCountSlot
);

如果按照最后一行,

cell.drillThroughInternal(...)

你最终会在这里

String sql = this.getDrillThroughSQL(fields, extendedContext);

但我不太确定 mondrian 是否只为 mdx 生成一个 SQL。我认为通过 XMLA(大多数工具用作接口),您可以请求在单个轴上进行钻取,其中不会重写完整的查询。

希望这个答案。

于 2016-03-26T07:42:09.780 回答