业务数据中经常有主从表结构的数据,典型是订单头与订单行。为了实现订单批量打印,就需要设计一种主从结构的表格式报表。如下图:
其中:表格之外的部分是订单头信息,包括订单编号、客户信息等;表格部分是订单行信息。
原始的订单头数据和订单行数据如下图:
设计这种主从结构报表的基本思路:
- 表格1,绑定订单头数据集。
- 表格2,绑定订单行数据集。
- 表格1中删除表头和表尾,添加多个明细行。最末明细行合并为一个单一单元格。
- 表格2嵌套在表格1末行那个合并单元格中。
- 表格2设置关联条件,即子表与主表之间的字段关联关系。
详细的设计操作步骤如下:
(1)定义主表的数据集,即订单头信息。
- 查询语句:
select O.\* from 订单 O order by 订单ID
- 数据集字段列表如下图:
(2)定义从表数据集,即订单行信息。
- 查询语句:
select D.\*, P.产品名称 from 订单明细 D inner join 产品 P on
D.产品ID=P.产品ID order by 订单ID
其中的JOIN是为了抓取【产品名称】信息,因为订单行数据表中只有【产品ID】字段,没有名称字段。
- 字段列表如下图:
(3)拖放表格1至设计区,右键点击明细行(表格第二行)单元格,选择【行操作】-【在下方插入行】,添加多个明细行。上面几个明细行中绑定订单头数据集的【订单ID】、【客户ID】等字段。最下面的明细行设置单元格合并,并且设置高度为正常高度的3倍,作为子表格的容器。如下图:
(5)拖放表格2至设计区,绑定订单明细数据集,设置每个单元格的绑定字段。添加金额列,设置表达式为:=Fields!数量.Value * Fields!单价.Value。在汇总行设置单元格合并和合计金额表达式:=sum(Fields!数量.Value * Fields!单价.Value)。如下图:
(6)将表格2剪切到表格1的那个3倍行高的单元格中。
方法是:选中表格2,按Ctrl-X,点击表格1那个3倍行高的合并单元格,然后按Ctrl-V。
这种先在设计区设计好表格2,再剪切到表格1的操作,是为了方便表格2的各种操作。实际上也可以直接将表格2拖放到表格1的那个3倍行高的合并单元格中。
表格嵌套结果如下图:
(7)选中表格2,设置其【数据选项】中的【数据过滤】,如下图:
其中,【过滤条件】选中订单明细数据集的【订单ID】字段,【运算符】选【等于】,【数据】选择订单头数据集的【订单ID】字段。
这个设置的目的是让嵌套在主表格中的子表格(即表格2)只显示主表格当前订单ID的订单行信息。
(9)预览报表,效果如下图: