mysticfall / pivot4j

Pivot4J provides a common API for OLAP servers which can be used to build an analytical service frontend with pivot style GUI.
Other
128 stars 99 forks source link

Problems when drill member or drill replace used together with show parent #81

Closed klaudiusz223 closed 11 years ago

klaudiusz223 commented 11 years ago

In such cases there are unnecessary drill up buttons.

In following query SELECT {[Measures].[Store Invoice]} ON COLUMNS, Hierarchize(Union(Union(CrossJoin({[Time].[1997]}, {[Store].[All Stores]}), CrossJoin({[Time].[1997]}, [Store].[All Stores].Children)), Union(CrossJoin({[Time].[1998]}, {[Store].[All Stores]}), CrossJoin({[Time].[1998]}, [Store].[All Stores].Children)))) ON ROWS FROM [Warehouse]

look at "All stores" - if you press this button in secend row NPE occures

05-23 14:49:57 ERROR [Pivot4JExceptionHandler] - Unhandled exception has occurred javax.el.ELException: java.lang.IndexOutOfBoundsException: index -1 at org.apache.el.parser.AstValue.invoke(AstValue.java:197) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:68) at javax.faces.component.UICommand.broadcast(UICommand.java:120) at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286) at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752) at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38) at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.IndexOutOfBoundsException: index -1 at mondrian.olap.Util$Flat2List.get(Util.java:4003) at mondrian.calc.impl.AbstractTupleList.get(AbstractTupleList.java:78) at mondrian.olap4j.MondrianOlap4jCellSetAxis$MondrianOlap4jPosition$1.get(MondrianOlap4jCellSetAxis.java:113) at mondrian.olap4j.MondrianOlap4jCellSetAxis$MondrianOlap4jPosition$1.get(MondrianOlap4jCellSetAxis.java:119) at com.eyeq.pivot4j.ui.command.DrillCollapseMemberCommand.execute(DrillCollapseMemberCommand.java:98) at com.eyeq.pivot4j.ui.command.DrillCollapseMemberCommand.execute(DrillCollapseMemberCommand.java:21) at com.eyeq.pivot4j.analytics.ui.PivotGridHandler.executeCommand(PivotGridHandler.java:312) at sun.reflect.GeneratedMethodAccessor533.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.el.parser.AstValue.invoke(AstValue.java:191) ... 23 more

klaudiusz223 commented 11 years ago

There are still some issues with drill replace. Try following query and drill up by Time

SELECT {[Measures].[Store Invoice]} ON COLUMNS, CrossJoin([Warehouse].[USA].[WA].Children, [Time].[1997].[Q1].Children) ON ROWS FROM [Warehouse]

It drills up by Warehouse.

Maybe better idea is to have drill up buttons only on axis