多源多片交叉报表
教学视频
目标
要实现的效果如下图所示:
实现
1.添加数据集
创建一个空的报表文件,单元格保留四列八行;创建两个关联orders表及sales表的数据集,如下图所示:
两个数据集对应的SQL分别为:
select * from orders
select * from sales
2.绑定字段
将A3、A4单元格合并,将B3、B4单元格合并,在合并后的A3单元格中绑定orders数据集的area字段;在合并后的B3单元格中绑定orders数据集的province字段;并在C3、C4两单元格中填入总额和数量字符串,如下图所示:
在D1、D2单元格中绑定orders数据集的product_type字段和product_category字段,同时选中两单元格,将它们的迭代方向改为向右迭代,如下图:
以上四个单元格绑定的字段数据聚合方式皆为默认的分组方式。
将orders数据集的sale字段和amount字段分别绑定到D3和D4单元格,数据聚合方式都改为求和,如下图:
至此,一个简单的交叉表就做好了,可以预览查看效果,如下图所示:
仔细查看会发现所有的交叉单元格的值存在大量重复,这说明这些交叉值计算出来的结果不正确。不正确的原因是我们没设置交叉单元格的父格。
3.设置父格
对于D3单元格,它的上父格是D2,D2绑定的的orders数据集的product_category字段,这没有问题,但它的左父格是C3,而C3单元格的值是一个静态字符串,这显然是有问题,所以我们需要改将左父格改为B3,也就是那个绑定了orders数据集city字段的单元格。
同时对于D4单元格,也需要将其左父格改为B3,同时还需要将其默认的上父格由D3改为D2才可以。
单元格名称 | 左父格 | 上父格 |
---|---|---|
D3 | B3 | 默认 |
D4 | B3 | D2 |
修改完后的再次预览就可以看到交叉后计算的数据是正确的了,如下图:
4.添加合计
将A5、A6、B5、B6四个单元格合并,并填入静态值合计,同时在C5、C6单元格中分别填入总额和数量字符串;将orders数据集的sale字段和amount字段绑定到D5和D6单元格,并设置它们的聚合方式为求和,如下图:
为了正确显示合计中的总额和数量,还需要设置一个D5、D6单元格的上父格,如下图:
单元格 | 上父格 | 左父格 |
---|---|---|
D5 | D2 | 默认 |
D6 | D2 | 默认 |
保存预览效果如下图:
可以看到合计两行中已正确统计出当前列对应的总额和数量的合计值。
5.添加销售人员信息
将A7、A8两单元格合并,填入静态字符销售人员,同时在C7、C8单元格中分别填入总额和数量字符串;将B7、B8两单元格合并,绑定sales数据集的person字段,并保持默认的分组聚合方式,如下图:
将orders数据集的sale字段和amount字段绑定到D7和D8单元格,并设置它们的聚合方式为求和,同时将它们的上父格都设置为D2,左父格都设置为B7,如下表:
单元格 | 上父格 | 左父格 |
---|---|---|
D7 | D2 | B7 |
D8 | D2 | B7 |
如下图:
为了让sales数据集中关联的销售人员与当前行对应的总额和数量联系起来,我们还需要为D7和D8单元格添加一个过滤条件,让这两个单元格中绑定的数据依赖于B7单元格中绑定的sales数据中对应的area字段。
选中D7单元格,在右侧属性面板中切换到数据过滤页签,添加一个数据过滤条件,如下图:
这里设置的条件时当前单元格绑定的数据area字段与数据集sales中对应的area要相等,因为当前单元格的左父格是B7,B7中绑定的就是sales数据集的person字段,所以引擎会自动匹配B7单元格绑定的数据对应的area的值。点击字符右边的对号图标,保存这个条件。
一定要点击这个对号图标,否则条件将不会被添加进去。
选中D8单元格,也添加一个同样的条件进去,当然我们也可以复制D7单元格中这个条件到D8单元格中,如下图:
保存预览,效果如下图所示:
6.添加交叉斜表头
将A1、A2、B1、B2、C1、C2六个单元格合并,点击工具栏上的图标,添加一个斜表头,内容如下:
产品大类|产品小类|数量|分类信息
效果如下图所示:
保存预览,效果如下:
7.设置行、列锁定
最后,为了查看方便,可以设置一下行列锁定。
选中第三列,点击右键,从弹出的菜单中选择锁定到此列;选中第二行,点击右键,从弹出的菜单中选择锁定到此行,如下图:
保存预览,就可以看到我们需要的效果。
注意:如果内容没有溢出页面,是看不到行、列锁定效果的,可以缩小窗口,或增加列宽、行高达到内容溢出页面目的,这样就会出现滚动条,拖动滚动条就能看到行、列锁定效果。