`
jnwzping
  • 浏览: 18033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mondrian SlicerAxis 引起的错误

阅读更多

    公司原来使用的 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] Mondrian 实战 英文版

    [Manning Publications] Mondrian 实战 英文版 [Manning Publications] Mondrian in Action E Book ☆ 出版信息:☆ [作者信息] William Back D Nicholas Goodman Julian Hyde [出版机构] Manning ...

    基于ORACLE的mondrian配置

    自已刚开始学mondrian,里面有两个文件,一个是mondrian自带的一个演示示例,是基于oracle实现的过程。还有一个是eclipse中配置mondrian源代码的过程。都是我自己总结的,原创。QQ:6855957

    mondrian foodmart SQL SERVER 数据库

    mondrian foodmart SQL SERVER 数据库

    Mondrian介绍及配置.pdf

    Mondrian 介绍 配置

    mondrian运行源码配置方法

    本资源包括mondrian源码运行的方法,以及说明文档 还有配置过程中需要的jar包,这个配置方法是可行的,本人已经用这个配置方法成功的运行了mondrian源码!

    mondrian报表技术概要

    mondrian报表技术概要,实例讲述开发过程中遇到的问题以及配置

    Mondrian In Action

    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...

    Manning.Mondrian_in_Action.2013.pdf

    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

    mondrian-3.5.0.jar 解决中文乱码问题

    Mondrian+Oracle 实例

    Mondrian+Oracle 实例,及异常分析,功能介绍,连接数据库的各种方式等

    Mondrian用于web项目

    Mondrian用于web项目 报表开发文档

    Mondrian 3.0 Technical Guide

    Mondrian 3.0 Technical Guide

    mondrian-api.zip

    mondrian 提供的schema4.0 官网api,这个资源也是找了很久才找到

    数据分析工具mondrian教程

    本教程包含mondrian部分中文文档 mondrian如何创建Cube,维度,度量及其他属性 mdx语法介绍

    mondrian3.5

    Mondrian是一个开放源代码的Rolap服务器,使用java开发的。它实现了xmla和jolap规范,而且自定义了一种使用mdx语言的客户端接口。Mondrian是olap服务器,而不是数据仓库服务器,因此Mondrian的元数据主要包括olap...

    联机分析olap之mondrian

    包含开发所需的mondrian-3.0.4.11371,编写xml的schema-workbench工具,sql文件,以及开发文档。

    mondrian源码分析和改造设计.doc

    mondrian源码分析和改造设计.doc,详细介绍mondrian源码框架,各个文件夹的作用等等!!

    mondrian4 schema设计说明文档

    mondrian4 schema设计说明文档,压缩包解压后打开index.html。4版本,官网链接 https://mondrian.pentaho.com/head/documentation/schema.php,无法访问,直接用该资源即可。附3版本地址: ...

    mondrian-3.11.jar

    mondrian-3.11.jar

    Mondrian应用于web项目

    OLAP Server Mondrian应用于web项目,文档指导大家顺利实现OLAP Server

Global site tag (gtag.js) - Google Analytics