分片是指报表的纵向或横向或双向同时被分成了多个区域,每个区域独立扩展或者其中一个扩展区域为另一个扩展区域的子扩展区域,也可能是扩展区域和静态区域的混合。

报表样例

通过本示例,可以了解多源分片报表的相关概念以及制作方法。

上节的“多层交叉扩展”报表的基础上做一些改变,在报表下方增加一个纵向扩展格,预览结果如下: 纵向分片报表 - 图1

报表特点

  • 报表的数据来源于多个数据集,即属于多源报表,例如上图示例报表中,整个上半片无背景色区域的数据全部来自一个数据集,而下半片有背景色区域的行表头数据来自另一个数据集,但交叉单元格数据来源同上半片区域。
  • 报表在纵向上可以划分成两片独立的扩展区域,例如上图示例报表的行表头中,上半部分按照一个数据集的年份、月份字段进行分组扩展的是一片区域,下半部分按照另一个数据集的销售职务、销售人员字段分组扩展的是另一片区域。
  • 两片纵向上看似独立扩展的行表头,共用同一个列表头,并且下半片区域交叉单元格的汇总值,需要将根据行、列表头进行关联计算。

制作方法

第一步 打开报表

将上节中的“多层交叉扩展报表”另存为“纵向分片报表”,点击【修改】按钮,打开“纵向分片报表”。 纵向分片报表 - 图2

第二步 定义数据集

报表中的数据一共来源于两个数据集。

第一个数据集ds1从产品自带演示数据库中的“演示订单表”和“演示订单明细表”取数,与报表示例【多层交叉扩展】中的差别是,数据集中增加了一个“演示_订单表”的“雇员ID”字段,数据集sql语法如下:

纵向分片报表 - 图3

第二个数据集ds2从产品自带演示数据库中的“演示雇员表”取数,点击【添加数据集】,在新增数据集页面选择【复杂SQL】,在SQL编辑器里输入SQL语句,保存为“ds2”。SQL语法为:select 雇员ID,职务,姓氏+名字 as 雇员姓名 from demo employee

纵向分片报表 - 图4

第三步 定义分片2单元格表达式

A5单元格表达式为:=ds2.Group(职务,false) B5单元格表达式为:=ds2.Group(雇员ID,false) C5单元格表达式为:=ds1.sum(销售额,雇员ID==B5)

纵向分片报表 - 图5

第四步 设置显示值

选中B5单元格,在右侧属性栏的显示值表达式窗口输入表达式:ds2.select1(雇员姓名,雇员ID==value())

纵向分片报表 - 图6

第五步 保存预览

点击预览按钮,保存并预览报表。

预览界面: 纵向分片报表 - 图7

功能点说明

多源、分片与关联

多源是指一个报表的数据来源有多个。这里的“多个”不只是两个三个,有时甚至是七八个乃至十几个。例如本示例中的报表,数据来自两个数据集。多源往往带来分片,正是由于分片,使得报表设计必须直接基于多源进行,而不能先将多源转成单源进行。有相当一部分分片报表无论如何也不可能转化成单源处理,部分能转成单源的报表处理也非常繁琐。

分片是指报表被分成了多个区域,每个区域独立扩展或者其中一个扩展区域为另一个扩展区域的子扩展区域,也可能是扩展区域和静态区域的混合。例如本示例报表中,存在上下两片独立扩展的行表头(即左表头)。

关联是指报表不同区域的数据存在着关联,并且不同区域之间的数据需要进行关联统计运算。例如本示例报表中,C5单元格是求出数据集ds1的“销售额”字段的汇总值,但是计算时需要同时与上表头和左表头中的数据关联。其中左表头的数据还是来源于另一个数据集ds2。

Sum()

C5单元格中设置的表达式为:=ds1.Sum(销售额,雇员ID==B5),它的结果是在数据集ds1中找出雇员ID与单元格B5扩展出来的格子数据相等的全部记录,然后求出这些记录的销售额汇总值。

这里是利用了Sum函数可以设置条件表达式,来实现C5单元格数据与左表头B5单元格的关联。同时,由于C5单元格是对数据集ds1进行计算,而上表头的C2、C3单元格也是对数据集ds1的因此,C5也与上表头进行了关联。这样族中就实现了上下两个分片间数据的关联运算。