单表式主子报表
单表式主子报表的特点,是用单个报表实现主子表的业务逻辑。一般数据集会有两个以上,分别是主表的数据集和子表的数据集,在展现上,一般要求主表以自由格式展现,子表以列表格式展现,为一对多的关系,子报表可能同时存在多个。单表式主子报表操作比较方便,而且可以进行数据填报。
一、报表实例
制作“客户订单表”,展现客户及其订单的数据信息。
二、设计过程
第1步:新建报表
第2步:定义数据集
demo_客户订单:select * from DEMO_ORDERS,DEMO_ORDERDETAILS where DEMO_ORDERS.订单ID=DEMO_ORDERDETAILS.订单ID
这是一个复杂SQL数据集:
第3步:编辑报表
1. 设置B2单元格的表达式:= demo_客户订单.dselect(订单ID),设置B2单元格的左主格为:`0
2. 设置D2单元格的表达式:= demo_客户订单.发货日期,设置显示格式为:yyyy年MM月dd日
3. 设置F2单元格的表达式:= demo_客户订单.到货日期,设置显示格式为:yyyy年MM月dd日
4. 设置B4单元格的表达式:= demo_客户订单.客户ID
5. 设置F4单元格的表达式:= demo_客户订单.货主名称
由于货主名称中有数字,通过【编辑】-【显示值】设置显示值对照表:
6. 设置B5单元格的表达式:= demo_客户订单.运货商ID
7. 设置D5单元格的表达式:= demo_客户订单.运货费,设置显示格式为:¥#0.00
8. 设置F5单元格的表达式:= demo_客户订单.货主城市
9. 设置A8单元格的左主格为B8
10. 设置B8单元格的表达式:= demo_客户订单.select(产品ID,false,订单ID==B2,,true),设置B8单元格的左主格为B2单元格
11. 设置C8单元格的表达式:= demo_客户订单.单价,设置显示格式为:¥#0.00
12. 设置D8单元格的表达式:= demo_客户订单.折扣比例
13. 设置E8单元格的表达式:= demo_客户订单.数量
14. 设置F8单元格的表达式:=C8*E8,设置显示格式为:¥#0.00
15. 设置A1、A2、A3、A4、A5、A6、A7、A9单元格的左主格为B2单元格。
将这些单元格的左主格设为B2的目的,是为了使B2单元格扩展的时候,其它单元格随着一起扩展,从而实现单表式主子报表。
选中B2单元格,通过【编辑】-【扩展】设置:
16. 设置A9单元格为行后分页,实现打印时每张订单单独打印。并将第9行下边框设为蓝色,对不同订单加以区分。
17. 美化外观
美化外观包括调整表格大小、字体颜色及大小、背景色、增加边框等。
第4步:保存预览
此报表保存为“客户订单表”,预览效果如下图所示:
第5步:打印导出
三、函数说明
dselect()数据集函数
函数说明: 从数据集的当前行集中,选取符合条件的记录,选出字段相同的行将会只保留第一行。
语法: datasetName.dselect( <select_exp>{, filter_exp{,rootGroupExp}} )
参数说明:
select_exp 要选择的字段列名/列号,或表达式。列号用#n表示,例如:#0代表第0列,#1代表第1列,依此类推
filter_exp 数据过滤表达式,如果全部选出,则此参数省略,仅用“,”占位
rootGroupExp 是否root数据集表达式,为true,从数据集里取数,为false, 则从本单元格主格的结果集里取数
返回值: 一组数据的集合,数据类型由select_exp的运算结果决定
示例:
例:ds1.dselect(name) 表示,从数据集ds1中,选取name字段列的所有值,name相同的记录只会保留第一个。
本节的报表中,数据集ds6是由两个数据表连接查询而来的,存在重复数据,所以用dselect()筛选出唯一不同的数据。