上一篇提及了在BI里面,常用维度建模。本篇结合FineBI重点聊聊集合运算。
维度建模和集合运算是两个不同领域的概念,但在数据分析中常常同时出现,有一定的关联性。
他们的关系是:
维度建模时,数据操作和查询过程中常常会应用集合运算来处理和整合数据集。
最主要的区别:
维度建模主要关注数据模型的构建和维护,提供了对数据进行切片和分析的维度标准;而集合运算则强调对数据集合进行运算和操作,用于数据的筛选、合并、分割等。
举个栗子:
假设我们有一个包含销售订单数据的数据包,包括了维度表(例如产品维度、会员维度、门店维度)和事实表(例如销售数量、销售额等)。
在这个场景中,维度建模用于构建数据模型,以便于对销售数据进行分析和报告。
首先,维度建模通过设计和关联维度表和事实表,将销售数据进行整合。例如,通过与产品维度表的关联,可以获取每个产品的销售数量和销售额。通过与会员维度表的关联,可以对不同的会员进行销售贡献分析。通过与地区维度表的关联,可以获取不同地区的销售数据。
然后,在使用维度建模进行数据分析和报告时,常常需要进行数据筛选和操作。这时,集合运算就可以发挥作用。例如,会员分析中,通过运用集合运算中的交集操作,可以筛选出同时在两家门店均有交易的会员有哪些;通过并集操作,可以合并多个不同门店交易的会员进行总体分析;通过差集操作,可以找出未在指定门店交易的会员有哪些。
数据处理整合,概括来说只有两类,即上下合并 和 左右合并。前者多用于多组数据的上下追加合并,后者重点针对不同类型的数据,通过关联依据,将其连接到一起,可以理解为横向合并,这种连接数据的方式可以延伸出交并差运算。
从FineBI的界面可以看出,合并方式展示了常见的4种:
左合并、右合并、交集合并、并集合并
这四种基本合并方式,可以满足大部分的连接运算需求,少数的复杂业务需求需要使用差集运算(交集或并集后,再做减法)
下面举例展示:
表A:
打开FineBI6.0,在tab【我的分析】中新建分析主题。
数据导入:弹出【选择数据】框,将表A和表B数据导入
需求1:求在SZ01和DS07两家门店均有交易的会员是哪些?
思路:SZ01和DS07交易会员的交集
在FineBI中,我们通过自助数据集来更直观的呈现:
1.1 数据集①:表A不做处理
1.2 数据集②:用表B合并表A,合并依据为“会员id”,合并方式选择“交集合并”
需求2:求在SZ01和DS07两家门店有过交易的会员是哪些?
思路:SZ01和DS07交易会员的并集
2.1 数据集①:表A不做处理
2.2 数据集②:用表B合并表A,合并依据为“会员id”,合并方式选择“并集合并”
需求3:求仅在SZ01门店有过交易的会员是哪些?
思路:求差集,SZ01交易会员 剔除 DS07交易会员
3.1 数据集①:表A不做处理
3.2 数据集②:用表B合并表A,合并依据为“会员id”,合并方式选择“右合并”
3.3 过滤表B中“下单门店”为空的行
需求4:求仅在SZ01门店以及仅在DS07有过交易的会员是哪些?
思路:求差集,SZ01和DS07交易会员的并集 剔除 SZ01和DS07交易会员的交集
4.1 数据集①:表A不做处理
4.2 数据集②:用表B合并表A,合并依据为“会员id”,合并方式选择“并集合并”
4.3 过滤表B中“下单门店”为空的行 或者 表A中“下单门店1”为空的行
小结
左右合并与集合运算的交并差相互关联。
需要注意的是,BI在数据集里面的合并,都是行级别的合并,所以在合并的时候,「合并依据」字段需要特别注意,1:1或者1:N的合并不会导致数据膨胀,但是N:N的合并(即「合并依据」字段存在重复值)会进行笛卡尔运算,导致数据膨胀。BI会自动检测「合并依据」是否重复,并给出提示。若确实需要笛卡尔来实现某种业务场景的计算,请注意膨胀系数不要超过5,否则为了不影响系统的稳定性,BI会主动打断更新。
另外需要注意的一点就是「合并依据」出现NULL时,NULL之间不互相匹配。
其实「合并依据」出现NULL是非常不严谨的,我们要尽量避免。若实在无法避免,且需要对它们进行匹配,需要对其进行特殊处理,比如:单独赋值。
好了,今天就酱紫,回见~
|