`
jnwzping
  • 浏览: 18455 次
  • 性别: 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源码运行配置是一个涉及Java开发环境搭建、数据库连接、XML配置以及日志调试等多个环节的...

    Mondrian+Oracle 实例

    异常分析的关键在于理解错误信息,定位问题根源,并根据Mondrian和Oracle的文档进行调试和修复。 7. **项目代码分析** 提供的压缩包中包含的"mondrian-oracle实例项目代码"可能包含了Mondrian的配置文件、Java代码...

    联机分析olap之mondrian

    《联机分析OLAP之Mondrian:深入解析与应用》 OLAP(Online Analytical Processing),即在线分析处理,是数据库技术中的一个重要概念,它主要用于支持决策者的数据分析需求。在OLAP系统中,Mondrian是一个开源的...

    [Mondrian] Mondrian 实战 英文版

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

    mondrian-api.zip

    mondrian是一个开源的在线分析处理(OLAP)服务器,它主要用Java编写,适用于构建数据仓库和商业智能应用。在本资源"mondrian-api.zip"中,包含的是mondrian 4.0版本的API,这对于开发者来说是一个宝贵的参考资料,...

    Mondrian用于web项目

    mondrian是开源的在线分析处理(OLAP)引擎,它主要被用来构建数据仓库和商业智能系统的报表功能。在Web项目中,Mondrian通常与Pentaho Data Integration(Kettle)、Pentaho BI Server等工具结合使用,提供强大的...

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

    Mondrian 源码分析和改造设计 Mondrian 源码分析和改造设计是 OLAP(Online Analytical Processing,联机分析处理)服务器的源码分析和改造设计。Mondrian 是一个基于 Java 的开源 OLAP 服务器,提供了多维数据分析...

    mondrian xmla配置需要的jar

    mondrian和XMLA是两种在数据仓库和商业智能领域中重要的技术。mondrian是一个开源的OLAP(在线分析处理)引擎,它允许用户通过多维数据集进行快速查询和分析。XMLA(XML for Analysis)则是一种标准的通信协议,用于...

    Mondrian实例

    **Mondrian实例详解** Mondrian是一款开源的在线分析处理(OLAP)引擎,它主要用Java编写,被广泛应用于数据分析和商业智能系统中。本实例将带你深入理解如何利用Mondrian来执行多维数据表达式(MDX)查询,针对已...

    基于ORACLE的mondrian配置

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

    Mondrian介绍及配置.pdf

    ### Mondrian介绍及配置知识点详解 #### 一、Mondrian概述 **Mondrian** 是一款用 Java 编写的开源 OLAP (Online Analytical Processing) 引擎,支持 MDX (Multidimensional Expressions) 查询语言。它可以将来自...

    数据分析工具mondrian教程

    mondrian是一款开源的数据分析工具,常用于构建在线分析处理(OLAP)系统,尤其是在Web环境中。本教程将深入探讨mondrian的使用,包括如何创建Cube、维度、度量以及相关属性,同时也涵盖了MDX(多维表达式)的语法...

    mondrian 源码

    mondrian 是一个开源的在线分析处理(OLAP)引擎,用于商业智能和数据仓库系统。它的源码提供了深入了解OLAP工作原理以及如何构建和定制OLAP解决方案的机会。在这个压缩包中,我们主要关注mondrian的引擎部分,以及...

    mondrian war项目maven编译

    mondrian-war-maven-project.zip mondrian是一款开源的多维分析引擎,主要用于在线分析处理(OLAP)和数据仓库应用。它提供了SQL接口,可以连接到各种关系数据库,支持复杂的数据查询和分析操作。在本项目中,我们...

    如何将Mondrian用于web项目.ppt

    【Mondrian是什么】 Mondrian是一个开源的Java实现的在线分析处理(OLAP)引擎。它使用多维表达式(MDX)语言来查询数据,这些数据来源于关系数据库管理系统(RDBMS)。Mondrian的设计允许开发者将其轻松地集成到...

    Mondrian in Action (Mondrian OLAP 引擎技术)

    Mondrian OLAP引擎是开源商业智能分析的一个重要工具,它支持多维数据分析和商业智能应用。OLAP(Online Analytical Processing,联机分析处理)是一种技术,允许用户对业务数据进行复杂的查询和分析,这些数据可以...

    mondrian源码分析与说明.pdf

    mondrian是一个开源的OLAP(在线分析处理)引擎,主要用于构建数据仓库和商业智能应用。这篇文档深入探讨了mondrian的源代码,旨在帮助开发者理解其内部工作原理和架构。 1. 概述 mondrian源码分析主要分为两个部分...

    mondrian的基本模式

    mondrian 模式深入理解 mondrian 模式是 OLAP(在线分析处理)系统的核心组件,主要用于构建和管理多维数据库。它允许用户通过 MDX(多维表达式)查询语言进行复杂的数据分析和报告。mondrian 模式文件是描述这种...

Global site tag (gtag.js) - Google Analytics