公司原来使用的 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 } }
相关推荐
[Manning Publications] Mondrian 实战 英文版 [Manning Publications] Mondrian in Action E Book ☆ 出版信息:☆ [作者信息] William Back D Nicholas Goodman Julian Hyde [出版机构] Manning ...
自已刚开始学mondrian,里面有两个文件,一个是mondrian自带的一个演示示例,是基于oracle实现的过程。还有一个是eclipse中配置mondrian源代码的过程。都是我自己总结的,原创。QQ:6855957
mondrian foodmart SQL SERVER 数据库
Mondrian 介绍 配置
本资源包括mondrian源码运行的方法,以及说明文档 还有配置过程中需要的jar包,这个配置方法是可行的,本人已经用这个配置方法成功的运行了mondrian源码!
mondrian报表技术概要,实例讲述开发过程中遇到的问题以及配置
This book is about Mondrian 4.0 and related technologies. It’s organized into chap- ters based on functionality. Chapters are designed to be standalone in most cases, but it’s easier, especially for...
Mondrian lets users drive analysis 8 ■ Mondrian is a low-cost, low-risk solution 11 ■ Mondrian is fast 13 ■ Mondrian is secure 14 ■ Mondrian is based on open standards 14 1.4 Summary 15 2 Mondrian...
mondrian-3.5.0.jar 解决中文乱码问题
Mondrian+Oracle 实例,及异常分析,功能介绍,连接数据库的各种方式等
Mondrian用于web项目 报表开发文档
Mondrian 3.0 Technical Guide
mondrian 提供的schema4.0 官网api,这个资源也是找了很久才找到
本教程包含mondrian部分中文文档 mondrian如何创建Cube,维度,度量及其他属性 mdx语法介绍
Mondrian是一个开放源代码的Rolap服务器,使用java开发的。它实现了xmla和jolap规范,而且自定义了一种使用mdx语言的客户端接口。Mondrian是olap服务器,而不是数据仓库服务器,因此Mondrian的元数据主要包括olap...
包含开发所需的mondrian-3.0.4.11371,编写xml的schema-workbench工具,sql文件,以及开发文档。
mondrian源码分析和改造设计.doc,详细介绍mondrian源码框架,各个文件夹的作用等等!!
mondrian4 schema设计说明文档,压缩包解压后打开index.html。4版本,官网链接 https://mondrian.pentaho.com/head/documentation/schema.php,无法访问,直接用该资源即可。附3版本地址: ...
mondrian-3.11.jar
OLAP Server Mondrian应用于web项目,文档指导大家顺利实现OLAP Server