异常: 8
[JPivot] 21 七月 2010 23:26:31,109 ERROR [Session 3DA5B31A164F01E50C42D796D221BC2F] com.tonbeller.jpivot.tags.OlapModelTag#doEndTag:
mondrian.olap.MondrianException : Mondrian Error:Named set in cube 'Sales' has bad formula
.
Caused by: mondrian.olap.MondrianException : Mondrian Error:No function matches signature '<Level>.prevMember'
解决方法:这个异常可以参看异常15。
%***************************************************************************
33031 [http-8088-2] ERROR com.tonbeller.wcf.controller.RequestFilter - Error handling request
javax.servlet.ServletException : javax.servlet.jsp.JspException :com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:Syntax error at line 1, column 59, token 'EOF'
Caused by: mondrian.olap.MondrianException : Mondrian Error:Syntax error in MDX expression 'IsAncestor([Sale Region].CurrentMember,[Sale Region].[suzhou]'
at mondrian.resource.MondrianResource$_Def0.ex( MondrianResource.java:785 )
解决方法:待解决
%***************************************************************************
Caused by: com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:Tuple contains more than one member of dimension '[Product Category]'.
at com.tonbeller.jpivot.mondrian.MondrianModel.initialize( MondrianModel.java:550 )
解决方法:
由于我粗心,将“ . ”误写成了“ , ”,才会报上面异常。修改方法为将“ [Product Category],[All Products] ”改为“[Product Category].[All Products] ”。
select {[Measures].[ROI],[Measures].[Number],Measures.[Number Proportion],[Measures].[Average UnitPrice],[Measures].[Total Sale],[Measures].[Product Percentage]} ON columns, NON EMPTY
{( [Product Category],[All Products] ,[Customer Sex].[All Sex])} ON rows from [Sales]
%***************************************************************************
2474343 [http-8080-2] ERROR com.tonbeller.jpivot.tags.OlapModelTag -
mondrian.olap.MondrianException : Mondrian Error:Internal error: Error while creating SQL dialect
at mondrian.resource.MondrianResource$_Def0.ex( MondrianResource.java:785 )
at mondrian.olap.Util.newInternal( Util.java:1340 )
at java.lang.Thread.run( Thread.java:619 )
Caused by: java.sql.SQLException : Network error IOException : Connection refused: connect
解决方法:
由异常信息可看出出现此异常是由于连接数据库出错,我仔细检查了是由于将 mysql 数据库连接成了 SqlServer数据库。
%***************************************************************************
154157 [http-8080-1] ERROR com.tonbeller.wcf.controller.RequestFilter - exeption
org.apache.jasper.JasperException : javax.servlet.ServletException : javax.servlet.jsp.JspException : OlapModel/Query ${paramquery01} not found
at org.apache.jasper.servlet.JspServletWrapper.handleJspException( JspServletWrapper.java:522 )
解决方法:
错误原因是以下代码中:
< jp:setParam query = "${ paramquery01 } " httpParam = "param" mdxParam = "ProductMember" >
<jp:mondrianQuery id="query01"
jdbcDriver="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost:3306/tezz?user=root&password=sys"
catalogUri="/WEB-INF/queries/tezz.xml" >
select
{[Measures].[Number],[Measures].[Average UnitPrice],[Measures].[Total Sale]} ON columns,
{Parameter("ProductMember", [Product Category],[Product Category].[All Products])} ON rows
from [Sales]
</ jp:mondrianQuery >
</ jp:setParam >
jpivot 的 setParam 标签的 query 属性值就是 mondrianQuery 标签的 id 属性值,应一致。将 query01 改为paramquery01 即可。
%***************************************************************************
信息 : SessionListener: contextInitialized()
2010-7-23 8:44:12 org.apache.catalina.session.StandardManager doLoad
严重 : IOException while loading persisted sessions: java.io.EOFException
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully( ObjectInputStream.java:2281 )
at java.io.ObjectInputStream$BlockDataInputStream.readShort( ObjectInputStream.java:2750 )
at java.io.ObjectInputStream.readStreamHeader( ObjectInputStream.java:780 )
at java.io.ObjectInputStream.<init>( ObjectInputStream.java:280 )
at org.apache.catalina.util.CustomObjectInputStream.<init>( CustomObjectInputStream.java:58 )
解决办法:重建项目换个项目名称。
%***************************************************************************
87875 [http-8088-1] ERROR com.tonbeller.wcf.controller.RequestFilter - exeption
页面异常
org.apache.jasper.JasperException : An exception occurred processing JSP page /testpage.jsp at line 44
41: <form action="testpage.jsp" method="post">
42:
43: <%-- include query and title, so this jsp may be used with different queries --%>
44: <wcf:include id="include01" httpParam="query" prefix="/WEB-INF/queries/" suffix=".jsp"/>
45: <c:if test="${query01 == null}">
46: <jsp:forward page="/index.jsp"/>
47: </c:if>
Caused by: com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:No function matches signature '(<Set>, <Member>)'
at com.tonbeller.jpivot.mondrian.MondrianModel.initialize( MondrianModel.java:550 )
at com.tonbeller.jpivot.olap.model.OlapModelDecorator.initialize( OlapModelDecorator.java:132 )
解决方法:
我的 mdx 查询语句如下:
select {[Measures].[Total Sale],[Measures].[Product Percentage]} ON columns,
{( [Product Category].[All Products].children ,[Customer Sex].[All Sex])} ON rows
from [Sales]
改为: select {[Measures].[Total Sale],[Measures].[Product Percentage]} ON columns,
{( [Product Category].[All Products] ,[Customer Sex].[All Sex])} ON rows
from [Sales]
即可。
%***************************************************************************
1317609 [http-8088-1] ERROR com.tonbeller.wcf.controller.RequestFilter - cause
javax.servlet.ServletException : javax.servlet.jsp.JspException : org.apache.jasper.JasperException :javax.servlet.ServletException : javax.servlet.jsp.JspException : com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:No function matches signature '{<Level>}'
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException( PageContextImpl.java:858 )
Caused by: com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:No function matches signature '{<Level>}'
at com.tonbeller.jpivot.mondrian.MondrianModel.initialize( MondrianModel.java:550 )
at com.tonbeller.jpivot.olap.model.OlapModelDecorator.initialize( OlapModelDecorator.java:132 )
解决方案:
我的 mdx 查询语句:
select { [Sale Time].[quarterName] } ON columns,
{[Product Category].[All Products].CHILDREN} ON rows
from [Sales]
由于 [Sale Time].[quarterName] 只是到了级别( level ),而集合 set 中只能是 member 或者 tuple ,
故只需将 {[Sale Time].[quarterName]} 改为 {[Sale Time].[quarterName].AllMembers}
效果图为:
{[Sale Time].[quarterName].AllMembers} 与 {[quarterName].AllMembers} 得出的效果一样。
若改为: {[Sale Time] } ,则效果图为:
若改为: {[Sale Time].[quarterName].children} ,则报异常:
Caused by: javax.servlet.ServletException : javax.servlet.jsp.JspException :com.tonbeller.jpivot.olap.model.OlapException : Mondrian Error:No function matches signature '<Level>.children'
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException( PageContextImpl.java:858 )
同样, {[Sale Time].[quarterName].children} 与 {[quarterName].children} 效果是一样的。
故我得出的结论是:
1. level 下面不能调用 children ,只能用 allmembers 来获得子集所有成员。 Children 可以用在层次 hierarchy 下面如: [Product Category].[All Products].children( 注意的是这里的 ”All Products” 是层次的 allMemberName 属性,而非 name 属性 , 用 name 属性的写法是 [Sale Time.OnlyQ].children ,此时也可以用 allmembers) ;也可以直接在维度下面 , 如 [Sale Time].children, 显示效果图为:
同时, allmembers 也可以用在直接维度下面如 [Sale Time]. allmembers, 显示效果图为将成员全部列出,不是下钻( drill-down )形式,操作只能是上卷( drill-up ):
结论 2 :两个嵌套的 level 的( name 属性)不能同时用,即 [yearName].[quarterName] 会报找不到的错误,但涉及到具体的 members 就可以用,如 [2007].[Q1].
涉及到具体 member 值如 [2007] ,或 [2007].[Q1] 等的 member ,后面就不能使用member,allmembers,currentmember, 都会报上面的同样的错,但可以使用如下术语:
Children , firstchild , parent , prevmember, nextmember 。
异常先贴到这里,如有朋友发现错误之处还请指出,以免一错再错,误导了其他的朋友。这里说明一下:对于异常15涉及到一些截图,这里我将它们上传到文件里,若希望结合截图参看可以下载下来。