Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
PUBLIC CLOUD
PRIVATE CLOUD
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
chart axis vs dataset columns
nikodem38
Hi,
I need to create a scripted chart but I don't want to use any dataset results.
All I have is a list of values that I want to use for category and series in the chart.
How can I do that?
Thanks for your feedback.
Nicolas
Find more posts tagged with
Comments
kclark
I've attached a rptdesign that takes values from a dataset and puts them into an array. The script then iterates through the arrays and adds the values to the chart. <br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
function beforeGeneration( chart, icsc )
{
importPackage(Packages.java.util);
importPackage(Packages.org.eclipse.birt.chart.model.data.impl);
importPackage(Packages.org.eclipse.birt.chart.model.attribute);
importPackage(Packages.org.eclipse.birt.chart.model.component.impl);
importPackage(Packages.org.eclipse.birt.chart.model.attribute.impl);
importPackage(Packages.org.eclipse.birt.chart.model.type.impl);
importPackage(Packages.org.eclipse.birt.chart.util);
importPackage(Packages.java.util);
var xAxis = chart.getAxes().get(0);
var yAxis = xAxis.getAssociatedAxes().get(0);
var xSerieDef = xAxis.getSeriesDefinitions().get(0);
var ySerieDef = yAxis.getSeriesDefinitions().get(0);
// create custom data
var xData = new ArrayList( );
ydata1 =icsc.getExternalContext().getScriptable().getPersistentGlobalVariable("pricearry");
xdata1 =icsc.getExternalContext().getScriptable().getPersistentGlobalVariable("dtarry");
var cal = new GregorianCalendar();
for( i=0;i<xdata1.size();i++){
cal.setTime(xdata1.get(i));
var cdt = new CDateTime( cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH) );
xData.add( cdt);
}
var categoryValues = DateTimeDataSetImpl.create( xData );
var orthoValues = NumberDataSetImpl.create( ydata1 );
// create custom series
var seCategory = SeriesImpl.create( );
// or just change existing series
// var seCategory = xSerieDef.getRuntimeSeries().get(0);
seCategory.setDataSet( categoryValues );
var bs = LineSeriesImpl.create( );
// or just change existing series
// var bs = ySerieDef.getRuntimeSeries().get(0);
bs.setSeriesIdentifier( "Dynamic\r\nBar Series" ); //$NON-NLS-1$
bs.setDataSet( orthoValues );
// clear existing series
xSerieDef.getSeries().clear();
ySerieDef.getSeries().clear();
// bind new sereis to chart
xSerieDef.getSeries().add(seCategory);
ySerieDef.getSeries().add(bs);
//This is processed before
ttv = TooltipValueImpl.create( 50,"\"tefffst\"");
a = ActionImpl.create( ActionType.SHOW_TOOLTIP_LITERAL,ttv );
t = TriggerImpl.create( TriggerCondition.ONMOUSEOVER_LITERAL,a );
//myseries.getTriggers().clear();
bs.getTriggers().add(t);
}
</pre>
<br />
You should be able to do the same thing with your report, create an array and loop through your data, then add it to the chart. Let me know if this helps or if you have any questions
nikodem38
Thanks
I think this will help a lot.
In fact, I need to create a Stacked Bar chart using arrays:
- the xaxis will be a list of years formatted as strings
- the yaxis will be a list of values (average and sum values)
These lists are filled in by some dataset results created in javascript
I will adapt your example to my script
Best regards,
Nicolas
nikodem38
My Stacked Bar chart object is already put in the report page.
The script executes well but the chart is not displayed. I got a blank area instead the size of the chart.
Here is my code:
mc = reportContext.getReportRunnable().designHandle.getDesignHandle().findElement("mychart");
//get the chart model
mymc=mc.getReportItem().getProperty("chart.instance");
var xAxis=mymc.getAxes().get(0);
var yAxis=xAxis.getAssociatedAxes().get(0);
var xSerieDef = xAxis.getSeriesDefinitions().get(0);
var ySerieDef = yAxis.getSeriesDefinitions().get(0);
xData=new Array("2010","2011","2012");
yData=new Array(1,5,10);
var categoryValues = TextDataSetImpl.create( xData );
var orthoValues = NumberDataSetImpl.create( yData );
// create custom series
var seCategory = SeriesImpl.create( );
// or just change existing series
// var seCategory = xSerieDef.getRuntimeSeries().get(0);
seCategory.setDataSet( categoryValues );
var bs = LineSeriesImpl.create( );
// or just change existing series
// var bs = ySerieDef.getRuntimeSeries().get(0);
bs.setSeriesIdentifier( "Dynamic\r\nBar Series" ); //$NON-NLS-1$
bs.setDataSet( orthoValues );
// clear existing series
xSerieDef.getSeries().clear();
ySerieDef.getSeries().clear();
// bind new sereis to chart
xSerieDef.getSeries().add(seCategory);
ySerieDef.getSeries().add(bs);
How can I display it ?
nikodem38
I found my error.
I used Array instead of ArrayList.
Now the chart is displayed correctly
Thanks again