达到的效果是根据查询参数时间设置x轴时间显示,数据的东西我就不说了,呆会把报表传上来。
新建个折线图,在onrender里写上:
// 我重点讲解一下下面的代码:
importPackage(Packages.org.eclipse.birt.chart.model.data.impl);
importPackage(Packages.java.text);
importPackage(Packages.java.util);
importPackage(Packages.java.lang); //导入一些用到的包
function beforeGeneration( chart, icsc )
{
stime = icsc.getExternalContext().getScriptable().getParameterValue("stime"); //获取报表参数开始时间
etime = icsc.getExternalContext().getScriptable().getParameterValue("etime");
format = new SimpleDateFormat("yyyy-MM-dd"); //因为考虑到页面传过来的值为String类型,要转为时间类型
scal = Calendar.getInstance(); //构建Calendar实例
ecal = Calendar.getInstance();
sd = format.parse(stime); //将字符串转化为时间
ed = format.parse(etime);
scal.setTime(sd); //把时间设置到calendar里。
ecal.setTime(ed);
xAxisArray = chart.getBaseAxes(); //得到x轴对象
xAxisArray[0].setCategoryAxis(false); //设置x轴显示为我们设定的时间,如果不设置这项,x轴会默认显示我们读取数据库的时间,有兴趣的可以把他设置为true,对比一下效果就清楚了。
xAxisArray[0].getScale().setMin(DateTimeDataElementImpl.create(scal.getTimeInMillis()));
//设置时间轴最小值
xAxisArray[0].getScale().setMax(DateTimeDataElementImpl.create(ecal.getTimeInMillis()));
//设置时间轴最大值
xAxisArray[0].getScale().setUnit( xAxisArray[0].getScale().getUnit().DAYS_LITERAL);
//设置为日期间隔
xAxisArray[0].getScale().setStep(5); //设置日期间隔为5天。
}
注意:
1、如果不想根据参数时间来设置,而是固定的时间,比如一天24小时,那在设计器里图表格式的缩放比例里简单设置就可以了。如果有人不明白,我们再写相应的教程。
2、simpledateformat的parse使用要注意了,经常有人问我一parse就出错,如果不明白的请注意,format的格式要与你的字符串格式一致,format格式不是把字条串格式化成什么格式的时间,这里一定要注意。
大概就这样,下面是我的报表,使用birt默认数据源,直接可以运行。