21.3 交叉图表最佳实践
3.1 交叉表数据模型
交叉表数据模型是冗余数据模型的一个特殊情况,是冗余数据模型应用于交叉报表的产物,与普通的冗余数据模型略有不同,是其应用于交叉报表的产物,也是比较常见的一种多系列图表数据模型,例子如下所示,
其中,红色方框部分数据是分类数据,是通过对城市字段进行分组纵向扩展得到的;橙色方框部分数据是系列名称,是通过对学历字段进行分组横行扩展得到的;蓝色方框部分数据是数据。这种数据模型我们称之为交叉表数据模型。
3.2 多系列柱图定义-交叉表数据模型
首先定义数据集,利用定义好的数据集,制作交叉表,如下图所示,
预览报表结果,如下图所示
如上图所示,我们希望使用产品类别cell(‘b1’)作为分类轴,地区cell(‘a2’)作为系列名称,数据值是销售额cell(‘b2’),制作多系列柱图。由于地区cell(‘a2’)、类别cell(‘b1’)的数据已经进行了分组、去重,所以地区单元格扩展出来的数据个数为7个、类别单元格扩展出来的数据个数为8,不等于数据值销售额的个数56。这就是交叉表数据模型与列表数据模型、冗余数据模型最大的不同点,所以不能按照上述两种数据绑定方式来制作多系列柱图。
下面先来介绍一个公式CrossTabDataFunc。
CrossTabDataFunc(row_collection, column_collection, value_collection, count)
公式说明:
新图表的数据来自交叉表时,需要使用该公式,该公式具有4个参数,第一个参数为横向扩展单元格,第二个参数为纵向扩展单元格,第三个参数为数据单元格,最后一个参数为整型数据,只能输入1,2,3三个值。
其中,该公式会将前两个集合数据进行扩展,使得扩展后的集合元素个数与三个集合元素个数相同,最后根据最后一个参数决定返回第几个集合数据。
【注】:该公式希望第一个集合参数中没有重复数据,若存在重复数据,该公式会为重复数据自动加上标识用来区分;同理第二个参数也会做同样处理。
样例讲解:
CrossTabDataFunc(list(’A’,’B’),list(’a’,’b’),list(1,2,3,4),count)
第一个集合扩展后为{’A’,’B’,’A’,’B’}、第二个参数扩展后为{’a’,’a’,’b,’b’},第三个参数不需要扩展{1,2,3,4};
若最后一个参数count为1,则返回第一个参数集合,{’A’,’B’,’A’,’B’}.
若最后一个参数count为2,则返回第二个参数集合,{’a’,’a’,’b,’b’}
若最后一个参数count为3,则返回第三个参数集合,{1,2,3,4}.
公式的约束:
前两个集合参数的元素个数的乘积,必须等于第三个集合参数的元素个数。若不满足此条件,公式会抛出异常。
下面,当数据符合交叉表数据模型时,利用上述介绍的crossTabDataFunc公式定义多系列柱图的数据绑定如下所示
其中公式填写如下:
销售额 = CrossTabDataFunc(cell('b1'), cell('a2'), cell('b2'), 3)
产品类别 = CrossTabDataFunc(cell('b1'), cell('a2'), cell('b2'), 1)
地区 = CrossTabDataFunc(cell('b1'), cell('a2'), cell('b2'), 2)
然后预览报表,如下图所示