引入式主子报表
引入式主子报表
引入式子报表的特点是母报表单元格根据子报表的行数列数,双向同时扩展,子报表有几行几列,母报表中就扩展出几行几列,子报表占用母报表的空白行列,格线严格对齐。
引入式的子报表扩展后,和母报表形成了一个统一的二维矩形单元格,因此子报表的源格不保留,此时母报表不能访问子报表的值。
第一步: 打开设计器
第二步:连接数据源
第三步:新建空白报表
第四步:定义数据集
子报表9.3_sub1.raq数据集: ds1:SELECT 雇员.雇员ID,雇员.职务,雇员.地址,雇员.雇用日期,雇员.上级,雇员.邮政编码,雇员.家庭电话,雇员.姓氏||雇员.名字 as 姓名 FROM 雇员。
子报表9.3_sub2.raq数据集: ds1:SELECT 订单.订单ID,订单.货主地区,订单.雇员ID,订单明细.订单ID,订单明细.数量,订单明细.单价,订单明细.折扣 FROM 订单,订单明细 WHERE 订单.订单ID = 订单明细.订单ID。
子报表9.3_sub3.raq数据集: ds1:SELECT 订单.客户ID,订单.雇员ID,订单.订单ID,客户.客户ID,客户.地区,客户.公司名称,订单.运货费,订单.运货商 FROM 订单,客户 WHERE 订单.雇员ID IS NOT NULL AND 客户.客户ID = 订单.客户ID。 ds2:SELECT 运货商.公司名称,运货商.运货商ID FROM 运货商。
第五步:定义表达式
母报表:
1,单击主菜单中的【配置】->【参数】,点【增加】按钮添加一个参数,【名称】:ID,【数据类型】:整数。如图所示:
2,在B4单元格上点右键,在下拉菜单中选择【子报表】,如下图所示:
点击【定义子报表】按钮,弹出”报表属性”窗口,在这里我们定义三个子报表,如下图所示:
子报表定义完成后点【确定】按钮回到“子报表单元格属性定义”界面。在【请选择子报表】中选择我们刚才定义的子报表”rpt1”,并将【引入方式】设为”引入式”,点【增加】按钮,增加一个【参数】:ID,【对应值表达式】为:=@ID,点【确定】按钮。
3,在B8单元格上点右键,在下拉菜单中选择【子报表】,在【请选择子报表】中选择我们刚才定义的子报表”rpt2”,并将【引入方式】设为”引入式”, 增加一个【参数】:ID,【对应值表达式】为:=@ID,点【确定】按钮。
4,在B12单元格上点右键,在下拉菜单中选择【子报表】,在【请选择子报表】中选择我们刚才定义的子报表”rpt3”,并将【引入方式】设为”引入式”, 增加一个【参数】:ID,【对应值表达式】为:=@ID,点【确定】按钮。
子报表9.3_sub1:
1,定义数据集ds1: SELECT 雇员.雇员ID,雇员.职务,雇员.地址,雇员.雇用日期,雇员.上级,雇员.邮政编码,雇员.家庭电话,雇员.姓氏||雇员.名字 as 姓名 FROM 雇员
2,在B1单元格输入表达式:= ds1.select(雇员ID,false,雇员ID==@ID)
3,在D1单元格输入表达式:= ds1.姓名
4,在B2单元格输入表达式:= ds1.职务
5,在D2单元格输入表达式:=date(ds1.雇用日期) 设置显示格式为:yyyy-MM-dd
6,在B3单元格输入表达式:= ds1.上级 设置显示值为:ds1.select(姓名,,雇员ID==value(),,true)
7,在D3单元格输入表达式:= ds1.家庭电话
8,在B4单元格输入表达式:= ds1.地址
9,将B2、D2、B3、D3、B4单元格的左主格设为:B1
子报表9.3_sub2:
1,定义数据集ds1: SELECT 订单.订单ID,订单.货主地区,订单.雇员ID,订单明细.订单ID,订单明细.数量,订单明细.单价,订单明细.折扣 FROM 订单,订单明细 WHERE 订单.订单ID = 订单明细.订单ID
2,在A2单元格输入表达式:= ds1.group(货主地区,false,雇员ID==@ID)
3,在B2单元格输入表达式:= ds1.count()
4,在C2单元格输入表达式:= ds1.sum(数量*单价*(1-折扣))
子报表9.3_sub3:
1,定义数据集ds1: SELECT 订单.客户ID,订单.雇员ID,订单.订单ID,客户.客户ID,客户.地区,客户.公司名称,订单.运货费,订单.运货商 FROM 订单,客户 WHERE 订单.雇员ID IS NOT NULL AND 客户.客户ID = 订单.客户IDds2:SELECT 运货商.公司名称,运货商.运货商ID FROM 运货商
2,在C1单元格输入表达式:= ds1.group(运货商,false),设置显示值为:ds2.select(公司名称,,运货商ID==value()) ,并将扩展方式设为:横向扩展
3,在A2单元格输入表达式:= ds1.group(地区,false)
4,在C2单元格输入表达式:= ds1.count()
5,在C3单元格输入表达式:= ds1.sum(运货费) 设置显示格式为:¥#0.00
参数表单 9.3_arg.raq
1,将报表的填报类型设为:可以填报
2,将B1单元格设为可写,并将属性栏里的【变量名】设为:ID。
注:参数表单的做法请参见:
第六步: 美化外观
第七步:保存预览
母报表保存为9.3.raq,引入式主子报表的预览效果如下图所示:
第八步:发布报表
-
Count数据集函数说明
计算数据集当前记录行集中,满足条件的记录数
语法: datasetName.count({filterExp{,rootGroupExp{,nullCheckExp}}})
参数说明: filterExp 条件表达式,如果全部选出,则不要此参数, rootGroupExp 是否root数据集表达式 nullCheckExp 检查某一条记录是否为空的标达式
返回值: 整数
举例:
例1:ds1.count() 表示对ds1中当前记录行集中所有记录进行计数,返回记录数。
例2:ds1.count(true) 含义同上,但是运算速度比ds1.count()慢,因此当记录全部选出时, 建议不要true
例3:ds1.count(quantity>500) 表示从ds1当前记录行集中选出quantity>500的记录进行计数, 返回记录数。
例4:ds1.count(,,ID) 表示当前记录行集中ID不为空的纪录数目
-
sum数据集函数说明
从数据集当前记录行集中检索出符合条件的记录集合,算出给定字段或表达式的汇总值
语法: datasetName.sum(selectExp{,filterExp{,rootGroupExp}})
参数说明: selectExp 需求和的字段或表达式 filterExp 条件表达式 rootGroupExp 是否root数据集表达式
返回值: 实数
示例:
例1:ds1.sum(quantity) 求得数据集ds1当前行集中quantity字段的汇总值
例2:ds1.sum(quantity,productid=="1") 从数据集ds1当前行集中检索出productid="1"的记录集,求得其quantity字段的汇总值