MDX查询异常

异常: 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。

 

 

%***************************************************************************

异常: 9

 

 

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 )

 

解决方法:待解决

 

 

%***************************************************************************

 

 

 

异常: 10

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]

 

 

%***************************************************************************

异常: 11

 

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数据库。

 

 

%***************************************************************************

 

异常: 12

 

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 即可。

 

%***************************************************************************

异常: 13

 

信息 : 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 )

 

 

 

解决办法:重建项目换个项目名称。

 

%***************************************************************************

异常: 14

 

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]

 

即可。

 

%***************************************************************************

异常: 15

 

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涉及到一些截图,这里我将它们上传到文件里,若希望结合截图参看可以下载下来。

你可能感兴趣的:(报表,mondrian,MDX,Jpviot)