引入式子报表

阅读(7341) 标签: count, sum, 引入方式,

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

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

第一步:打开设计器

第二步:通过“工具”-> “数据源”菜单,连接数据源

第三步:新建空白报表

第四步:定义数据集

菜单“报表”->“数据集”,数据集设置窗口点击【增加】按钮增加数据集。

 

子报表13.3_sub1.rpx数据集:

ds1SELECT 雇员.雇员ID,雇员.职务,雇员.地址,雇员.雇用日期,雇员.上级,雇员.邮政编码,雇员.家庭电话,雇员.姓氏||雇员.名字 as 姓名 FROM 雇员。

 

子报表13.3_sub2. rpx数据集:

ds1SELECT 订单.订单ID,订单.货主地区,订单.雇员ID,订单明细.订单ID,订单明细.数量,订单明细.单价,订单明细.折扣 FROM 订单,订单明细 WHERE  订单.订单ID = 订单明细.订单ID

 

子报表13.3_sub3. rpx数据集:

ds1SELECT 订单.客户ID,订单.雇员ID,订单.订单ID,客户.客户ID,客户.地区,客户.公司名称,订单.运货费,订单.运货商 FROM 订单,客户 WHERE 订单.雇员ID IS NOT NULL AND 客户.客户ID = 订单.客户ID

ds2SELECT 运货商.公司名称,运货商.运货商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,  B2D2B3D3B4单元格的左主格设为: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

ds2SELECT 运货商.公司名称,运货商.运货商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,引入式主子报表的预览效果如下图所示:

第八步:发布报表

  count数据集函数说明    

函数说明:

计算数据集当前记录行集中,满足条件的记录数

语法:

datasetName.count({filterExp}) 

参数说明:

filterExp  条件表达式,如果全部选出,则不要此参数

选项:

@a  null元素进行计数

@r   是否使用根数据集表达式,根数据集即表示最外层数据集

返回值:

整数 

举例:

1ds1.count()

表示对ds1中当前记录行集中所有记录进行计数,返回记录数。

2ds1.count(quantity>500)

表示从ds1当前记录行集中选出quantity>500的记录进行计数,返回记录数。

3ds1.count@a()

表示当前记录行集的纪录数目,包含null元素

 

  sum数据集函数说明     

函数说明:

从数据集当前记录行集中检索出符合条件的记录集合,算出给定字段或表达式的汇总值 

语法:

datasetName.sum(selectExp{,filterExp})

参数说明:

selectExp  需求和的字段或表达式

filterExp  条件表达式

选项:

@r  是否为根数据集表达式,根数据集即表示最外层数据集 

返回值:

实数 

示例:

1ds1.sum(quantity) 

求得数据集ds1当前行集中quantity字段的汇总值

2ds1.sum(quantity,productid=="1")

从数据集ds1当前行集中检索出productid="1"的记录集,求得其quantity字段的汇总值