公司原来使用的 OLAP 服务器为 SSIS (MicrosoftSQLServer2008IntegrationServices),因为部分原因,现需要使用 java 版 Mondrian 开源 OLAP作为服务器, 在展示层不变的情况下,Mondrian 和 SSIS在查询返回结果集的时候生成的XML结构不同,而无法解析展示出来。分析如下:
Mondrian 默认会在生成结果集的XML文件里添加 SlicerAxis,当查询语句里不带切片维的时候会多生成会在结果集xml中添加<Axis name="SlicerAxis"></Axis>和<AxisInfo name="SlicerAxis"><AxisInfo>标签,这样会引起原先SSIS展示层解析错误,其实也就是 Mondrian 和SSIS查询结果集的结构不同造成的,在这里需要对结果集做些过滤
改造代码如下:
修改 XmlaHandler 类 axisInfo(SaxWriter writer,CellSetAxis axis,String axisName):
private List<Hierarchy> axisInfo( SaxWriter writer, CellSetAxis axis, String axisName) { // writer.startElement( // "AxisInfo", // "name", axisName); List<Hierarchy> hierarchies; Iterator<org.olap4j.Position> it = axis.getPositions().iterator(); if (it.hasNext()) { final org.olap4j.Position position = it.next(); hierarchies = new ArrayList<Hierarchy>(); for (Member member : position.getMembers()) { hierarchies.add(member.getHierarchy()); } } else { hierarchies = axis.getAxisMetaData().getHierarchies(); } List<Property> props = getProps(axis.getAxisMetaData()); if(hierarchies!=null&&hierarchies.size()!=0){ writer.startElement( "AxisInfo", "name", axisName); writeHierarchyInfo(writer, hierarchies, props); writer.endElement(); // AxisInfo } return hierarchies; }
修改 XmlaHandler 类 axis(SaxWriter writer,CellSetAxis axis,List<Property> props,String axisName):
private void axis( SaxWriter writer, CellSetAxis axis, List<Property> props, String axisName) throws OlapException { if(axisName.equals("SlicerAxis")){ List<Position> positions = axis.getPositions(); Iterator<Position> pit = positions.iterator(); Position prevPosition = null; Position position = pit.hasNext() ? pit.next() : null; Position nextPosition = pit.hasNext() ? pit.next() : null; while (position != null) { int k = 0; for (Member member : position.getMembers()) { writer.startElement( "Axis", "name", axisName); writer.startSequence("Tuples", "Tuple"); writer.startSequence("Tuple", "Member"); writeMember( writer, member, prevPosition, nextPosition, k++, props); writer.endSequence(); // Tuple writer.endSequence(); // Tuples writer.endElement(); // Axis } prevPosition = position; position = nextPosition; nextPosition = pit.hasNext() ? pit.next() : null; } }else{ writer.startElement( "Axis", "name", axisName); writer.startSequence("Tuples", "Tuple"); List<Position> positions = axis.getPositions(); Iterator<Position> pit = positions.iterator(); Position prevPosition = null; Position position = pit.hasNext() ? pit.next() : null; Position nextPosition = pit.hasNext() ? pit.next() : null; while (position != null) { writer.startSequence("Tuple", "Member"); int k = 0; for (Member member : position.getMembers()) { writeMember( writer, member, prevPosition, nextPosition, k++, props); } writer.endSequence(); // Tuple prevPosition = position; position = nextPosition; nextPosition = pit.hasNext() ? pit.next() : null; } writer.endSequence(); // Tuples writer.endElement(); // Axis } }
相关推荐
请确保按照文档中的指导逐步操作,遇到问题时查阅相关资料或社区讨论,以解决可能出现的错误和异常。 总的来说, mondrian源码运行配置是一个涉及Java开发环境搭建、数据库连接、XML配置以及日志调试等多个环节的...
异常分析的关键在于理解错误信息,定位问题根源,并根据Mondrian和Oracle的文档进行调试和修复。 7. **项目代码分析** 提供的压缩包中包含的"mondrian-oracle实例项目代码"可能包含了Mondrian的配置文件、Java代码...
《联机分析OLAP之Mondrian:深入解析与应用》 OLAP(Online Analytical Processing),即在线分析处理,是数据库技术中的一个重要概念,它主要用于支持决策者的数据分析需求。在OLAP系统中,Mondrian是一个开源的...
[Manning Publications] Mondrian 实战 英文版 [Manning Publications] Mondrian in Action E Book ☆ 出版信息:☆ [作者信息] William Back D Nicholas Goodman Julian Hyde [出版机构] Manning ...
mondrian是一个开源的在线分析处理(OLAP)服务器,它主要用Java编写,适用于构建数据仓库和商业智能应用。在本资源"mondrian-api.zip"中,包含的是mondrian 4.0版本的API,这对于开发者来说是一个宝贵的参考资料,...
mondrian是开源的在线分析处理(OLAP)引擎,它主要被用来构建数据仓库和商业智能系统的报表功能。在Web项目中,Mondrian通常与Pentaho Data Integration(Kettle)、Pentaho BI Server等工具结合使用,提供强大的...
Mondrian 源码分析和改造设计 Mondrian 源码分析和改造设计是 OLAP(Online Analytical Processing,联机分析处理)服务器的源码分析和改造设计。Mondrian 是一个基于 Java 的开源 OLAP 服务器,提供了多维数据分析...
mondrian和XMLA是两种在数据仓库和商业智能领域中重要的技术。mondrian是一个开源的OLAP(在线分析处理)引擎,它允许用户通过多维数据集进行快速查询和分析。XMLA(XML for Analysis)则是一种标准的通信协议,用于...
**Mondrian实例详解** Mondrian是一款开源的在线分析处理(OLAP)引擎,它主要用Java编写,被广泛应用于数据分析和商业智能系统中。本实例将带你深入理解如何利用Mondrian来执行多维数据表达式(MDX)查询,针对已...
自已刚开始学mondrian,里面有两个文件,一个是mondrian自带的一个演示示例,是基于oracle实现的过程。还有一个是eclipse中配置mondrian源代码的过程。都是我自己总结的,原创。QQ:6855957
### Mondrian介绍及配置知识点详解 #### 一、Mondrian概述 **Mondrian** 是一款用 Java 编写的开源 OLAP (Online Analytical Processing) 引擎,支持 MDX (Multidimensional Expressions) 查询语言。它可以将来自...
mondrian是一款开源的数据分析工具,常用于构建在线分析处理(OLAP)系统,尤其是在Web环境中。本教程将深入探讨mondrian的使用,包括如何创建Cube、维度、度量以及相关属性,同时也涵盖了MDX(多维表达式)的语法...
mondrian 是一个开源的在线分析处理(OLAP)引擎,用于商业智能和数据仓库系统。它的源码提供了深入了解OLAP工作原理以及如何构建和定制OLAP解决方案的机会。在这个压缩包中,我们主要关注mondrian的引擎部分,以及...
mondrian-war-maven-project.zip mondrian是一款开源的多维分析引擎,主要用于在线分析处理(OLAP)和数据仓库应用。它提供了SQL接口,可以连接到各种关系数据库,支持复杂的数据查询和分析操作。在本项目中,我们...
【Mondrian是什么】 Mondrian是一个开源的Java实现的在线分析处理(OLAP)引擎。它使用多维表达式(MDX)语言来查询数据,这些数据来源于关系数据库管理系统(RDBMS)。Mondrian的设计允许开发者将其轻松地集成到...
Mondrian OLAP引擎是开源商业智能分析的一个重要工具,它支持多维数据分析和商业智能应用。OLAP(Online Analytical Processing,联机分析处理)是一种技术,允许用户对业务数据进行复杂的查询和分析,这些数据可以...
mondrian是一个开源的OLAP(在线分析处理)引擎,主要用于构建数据仓库和商业智能应用。这篇文档深入探讨了mondrian的源代码,旨在帮助开发者理解其内部工作原理和架构。 1. 概述 mondrian源码分析主要分为两个部分...
mondrian 模式深入理解 mondrian 模式是 OLAP(在线分析处理)系统的核心组件,主要用于构建和管理多维数据库。它允许用户通过 MDX(多维表达式)查询语言进行复杂的数据分析和报告。mondrian 模式文件是描述这种...