目录

引入式主子报表

引入式主子报表

引入式子报表的特点是母报表单元格根据子报表的行数列数,双向同时扩展,子报表有几行几列,母报表中就扩展出几行几列,子报表占用母报表的空白行列,格线严格对齐。

引入式的子报表扩展后,和母报表形成了一个统一的二维矩形单元格,因此子报表的源格不保留,此时母报表不能访问子报表的值。

第一步: 打开设计器

第二步:连接数据源

第三步:新建空白报表

第四步:定义数据集

子报表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字段的汇总值