由于不是经常摸birt,有报表开发才使用,今天做了一个曲线图,在这里把整个过程写一下,以免下次自己又忘记怎么弄了。
数据源什么的就不说了,下面是我的数据集,日期,另外两个数据:
[img]/upload/attachment/140900/4898a6ab-3e4c-36d1-9f12-5601620c1f7b.bmp[/img]
添加曲线图,然后设置X轴Y轴,我这里Y轴有两个数据,并且由于数据库中存的日期为字符型,这里做了一下转换:
d = new Date(row["col1"].replace(/-/g, "/"));

[img]/upload/attachment/140902/dbbf0c2f-7d10-38be-9dc4-c6fe57e87ca7.bmp[/img]
点击next进入下一个页面,选中X-Axis设置一下type改成DateTime的格式

[img]/upload/attachment/140904/91ba8bdc-e1f6-33fc-9116-7681cf97007b.bmp[/img]


这里的日期格式可以调整,点击type后面的按钮,进行调整,可以选择不定义的,标准的,也可以选择高级的,高级的可以自己设定,由于我做的涉及跨度比较大就到了年和月:yy-MM
这里的规则不知道,我试了半天找到了自己想要的:

[img]/upload/attachment/140907/df325e7a-8673-373f-a2b3-9641084cbfcc.bmp[/img]


X轴的日期刻度可以通过程序设定,也可以在报表中设定,在报表中设定的话,需要先勾掉Is Category Axis ,然后在Scale里面设定

[img]/upload/attachment/140909/eae099c2-c1c4-3131-bff5-6b71010f51ec.bmp[/img]


如果用程序设定的话Is Category Axis需要勾选,选中chart图在函数onRender中添加下面代码并且需要添加两个参数sdate,edate,代码部分是JAVAEYE中一个birt高手huhuanqadn写的,地址是http://huhuanqadn.iteye.com/blog/384123

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格式不是把字条串格式化成什么格式的时间,这里一定要注意。

然后给报表添加好标题,Preview,好了。如下图


[img]/upload/attachment/140912/2b967527-f94e-3947-a3c7-64081a3b31b0.bmp[/img]