设为首页 加入收藏

TOP

mondrian使用测试(四)
2015-11-21 01:52:35 来源: 作者: 【 】 浏览:5
Tags:mondrian 使用 测试
estMDX.java:18) at mondrianTest.TestMDX.main(TestMDX.java:37) Caused by: mondrian.olap.MondrianException: Mondrian Error:Error while parsing MDX statement 'select {[Measures].[业务量]} on columns from MsgBusi' at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:755) at mondrian.olap.Parser.parseInternal(Parser.java:760) at mondrian.olap.ConnectionBase.parseQuery(ConnectionBase.java:74) ... 3 more Caused by: mondrian.olap.MondrianException: Mondrian Error:MDX cube 'MsgBusi' not found or not processed at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:752) at mondrian.rolap.RolapSchema.lookupCube(RolapSchema.java:1067) at mondrian.olap.Query.(Query.java:187) at mondrian.olap.Parser.makeQuery(Parser.java:851) at mondrian.olap.CUP$Parser$actions.CUP$Parser$do_action(Parser.java:1700) at mondrian.olap.Parser.do_action(Parser.java:685) at java_cup.runtime.lr_parser.parse(lr_parser.java:569) at mondrian.olap.Parser.parseInternal(Parser.java:755) ... 4 more
这个是查询MDX中出现的错误了,这说明前面的连接mysql,解析xml文件的操作都执行成功了,根据错误提示发现MsgBusi不存在,查看xml文件发现这个MsgBusi的确不存在,这才想起来,原来down下来的代码和我用的逻辑模型的定义不是同一个,我这里用的是mondrian提供的一个示例foodmart,所以我应该用我这里的逻辑模型定义的立方体和维度等进行查询。所以需要修改一下MDX语句,经过多次测试之后发现这样的语句能够在当前的配置中跑出结果:SELECT { [Measures].[Unit Sales] } on columns,{ [Time].[Year].[1997] } on rows FROM Sales WHERE ([Customers].[State Province].[CA]),跑出的结果如下:
Axis #0:
{[Customers].[USA].[CA]}
Axis #1:
{[Measures].[Unit Sales]}
Axis #2:
{[Time].[1997]}
Row #0: 74,748

但是我发现mondrian的版本很多,当前最新的版本已经是4.0版本的了,而能够刚才使用的版本还是2.x版本的,然后发现在较新的版本中都在使用olap4j这样的接口进行访问,这个接口类似于jdbc访问数据库引擎,是一个java的接口规范,用于访问ROLAP引擎,使用mdx语句,于是就换成当前最新的稳定版本3.9进行测试,换了之后发现出错了:
Exception in thread "main" java.lang.NoSuchMethodError: mondrian.resource.MondrianResource.getThreadOrDefaultLocale()Ljava/util/Locale;
at mondrian.resource.MondrianResource.instance(MondrianResource.java:29)
at mondrian.rolap.aggmatcher.AggTableManager.(AggTableManager.java:54)
at mondrian.rolap.RolapSchema.(RolapSchema.java:194)
at mondrian.rolap.RolapSchema.(RolapSchema.java:216)
at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:214)
at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:66)
at mondrian.rolap.RolapConnection.(RolapConnection.java:160)
at mondrian.rolap.RolapConnection.(RolapConnection.java:90)
at mondrian.olap.DriverManager.getConnection(DriverManager.java:112)
at mondrian.olap.DriverManager.getConnection(DriverManager.java:68)
at mondrian.olap.DriverManager.getConnection(DriverManager.java:50)
at mondrianTest.TestMDX.testQuery(TestMDX.java:13)
at mondrianTest.TestMDX.main(TestMDX.java:38)

妈的,找不到这个函数,真是奇怪了,这个包也存在,包里面也有这个类,为什么偏偏就没有这个函数呢?!这就是java比较烦人的地方,在C/C++里面编译期间必须能够找到所有的函数定义,虽然有些函数的实现没有找到,在装载的时候也会首先进行动态链接,而不会在执行的时候再进行,但是JAVA这种只有在使用的时候再进行load的方式就很可能出现这种动态的错误,例如找不到class、找不到method等等,这个问题查了半天也没有能够找出错误,最后是在没有办法了采取最后的方法:查看源码。幸亏有grepCode这样的网站,真的是让查看java源代码方便了不知道多少个数量级,俗话说:源码在手,了无秘密。有了源码,什么问题都不在是问题了,在grepcode中查找mondrian.resource.MondrianResource这个类,发现在mondrian中只有3.6.7之前的版本才有,所以又不得不切换回3.6.x版本,这里我用的是3.6.1版本,换了jar包之后发现这个错误还是存在,好吧,看下代码吧。 在代码中,的确是Mon
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇AWR元数据的迁移或导入到其他数据.. 下一篇eclipse快捷键

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: