mondrian异常总结2

水会流失,火会熄灭,而恋情却能和命运对抗 因为要做多维报表的显现,须要应用OLAP的引擎Mondrian,于是比来一向在进修MDX查询说话,在做Demo时碰到了很多bug,我认为这些异常对于初学MDX查询说话的伴侣来说很常见,一般都邑碰到这些bug,这里我将本身碰到的bug收集起来,同时将其解决办法一并记录下来,欲望碰到同样题目的伴侣可以参考一下,欲望可以节俭一些你调试此类bug的时候。

It is OK to faid(失败是可以的)?

?

异常: 1

? [JPivot] 15 七月 2010 10:10:36,312 ERROR [Session FC17340B57820BEB01CC6F6D86DAE1E6] com.tonbeller.jpivot.tags.OlapModelTag#doEndTag:

com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:All arguments to function ""{}"" must have same hierarchy.

?

解决规划:

题目是凑集( Set )中的成员不在同一个层次里,比如写成

{[Measures].[ 总发卖额 ],[Measures].[ 供献度 ]} ON columns,

? {[ 产品类别 ].[ 所有产品 ],[ 客户性别 ].[ 所有性别 ]} ON rows

[Sales]

?

? ??? ? 因为“产品类别”和“客户性别”是两个不合的维度 ,而 MDX 的根蒂根基特点 3 —凑集( Set ),它的特点是凑集里可以含有若干个 Member ,然则必须是同一维度上的 Member, 如 {[Time].[1996],[Time].[1997]} ;

也可所以 Cube 上的若干个 Tuple 的凑集,同样要重视的是,这些 Tuple 凑集的子集之间存在严格的维度对称关系,如 {([Computers].[China]),([Air_Conditioner].[Jpan])}.

?

?

小常识点申明:

?

[发卖季度].[所有季度] [发卖季度].children的差别:

如下面的例子:

?

?

?

{[ 发卖季度 ].[ 所有季度 ]} ON columns,

?

? {[ 产品类别 ].CHILDREN} ON rows

???? [Sales]

?

{[ 发卖季度 ]. CHILDREN } ON columns,

? {[ 产品类别 ].CHILDREN} ON rows

???? [Sales]

?

的差别是:

?

起首,前者是一个 Member ,后者是一个凑集( Set ),是以在应用时,希罕是放在一个 Set 中应用时要希罕重视,不然会报我上方所说的异常 1 。

其次,两者显示出来的结果图也是不一样的,在页面上,前者点击“所有季度”后才会显现所有季度;而后者是直接将“第一季度,第二季度,第三季度,第四时度”依次显示在页面客户面前,不克不及按层次紧缩。

?

?

?

?

?

?

异常: 2

mondrian.olap.MondrianException : Mondrian Error:Named set in cube ""Sales"" has bad formula

Caused by: mondrian.olap.MondrianException : Mondrian Error:Error while parsing MDX statement ""WITH

MEMBER [Measures].[ 均匀单价 ]

? AS ""[Measures].[ 总发卖额 ] / [Measures].[ 数量 ]"",

FORMAT_STRING = " ¥ #,##0.00",

[¥member_scope] = ""CUBE"",

MEMBER_ORDINAL = 2

MEMBER [Measures].[ 供献度 ]

? AS ""([Measures].[ 总发卖额 ],[ 所有类别 ].CURRENTMEMBER) / ([Measures].[ 总发卖额 ],[ 所有类别 ].[ 所有产品 ])"",

FORMAT_STRING = "#%",

[¥member_scope] = ""CUBE"",

MEMBER_ORDINAL = 3

SELECT FROM [Sales]""

??? at mondrian.resource.MondrianResource¥_Def0.ex( MondrianResource.java:785 )

??? at mondrian.olap.Parser.parseInternal( Parser.java:759 )

??? at mondrian.olap.ConnectionBase.parseQuery( ConnectionBase.java:74 )

??? ... 59 more

Caused by: mondrian.olap.MondrianException : Mondrian Error:MDX object ""[ 所有类别 ]"" not found in cube ""Sales""

?

?

解决办法:

这个题目报错是因为解析 MDX 查询语句时发明题目解析不了。

一般碰到这个错就是 MDX 查询语句中的维度和 schema 文件 tezz.xml 里定义的拼写的不一致,或者就是单词拼写错误,我的错误是就是在 schema 文件里定义 calculator 时名称写的不一致。

?

?

?

异常: 3

Caused by: mondrian.olap.MondrianException : Mondrian Error:Error while parsing MDX statement ""

?

{[Measures].[ 数量 ]} ON columns,

????????? {([ 产品类别 ].[ 所有产品 ]),([ 发卖季度 ].[ 第一季度 ])} ON rows

?????? [Sales]

""

??? at mondrian.resource.MondrianResource¥_Def0.ex( MondrianResource.java:785 )

??? at mondrian.olap.Parser.parseInternal( Parser.java:759 )

??? at mondrian.olap.ConnectionBase.parseQuery( ConnectionBase.java:74 )

??? ... 47 more

Caused by: mondrian.olap.MondrianException : Mondrian Error:Internal error: while building member cache; sql=[ "Quarter"."quarterId" as "c0", "Quarter"."quarterName" as "c1" "Month" as "Month", "Quarter" as "Quarter" where "Month"."quarterId" = "Quarter"."quarterId" and UPPER("Quarter"."quarterName") = UPPER("" 第一季度 "") group by "Quarter"."quarterId", "Quarter"."quarterName" order by "Quarter"."quarterId" ASC]

?

?

解决办法:

???? 从异常信息可以看出解析 MDX 语句时产生错误,这个错是因为我表与表之间的关系在 schema 文件 tezz.xml 中定义的不合错误,以至于解析出的 sql 里呈现了字段错位到此外表里去了。将各表间关系定义正确了就可以了。

?

?

?

?

异常: 4

[JPivot] 19 七月 2010 15:19:29,656 ERROR [Session ] com.tonbeller.jpivot.tags.OlapModelTag#doEndTag:

com.tonbeller.wcf.controller.EmptyThreadLocalStackException

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: com.tonbeller.wcf.controller.EmptyThreadLocalStackException

??? org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)

??? org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)

??? org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

??? org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

??? javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

?

?

页面报的异常为:

org.apache.jasper.JasperException: An exception occurred processing JSP page/test/param1.jsp at line 23:

?20:

?21:Click on a Region.

?22:<p>

?23:<wcf:include id="include01" httpParam="query" prefix="/WEB-INF/queries/" suffix=".jsp"/>

?24: ?

? 25:< action="param1.jsp" method="post" id="form01">

? 26:

?

?

 

解决规划:

???? 这个异常延迟了我和同事半天的时候,从把握台和页面信息都找不失足误原因,上彀查材料,是有这个异常,我是中英文的网页材料申明都看了,就是没看到解决办法。最后,还是同事的别的一个异常给了我提示,于是我去 web.xml 文件中查看,果真是里面设备呈现了题目。

???? 将 web.xml 中的 filter 的 url--pattern 值由 “ testpage.jsp ” 改为 “ *.jsp ” 即可!

?

我之前的 web.xml 里 filter 的设备如下:

< filter >

??? < filter-name > JPivotController </ filter-name >

??? < filter-class > com.tonbeller.wcf.controller.RequestFilter </ filter-class ></ filter >

? < filter-mapping >

??? < filter-name > JPivotController </ filter-name >

??? < url-pattern > testpage.jsp </ url-pattern >

? </ filter-mapping >

?

?

?

?

异常: 5

[JPivot] 20 七月 2010 13:59:00,218 ERROR [Session E2F53D86EE225E320A412091BF8E28D9] com.tonbeller.wcf.controller.RequestFilter#doFilter: Error handling request

com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:No function matches signature "" Parameter(<String>, <Dimension>) ""

??? at com.tonbeller.jpivot.mondrian.MondrianModel.initialize( MondrianModel.java:550 )

?

解决规划: Parameter 办法有错,其参数如同不克不及为2个,我改成了3个异常就解决了,bug虽解决了了,但对Parameter的应用及里面的各个参数的感化和意义都不清楚,网上也没找到材料,如果哪位伴侣知道的话请不吝赐教一下:

?

将下面代码中的查询:

< jp:mondrianQuery id = "paramquery01" catalogUri = "/WEB-INF/queries/tezz.xml"

??? jdbcDriver = "net.sourceforge.jtds.jdbc.Driver"

??? jdbcUrl = "jdbc:jtds:sqlserver://localhost:1433/Tezz" jdbcUser = "sa"

jdbcPassword = "123" >

 

? {[Measures].[ 数量 ],[Measures].[ 均匀单价 ],[Measures].[ 总发卖额 ]} ON columns,

? {Parameter("ProductMember", [ 产品类别 ])} ON rows

[Sales]

</ jp:mondrianQuery >

?

改为:

 

? {[Measures].[ 数量 ],[Measures].[ 均匀单价 ],[Measures].[ 总发卖额 ]} ON columns,

? {Parameter("ProductMember", [ 产品类别 ],[ 产品类别 ].[ 数码 ])} ON rows

[Sales]

?

?

?

?

?

异常: 6

?

[JPivot] 20 七月 2010 14:05:45,781 ERROR [Session D24F8131994DE11BA5856AC44236BD90] com.tonbeller.wcf.controller.RequestFilter#doFilter: Error handling request

com.tonbeller.jpivot.olap.navi.ExpressionParser¥InvalidSyntaxException : [????].[????].[??].[???]

??? at com.tonbeller.jpivot.mondrian.MondrianExpressionParser.parse( MondrianExpressionParser.java:121 )

??? at com.tonbeller.jpivot.param.SetParameterTag.setQueryParam( SetParameterTag.java:93 )

?

解决规划:异常原因是中文乱码,建议 1: 改成英文的,建议 2: 加个过滤器,我临时应用的是办法 1 ,办法 2 加过滤器没成功,在 web.xml 中加上如下代码:

<filter>

? ? <filter-name>Set Character Encoding</filter-name>

? ? <filter-class>com.tonbeller.wcf.charset.CharsetFilter</filter-class>

? ? <init-param>

? ????? <param-name>encoding</param-name>

? ????? <param-value>UTF-8</param-value>

? ? </init-param>

? </filter>

?

? <filter-mapping>

? ? <filter-name>Set Character Encoding</filter-name>

? ? <url-pattern>/*</url-pattern>?

? </filter-mapping>

?

??????也许还要进行其他设置,今朝我还没找到解决的办法。

若是哪位伴侣知道解决的办法欲望告诉!同时,因为mdx刚学不久,对于上方总结的不合错误的处所欲望可以指出来!

?转自:http://ruinxdgzy.iteye.com/blog/718285

posted @ 2012-12-05 20:28  wellkingsen  阅读(698)  评论(0)    收藏  举报