报表样例
通过本示例,了解如何通过人为改变单元格的主格实现报表的多片扩展。
制作如下图所示的多片扩展报表:
报表特点
- 一片区域的单元格扩展为多片进行展现。
- 每一片区域中的报表内容为主子表的形式,主表数据来自一个数据集,子表数据来自另一个数据集,并且主表数据记录与子表数据记录之间是一对多的关系。
制作方法
第一步 定义数据集
报表中的第一个数据集ds1是从产品自带演示数据库的“演示 _ 订单表”取数,数据集sql语法如下:
报表中的第二个数据集ds2是从产品自带演示数据库的“演示 _ 订单明细表”取数,数据集sql语法如下:
第二步 制作表样
绘制出报表基本结构:
第三步 定义单元格表达式
1)设置主表部分的单元格表达式。
选择单元格快捷公式中的【列表】,将数据集ds1中的字段“订单ID”拖入B2单元格,然后再选择快捷公式中的【取值】,将数据集ds1中的其余字段分别拖入主表其它对应的单元格中,例如拖入字段“发货日期”到D2,拖入字段“客户ID”到B4。
拖拽完成后,取数表达式如下: B2:
=ds1.Select(订单ID)
D2:=ds1.发货日期
F2:=ds1.到货日期
B4:=ds1.客户ID
F4:=ds1.货主名称
B6:=ds1.运货商ID
D6:=ds1.运货费
F6:=ds1.货主城市
2)设置子表部分的单元格表达式。
B9单元格是需要从数据集ds2中订单ID与B2单元格的值相等的记录里选出字段“产品ID”的全部值并按照升序列表显示,设置表达式为=ds2.Select(产品ID,false,订单ID==B2)
选择单元格快捷公式向导的“取值”,将数据集ds2中的字段“单价”、“折扣比例”、“数量”依次拖入单元格C9、D9、E9,生成的表达式依次为:
C9:=ds2.单价
D9:=ds2.折扣比例
F9:=ds2.数量
F9单元格表达式引用前面的C9、E9单元格的值进行计算,设置表达式为=C9*E9
。
第四步 设置主格
设置单元格A1、A2、A3、A4、A5、A6、A7、A8、A9、A10跟随B2向下扩展,如下图:
即它们的左主格为B2。
第五步 设置显示格式
设置单元格D2、F2的显示格式为“yyyy/MM/dd”。
第六步 设置行后分页
选中A10单元格,在右侧属性栏中,勾选【分页】下的【行后分页】,实现打印时每张订单单独打印。如下图所示:
第七步 保存预览
点击预览按钮,再弹出的保存页面设置资源名称、文件名称均为“客户订单表”。 预览页面如下图所示:
功能点说明
主格认定规则与人为设置主格
当存在单元格扩展时,就涉及主子格的关系,主格的认定规则默认如下:
单元格横向扩展时,上方横向扩展单元格缺省为它的上主格,下方单元格缺省为它的附属格;如果上方没有横向扩展格,则上主格缺省为 `0 格。
单元格纵向扩展时,左边纵向扩展单元格缺省为它的左主格,右边单元格缺省为它的附属格;如果左边没有纵向扩展格,则左主格缺省为 `0 格。
除了遵循默认的主格认定规则,我们也可以人为的设置改变单元格的主格,从而实现灵活的报表扩展方式。例如上面的示例报表中,A1-A10一共十个单元格左边都没有纵向扩展个,因此其左主格缺省为`0 格。然后我们对这些单元格人为设置了左主格为B2,让这些格子都跟随B2格的订单ID进行纵向扩展,所以就形成了按照每个订单ID号都能扩展出一片主子表的报表效果,最终形成了示例中的多片扩展。
Select()函数
B9单元格的表达式为:=ds2.Select(产品ID,false,订单ID==B2)
这里是利用Select()函数可以设置数据过滤条件表达式,来实现子表区域B9单元格数据与主表区域B2单元格数据之间的关联,即B9单元格只列表显示B2订单所销售的产品ID。如果不设置上面的“订单ID==B2”条件表达式,则B9单元格会显示出全部订单所销售的产品ID,无法实现主子表之间数据的关联运算。读者可以尝试去掉表达式中第三个参数(即条件表达式,注意连同前面的逗号也一起去掉),来看一下报表展现的结果会如何。