目录

单表式主子报表

单表式主子报表的特点,是用单个报表实现主子表的业务逻辑。一般数据集会有两个以上,分别是主表的数据集和子表的数据集,在展现上,一般要求主表以自由格式展现,子表以列表格式展现,为一对多的关系,子报表可能同时存在多个。单表式主子报表操作比较方便,而且可以进行数据填报。

一、报表实例

制作“客户订单表”,展现客户及其订单的数据信息。

二、设计过程

第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()筛选出唯一不同的数据。