尝试做一份多数据源的销售报表
概述
本文将详细介绍“多视图关联”功能及其配置使用方法。我们将通过一个具体的多视图属性案例来展示如何有效实践。
本教程所使用的案例数据集如下:产品培训演示数据集2023.xlsx
应用场景
当用户需要在报表中展示多个视图中的字段,而这些视图来自不同的数据库表,且这些表之间存在数据关系(也就是有共同的字段),就需要用到多视图关联的功能。
功能介绍
多视图关联就是将多个视图通过相同的字段关联起来,供用户在多数据源的报表场景下使用。支持左外连接(left join)、内连接(inner join)两种关联方式,默认左外连接。
-
左外连接:以左表为主表,返回左表所有行,和右表中关联字段相等的记录。
-
内连接:返回两个表中关联字段相等的数据行。
关联效果:
关联字段:省份
将关联后的结果表定义为虚拟视图,一个虚拟视图下最多支持 5 张表的关联。
-
创建关联过程中,允许不同虚拟视图重复引用原视图。(6.0之前版本不允许重复引用原视图)
-
创建关联后,虚拟视图和原视图数据隔离,均可独立使用。(6.0之前版本不可独立使用)
案例效果
2个视图:
【累计】计算大区、省份的年累计销售额;
【月度】计算大区、省份每季度每个月的销售金额。
两个视图共同字段为大区、省份,报表左侧表头的大区和省份,YTD指标不受季度筛选影响。
实现思路
-
两个视图的维度不一样,行数差别大,用户一般会选择颗粒度更细、行数更多的视图作为关联主表。但实际上,两个视图的共同主键、报表的左表头为「大区」和「省份」,那么就应该选择这2个主键数据更齐全的视图作为主表。
-
视图【月度】要联动季度筛选器,如果缩小日期范围后,「大区」和「省份」会变化,即某些省份某个时间段没有销售数据,那么这个视图就不适合作为关联主表。视图【累计】里包含了全年的数据,不受日期筛选器影响,在本案例里更适合当做关联主表。
-
两个视图左关联,左表维度只有2个,行数比右表少,关联后左表的数值字段(YTD三个字段)会被重复填充到关联后的行,那么如果使用默认的聚合方式求和sum,结果就是错误的,所以需要去掉sum。
注意:关联后数据行数可能会发生变化,用户需要对关联前和关联后的行数提前预估,以免超过2万行的显示限制导致数据不全。
操作步骤
1. 设置多视图关联,勾选需要的字段,对重名字段、关联后的虚拟视图重命名。
2. 使用关联后的虚拟视图制作动态扩展表头。
3. 填充数值指标,设置父格。
注意:
非必要不使用多视图,尽量都在数据处理时ETL阶段关联好。
多视图关联时,6.0及更新版本重名字段支持重命名后使用;6.0之前版本,非主键字段避免重名,重名时返回左表数据。
视图关联时,要确保各视图都已经聚合到合适的维度和颗粒度,尽量选用主键齐全的视图作为主表(左侧第一个视图),并且选择正确的关联字段,以免关联后数据膨胀或者数据缺失。
数据不合理膨胀示例:
-
上文案例里月销售数据只有一年的数据,如果想再关联一个视图【去年月汇总】,用于计算月销售金额的年同比,按照下图方式关联,数据会出现不合理膨胀。
-
因为【累计】左关联【月度】后,虚拟视图的主键从「省份」1个变成了「省份」、「月」2个,【去年月汇总】主键为「省份」、「月」,但是关联只关联了「省份」一个字段,出现一对多对应关系,出现数据不合理膨胀。
-
如果一个省一年有12行数据,那么用这种方式关联后每个省最多会有12*12=144行数据。
建议关联方式:
【月度】和【去年月汇总】左关联。