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