Mondrian3.5.0 源码bug修改统计

为了满足公司应用的需求、最近一直在做Mondrian3.5.0 源码修改工作(公司就我一个人负责修改Mondrain)、因为之前没有接触过BI方面的知识,对于Mondrain的学习自我感觉进度还是比较慢的、从接触Mondrian到现在已有两个月的时间了、对于Mondrian仅仅只是有些了解、修改过部分源代码、现总结下碰到的问题:

 

1.  Mondrian3.5.0 源码代码的构建。

       网上有很多mondrian源码构建的方法,这个确实比较折腾人的地方,在svn下载下来的源代码中很多类缺失,部分jar包缺失,这些都是需要运行build.xml来构建的、没有什么好的方法、我也是折腾一天多的时间才搭建好。(如果有需要的可以回复邮箱给我,我可以发给你们)

 

2.   构建好的项目还是有很多报错。

      项目构建好了还是有很多报错的地方,现在都记不清楚是哪几个报错了,还有要看你用的JDK是哪个版本了,不同版本报的错可能也不同,所以需要自己排除下,比如UtilCompatibleJdk16类编译报错修改:LOGGER.isTraceEnabled()LOGGER.trace()修改为:LOGGER.isDebugEnabled()LOGGER.debug().

 FactoryJdbc3Impl报错,FactoryJdbc3Impl 对应jdbc3.0jdk1.5FactoryJdbc4Impl对应jdbc4.1(jdk1.6)我使用的是jdk1.6 所以我把 FactoryJdbc3Impl全部注释了。

      在中文开发环境下,启动的时候会报找不到MondrianResource_zh_CN.properties,需要在mondrian.resource下创建此文件和一个资源文件对应的MondrianResource_zh_CN.java类,此类参照mondrian.resource下其他多语言类的内容就行了。

 

3.  数据精度丢失问题 

       目前碰到两个数据精度丢失问题,查询结果超出int范围,结果转换成int丢失精度,double数据类型小数点后的精度丢失问题。Mondrain会根据查询的结果长度,小数位数等来猜测结果的数据类型,在SqlStatementList<Type> guessTypes()方法当中进行类型的判断,SegmentLoaderprocessData()取出结果做转换。

 

4.  虚拟Cube查询结果为空 

          针对父子维的查询,结果为空,可修改RolapCubefindBaseCubeLevel()方法。

     

5.父子维UniqueName排序错误

         对于父子维查询,就部门查询来说,如果上级部门的id小于下面的子部门,排序正确,如果子部门的id小于上级部门,排序就会错误。排序是在SqlTupleReaderinternalAddRow().

 

以上列出的仅仅是部分主要问题,目前都已经全部解决,还有些小bug就没有列出来了,目前还在持续优化当中,欢迎各位有bug 的给我留言,如果需要帮助的也可以给我留言,有问题大家一起学习,一起进步呢。

猜你喜欢

转载自jnwzping.iteye.com/blog/1874192