日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mondrian异常

發布時間:2024/3/26 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mondrian异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于要做多維報表的展現,需要使用OLAP的引擎Mondrian,于是最近一直在學習MDX查詢語言,在做Demo時遇到了很多bug,我認為這些異常對于初學MDX查詢語言的朋友來說很常見,一般都會遇到這些bug,這里我將自己遇到的bug收集起來,同時將其解決方法一并記錄下來,希望遇到同樣問題的朋友可以參考一下,希望可以節省一些你調試此類bug的時間。

?

?

異常:?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)中的成員不在同一個層次里,比如寫成

select {[Measures].[總銷售額],[Measures].[貢獻度]} ON columns,

? {[產品類別].[所有產品],[客戶性別].[所有性別]} ON rows

from [Sales]

?

? ????由于“產品類別”和“客戶性別”是兩個不同的維度,而MDX的基本特性3—集合(Set),它的特點是集合里可以含有若干個Member,但是必須是同一維度上的Member,如{[Time].[1996],[Time].[1997]};

也可以是Cube上的若干個Tuple的集合,同樣要注意的是,這些Tuple集合的子集之間存在嚴格的維度對稱關系,如{([Computers].[China]),([Air_Conditioner].[Jpan])}.

?

?

小知識點說明:

?

[銷售季度].[所有季度] [銷售季度].children的區別:

如下面的例子:

?

?

?

select {[銷售季度].[所有季度]} ON columns,

?

? {[產品類別].CHILDREN} ON rows

???? from [Sales]

?

select {[銷售季度].CHILDREN} ON columns,

? {[產品類別].CHILDREN} ON rows

???? from [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?'

?

select {[Measures].[數量]} ON columns,

????????? {([產品類別].[所有產品]),([銷售季度].[第一季度])} ON rows

?????? 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)

??? ... 47 more

Caused by: mondrian.olap.MondrianException: Mondrian Error:Internal error: while building member cache; sql=[select "Quarter"."quarterId" as "c0", "Quarter"."quarterName" as "c1" from "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:<from 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?&apos;Parameter(<String>, <Dimension>)&apos;

??? 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">

select

?{[Measures].[數量],[Measures].[平均單價],[Measures].[總銷售額]} ON columns,

?{Parameter("ProductMember", [產品類別])} ON rows

from [Sales]

</jp:mondrianQuery>

?

改為:

select

?{[Measures].[數量],[Measures].[平均單價],[Measures].[總銷售額]} ON columns,

?{Parameter("ProductMember", [產品類別],[產品類別].[數碼])} ON rows

from [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>

?

??????也許還要進行其他設置,目前我還沒找到解決的方法。

異常: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?&apos;Sales&apos; has bad formula

.

Caused by: mondrian.olap.MondrianException: Mondrian Error:No function matches signature &apos;<Level>.prevMember&apos;

?

?

解決方法:這個異常可以參看異常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 &apos;EOF&apos;

Caused by: mondrian.olap.MondrianException: Mondrian Error:Syntax error in MDX expression &apos;IsAncestor([Sale Region].CurrentMember,[Sale Region].[suzhou]&apos;

??? 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?&apos;[Product Category]&apos;.

??? 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 &apos;(<Set>, <Member>)&apos;

??? 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 &apos;{<Level>}&apos;

??? at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)

?

Caused by: com.tonbeller.jpivot.olap.model.OlapException: Mondrian Error:No function matches signature &apos;{<Level>}&apos;

??? 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 &apos;<Level>.children&apos;

??? 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。

總結

以上是生活随笔為你收集整理的Mondrian异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。