嵌入式主子报表的特点是在单元格中嵌入子报表,形成格中嵌表的模式,子报表和主报表的格线可以不对齐,子表间格线也不对齐。 嵌入式的子报表扩展后,是个独立的报表,因此子表源格一直保留着,主报表可以访问子报表的值。
第一步:打开设计器
第二步:通过工具 - 数据源菜单,连接数据源
第三步:新建空白报表
第四步:定义数据集
菜单报表 - 数据集,数据集设置窗口点击【增加】按钮增加数据集。
子报表数据集:ds1:SELECT 订单.订购日期,订单.订单ID,客户.联系人姓名,客户.客户ID FROM 客户,订单 WHERE 客户.客户ID=订单.客户ID and year(订单.订购日期) between 2012 and 2015
主报表数据集:ds1:SELECT 客户.客户ID,客户.联系人姓名 FROM 客户
第五步:定义表达式
子报表:
1, 在B1单元格输入表达式:= ds1.group(year(ds1.订购日期),客户ID==@arg1;year(ds1.订购日期):1)
设置显示值为:map(to(2012,2015),list('2012年','2013年','2014年','2015年'))
2, 在B2单元格输入表达式:= ds1.group(month(ds1.订购日期);month(ds1.订购日期):1)
设置显示值为:map(to(1,12),list("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"))
3, 在B3单元格输入表达式:=ds1.count()
主报表:
1, 在A3单元格输入表达式:=ds1.select(客户ID:1)
设置显示值为:ds1.select(联系人姓名,客户ID==value(),1)
2, 在B3单元格上点右键,在下拉菜单中选择【子报表】,弹出下面的窗口。
3, 【定义子报表】按钮,弹出“报表属性”窗口,在这里我们增加一个子报表,再点【确定】按钮完成,如图所示:
4, 在【请选择子报表】下拉框中选择我们刚才定义的子报表“rpt1”,并将【引入方式】设为“嵌入式”,同时增加子报表参数arg1,对应值表达式为:=A3,设置完成点【确定】按钮。
●子报表的url路径既可以是绝对路径也可以是相对路径。在WEB端的相对路径是相对于raqsoftConfig.xml 中Report里配置的home路径。在设计器中的相对路径是相对于工具 - 选项,文件Tab页中的【应用资源路径】,如图:
第六步:美化外观
第七步:保存预览
主报表保存为13.2.rpx,子报表保存为13.2_sub.rpx,嵌入式主子报表的预览效果如下图所示:
第八步:发布报表
对于嵌入式主子报表,主报表里可以获得子报表特定单元格的值,办法是通过调用eval函数来实现。下面我们在13.2.rpx嵌入式主子报表的基础上讲解如何在主表中引用子表特定单元格的值。
第一步:打开设计器
第二步:通过工具 - 数据源菜单,连接数据源
第三步:打开子报表
打开报表13.2_sub.rpx,如下图所示
第四步:修改子报表
1、 在报表下端追加一行。
2、 A4单元格中输入:订单合计
3、 B4单元格中输入:=sum(B3{})。设置B4的上主格设为`0,这样可以使B4单元格汇总的是B1扩展出来的所有年份的订单合计。
隐藏第四行,将第四行设为不可见,而不是删除,因为主报表将引用B4单元格的值。
如下图所示:
4、保存报表为13.2.1_sub.rpx
第五步:打开主报表
打开报表13.2.rpx,如下图所示
第六步:修改主报表
1、在报表下端追加一行。
2、在报表右端追加一列。
3、合并A3,A4单元格,合并A1,B1,C1单元格,合并B2,C2单元格,合并B3,C3单元格。调整单元格的大小。 设置A4单元格内的左主格为A3。
4、 在B4单元格中输入:订单合计
在C4单元格中输入:=eval(“B4”,B3)。 C4单元格表达式的含义是: B3为嵌入式子报表,取得B3中的子报表中B4的值,这样就相当于主报表引用子报表的数据值并汇总。eval函数说明
如下图所示:
第七步:保存预览
主报表保存为13.2.1.rpx,嵌入式主子报表的预览效果如下图所示:
第八步:发布报表
函数说明:
动态解析并计算表达式
语法:
eval( StringExp )
eval( StringExp, SubRptExp )
eval( StringExp, DataSetExp )
参数说明:
StringExp 待计算的表达式串
SubRptExp 嵌入式子报表对象,一般是含有子报表的单元格
DataSetExp 数据集对象,一般是ds函数
函数示例:
例1:eval( "1+5" ) 返回6
例2:ds1.count( eval("id > 1 and id < 10") ) 返回数据集ds1中id大于1且小于10的记录个数
特殊使用:
例3:eval("B2+10", A1)或eval("B2",A1)+10,其中A1为嵌入式子报表,表示计算A1子报表中的B2+10
例4:eval("salary+100", ds("ds1")),表示计算数据集ds1中salary加100,它与eval("ds1.salary+100")等效
嵌入式子表常用于数据图层单元格中,以实现图片悬浮于表格之上,也就是我们经常看到的图章骑线的效果。
我们以一个简单的例子为例
首先,定义一个子报表
然后,定义一个主表,以嵌入式方式引入子表
然后,选中子表单元格,鼠标右键 - 数据图层,打开数据图层编辑框
设置图层为“前景色”,配置类型为“URL路径”,并在url属性里设置图片路径。
最后,预览效果