Bug 192853 - Charts not supported in aggregation cells of crosstabs
Summary: Charts not supported in aggregation cells of crosstabs
Status: RESOLVED FIXED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: BIRT (show other bugs)
Version: 2.2.0   Edit
Hardware: All All
: P3 major (vote)
Target Milestone: 2.3.0 M5   Edit
Assignee: Yulin Wang CLA
QA Contact:
URL:
Whiteboard: Non-Auto
Keywords: plan
Depends on: 188532 197304 210973
Blocks:
  Show dependency tree
 
Reported: 2007-06-15 08:22 EDT by David Michonneau CLA
Modified: 2009-07-09 21:00 EDT (History)
4 users (show)

See Also:


Attachments
report to reproduce the issue (62.53 KB, text/xml)
2007-06-15 08:26 EDT, David Michonneau CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description David Michonneau CLA 2007-06-15 08:22:06 EDT
Steps:
Create a crosstab
Insert a chart in the aggregation/measure cell
Run the report

Expected:
The designer should not allow dropping charts inside the crosstab cell
or
The crosstab and charts should be rendered correctly

Result:
An exception is shown:

 org.eclipse.birt.report.service.api.ReportServiceException: Error happened 
while running the report; nested exception is: java.lang.ClassCastException: 
org.eclipse.birt.report.engine.data.dte.CubeResultSet cannot be cast to 
org.eclipse.birt.report.engine.extension.IQueryResultSet 
Show Exception Stack Trace 
Hide Exception Stack Trace  
Stack Trace:
 
org.eclipse.birt.report.engine.presentation.LocalizedContentVisitor.processExtendedContent(LocalizedContentVisitor.java:672)
org.eclipse.birt.report.engine.presentation.LocalizedContentVisitor.visitForeign(LocalizedContentVisitor.java:368)
org.eclipse.birt.report.engine.content.impl.ForeignContent.accept(ForeignContent.java:59)
org.eclipse.birt.report.engine.presentation.LocalizedContentVisitor.localize(LocalizedContentVisitor.java:102)
org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:36)
org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutChildren(HTMLBlockStackingLM.java:63)
org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:171)
org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.resumeLayout(HTMLInlineStackingLM.java:94)
org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.layoutChildren(HTMLInlineStackingLM.java:138)
org.eclipse.birt.report.engine.layout.html.HTMLRowLM.layoutChildren(HTMLRowLM.java:41)
org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:171)
org.eclipse.birt.report.engine.layout.html.HTMLRowLM.layout(HTMLRowLM.java:31)
org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutChildren(HTMLBlockStackingLM.java:68)
org.eclipse.birt.report.engine.layout.html.HTMLTableBandLM.layoutChildren(HTMLTableBandLM.java:66)
org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:171)
org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutChildren(HTMLBlockStackingLM.java:68)
org.eclipse.birt.report.engine.layout.html.HTMLGroupLM.layoutChildren(HTMLGroupLM.java:72)
org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:171)
org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutChildren(HTMLBlockStackingLM.java:68)
org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:81)
org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:171)
org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layoutChildren(HTMLPageLM.java:142)
org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:84)
org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:90)
org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:148)
org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:71)
org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(Unknown 
Source)
org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(Unknown 
Source)
org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(Unknown 
Source)
org.eclipse.birt.report.service.actionhandler.BirtGetPageAllActionHandler.__execute(Unknown 
Source)
org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(Unknown 
Source)
org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(Unknown 
Source)
org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(Unknown 
Source)
org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPageAll(Unknown 
Source)
sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(Unknown 
Source)
org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(Unknown 
Source)
sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(Unknown 
Source)
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.eclipse.tomcat.internal.EclipseErrorReportValve.invoke(EclipseErrorReportValve.java:153)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Unknown Source)
Comment 1 David Michonneau CLA 2007-06-15 08:26:32 EDT
Created attachment 71441 [details]
report to reproduce the issue
Comment 2 David Michonneau CLA 2007-06-18 06:16:35 EDT
This needs to be disabled at the UI level until the engine can support it.

Since the UI doesn't have any way to know what is supported in the crosstab container, the crosstab model should define what kind of contents it can accept. Reassigning to model team for futher investigation.

I propose this should be fixed in RC4, as it is quite a serious usability issue.
Comment 3 Ivy Li CLA 2007-06-18 23:06:32 EDT
The exception is only thrown out when the Chart reference to the xtab's dataset. If the Chart has its own dataset, the report should be generated correctly. So, I think we should not just disable this for all Chart inside xtab. Maybe need some documentations to tell user the right user case. Set to 2.2.1 for the next support of the inner Chart use the outter xtab's dataset. 
Comment 4 Zhiqiang Qian CLA 2007-06-18 23:44:51 EDT
The chart can still be generated when reference to an independent dataset, it just doesn't work when use "inherited dataset" within crosstab. I think currently either we leave it as is and wait untill engine has supported nested cube query, or temporarily add check in chart builder UI to disable "inherited dataset" when the binding holder has no valid dataset property (in this case, only cube is set in the binding holder).
Comment 5 David Michonneau CLA 2007-06-19 10:59:57 EDT
I don't think there is much meaning to reference a different dataset for a 
chart inside a crosstab. The typical (and default) scenario is to inherit the 
data, and that is the one that fails.
Comment 6 Zhiqiang Qian CLA 2007-06-19 22:26:31 EDT
I suggest we defer this to 2.2.1.
Comment 7 Zhiqiang Qian CLA 2007-07-19 23:50:08 EDT
Need add check in engine to give more friendly messages instead of exceptions. The crosstab processing flow should still be able to continue.

As David suggested: 

"showing an error in the report that explains what is wrong and how to fix it, like “the {table/chart/customtype} {itemname} does not support data inheritance inside a crosstab, please bind it to a dataset or move it outside the crosstab”, rather than the exception which is not very helpful now."

Please schedule this to 2.3 after made the change, until then we can address the full support.
Comment 8 Wei Zhao ( Shang ) CLA 2007-07-20 04:30:07 EDT
Engine has changed the exception message friendly if chart inherits the outer crossTab's dataset.
Comment 9 Wei Yan CLA 2007-07-22 23:55:03 EDT
the remain part should be implemented in 2.3
Comment 10 Wei Yan CLA 2007-11-06 02:38:13 EST
DTE should provide an API to execute nest-cubquery.
Comment 11 Wei Wang CLA 2007-12-03 02:12:12 EST
Engine have changed the APIs to satisfy the request.
Comment 12 Wei Wang CLA 2007-12-12 04:08:16 EST
re-assign to Wei Yan for further investigation.

Thanks.
Comment 13 Gang Liu CLA 2008-01-02 02:43:29 EST
depends on 197304, suggest moving to next milestone
Comment 14 Gang Liu CLA 2008-01-29 03:17:57 EST
Data in chart is not correct, Reassign to chart team to investigate.
Comment 15 Yulin Wang CLA 2008-01-29 03:59:58 EST
Added xtab integration support for chart in multi-dimension case.