在报表对数据进行汇总统计时,通常是按照某个字段进行分组,比如按地区、类别等字段分组后对其他信息进行汇总,但有一种分组模式是根据数据的值段来分的,例如按照分数段、年龄段、按时间段等,属于某个数值区间的记录归到一个组里,这种分组统称为“按段分组”。
如下图即为一个对奖金的不同数值分段的分组报表。表中将奖金划分了四个数值段,小于五千,五千到一万,一万到一万五,一万五以上。
作为一款全面的、企业级的Java报表工具,皕杰报表是如何实现上述报表的呢?下面我们就通过详细的步骤看一下设计过程。
到皕杰报表工具软件设计器文件夹BIOS Studio下,双击BIOS Studio.exe文件,打开设计器,确认已连接数据库。皕杰报表工具的设计器是纯绿色设计,不需要安装,每次使用双击BIOS Studio.exe文件即可。这个是不同于其它web报表工具的,用过才知道这种不需要修改操作系统注册表、不需要安装、拷贝即用、纯绿色软件的好处。
1、在项目视图里右键项目名称选择新建报表,输入“按段分组报表”,点击完成。
2、在摘要视图里点击新建报表数据集,输入名称“ds1”,选择数据源BIOS_DS,选择类型SQL语句,点击下一步。
3、在SQL语句对话框里输入SQL语句,SELECT DEPT,SEX, DEGREE, BONUS, EMPNAME FROM EMPLOYEE,点击完成,数据集ds1就建好了。
4、相同的步骤建立数据集ds2。
5、设计表样如下图
6、绑定数据
A3单元格数据值:=ds1.split(bonus,list(5000,10000,15000)),显示值:=map(list(0,1,2,3),list('五千以下','五千到一万','一万到一万五','一万五以上')),扩展方向属性选择纵向扩展。
B3单元格数据值:=ds1.select(EMPNAME),扩展方向属性选择纵向扩展。
C3单元格数据值:=ds1.DEGREE,显示值:=ds2.getone(name,id==@value),扩展方向属性选择自动跟随。
D3单元格数据值:=ds1.SEX,显示值:=map(list("1","2"),list("男","女")),扩展方向属性选择自动跟随。
E3单元格数据值:=ds1.BONUS,扩展方向属性选择自动跟随。
保存后点击WEB预览按钮,就得到了我们想要的按段分组报表。
函数说明:根据数据值段进行切分,俗称“按段分组”。
语法:datasetName.split(valueExp,listExp{,filterExp{,eqExp{,ascExp{,isRootGroupExp}}}})
参数说明:
valueExp 用于分组的值表达式
ListExp 数据值段列表,同valueExp数据类型相同的数组,要求其中元素从小到大排列
filterExp 过滤表达式
eqExp 返回布尔值的表达式,缺省为false,表示与元素比较时含下限,即值大于等于下限小于上限;当布尔值为true时,表示与元素比较时含上限,即值大于下限小于等于上限。
ascExp 返回布尔值的表达式,缺省为true,表示listExp返回的数组按从小到大排,否则为从大到小排
isRootGroupExp 是否root数据集表达式,默认为false
返回值:整数组,代表记录按值段分组后组的顺序,如list(0,1,2,3)代表第一组,第二组,第三组,第四组;因此,定义完单元格数据值表达式后还需要定义显示值表达式,比如第一组代表不及格,第二组代表及格等等
举例说明:
1.例1:ds1.split(成绩,list(60,80,90),,true,false) 返回值为list(0,1,2,3),显示值表达式为:map(list(0,1,2,3),list(不及格,及格,良好,优秀))
2.例2:ds1.split(成绩,@arg1,,true,false) 其中@arg1为整数组,其值为list(60,70,80,90) ,显示值表达式为:map(zone(0,count(@arg1)),@arg2),其中@arg2为字符串组,其值为{"不及格","及格","中","良好","优秀"}本例通过参数动态控制分组值段以及结果组的显示值。