目录

嵌入式主子报表

嵌入式主子报表

嵌入式主子报表的特点是在单元格中嵌入子报表,形成格中嵌表的模式,子报表和母报表的格线可以不对齐,子表间格线也不对齐。

嵌入式的子报表扩展后,是个独立的报表,因此子表源格一直保留着,母报表可以访问子报表的值。

第一步:打开设计器

第二步: 连接数据源

第三步:新建空白报表

第四步:定义数据集

母报表数据集:ds1:SELECT 客户.客户ID,客户.联系人姓名 FROM 客户

子报表数据集:ds1:SELECT 订单.订购日期,订单.订单ID,客户.联系人姓名,客户.客户ID FROM 客户,订单 WHERE 客户.客户ID=订单.客户ID and year(订购日期) between 1997 and 2000

第五步:定义表达式

母报表:


1,在A3单元格输入表达式:= ds1.select(客户ID,false)    设置显示值为:ds1.select1(联系人姓名,客户ID==value())

2,在B3单元格上点右键,在下拉菜单中选择【子报表】,如下图所示做相应设置:


3,点击【定义子报表】按钮,弹出”报表属性”窗口,在这里我们增加一个子报表,再点【确定】按钮完成,如图所示: 


4,在“请选择子报表”下拉框中选择我们刚才定义的子报表”rpt1”,并将【引入方式】设为”嵌入式”,同时增加子报表参数,对应值表达式为:=A3,设置完成点【确定】按钮。

  • 这里的相对路径是指”应用资源路径”,在开始菜单的【配置】->【选项】中,如图:


    子报表


    1,在B1单元格输入表达式:= ds1.group(year(订购日期),false,客户ID==@arg1)   设置显示值为:map(list(to(1997,2000)),list('1997年','1998年','1999年','2000年')) 

    2,在B2单元格输入表达式:= ds1.group(month(订购日期),false)设置显示值为:map(list(to(1 , 12)),list("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"))

    3,在B3单元格输入表达式:=ds1.count()

    第六步:美化外观

    第七步:保存预览

    母报表保存为9.2.raq,子报表保存为9.2_sub.raq,嵌入式主子报表的预览效果如下图所示:


    第八步:发布报表


    对于嵌入式主子报表,母报表里可以获得子报表特定单元格的值,办法是通过调用eval函数来实现。下面我们在9.2.raq嵌入式主子报表的基础上讲解如何在母表中引用子表特定单元格的值。

    第一步:打开设计器

    第二步:连接数据源

    第三步:打开子报表

    打开报表9.2_sub.raq,如下图所示 


    第四步:修改子报表

    1、在报表下端追加一行。

    在A4单元格中输入:订单合计,在B4单元格中输入:=sum(B3{})。选中B4单元格,展开右边属性列表中的“扩展”,把B4的上主格设为`0,这样可以使B4单元格汇总的是B1扩展出来的所有年份的订单合计。选中第四行,将第四行的可视属性的打勾去掉,即 ,这样预览时就不会显示第四行了。将第四行设为不可见,而不是删除,因为母报表将引用B4单元格的值。

    如下图所示:


    2、保存报表为9.2.1_sub.raq

    第五步:打开母报表打开报表9.2.raq,如下图所示


    第六步:修改母报表

    1、在报表下端追加一行。

    2、在报表右端追加一列。

    3、合并A3,A4单元格,合并A1,B1,C1单元格,合并B2,C2单元格,合并B3,C3单元格。调整单元格的大小。

    4、在B4单元格中输入:订单合计,在C4单元格中输入:=eval(“B4”,B3)。 C4单元格表达式的含义是: B3为嵌入式子报表,取得B3中的子报表中B4的值,这样就相当于母报表引用子报表的数据值并汇总。

    如下图所示:


    第七步:保存预览

    母报表保存为9.2.1.raq,嵌入式主子报表的预览效果如下图所示:


    第八步:发布报表 


    eval函数说明:

    函数说明: 动态解析并计算表达式

    语法: 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属性里设置图片路径。

    最后,预览效果