简介: 作者:王永伟 在Kimball所著的《數据仓库工具箱》一书中对于维度模型类游戏设计采用的4步设计方法:1.选择业务过程 2.声明粒度 3.确定维度 4.确定事实。 在当前的互联网大数據环境下面对复杂的业务场景,为了更有效准确地进行维度模型类游戏建设基于Kimball的4步维度建模方法,我们进行了更进一步的改进
??在Kimball所著的《数据仓库工具箱》一书中,对于维度模型类游戏设计采用的4步设计方法:1.选择业务过程 2.声明粒度 3.确定维度 4.确定事实
在当前嘚互联网大数据环境下,面对复杂的业务场景为了更有效准确地进行维度模型类游戏建设,基于Kimball的4步维度建模方法我们进行了更进一步的改进。
在明确了业务需求以后接下来需要进行详细的需求分析,对业务的整个生命周期进荇分析明确关键的业务步骤,从而选择与需求有关的业务过程
以淘宝的正向订单流转为例:
业务过程通常用行为动词表示,表示业务執行的活动比如图中的淘宝订单流转的业务过程有四个:创建订单、买家付款、卖家发货、买家确认收货。在明确了流程所包含的业务過程后需要根据具体的业务需求来选择与维度建模有关的业务过程。比如选择买家付款这个业务过程;还是选择创建订单和买家付款这兩个业务过程具体根据业务情况来确定。
在选择了业务过程以后相应的事实表类型也随之确定了。比如选择买家付款单个业务过程那么事实表应为只包含买家付款这一个业务过程的单事务型事实表;如果选择的是所有这四个业务过程,并且需要分析各个业务过程之间嘚时间间隔那么所建的事实表应为包含了所有四个业务过程的累积快照型事实表。
粒度的声明是事实表建模非常重要的一步意味着精確定义事实表的每一行表示什么业务含义,粒度传递的是与事实表度量有关的细节层次明确的粒度能确保对事实表中行的意思的理解不會产生混淆,保证所有的事实按照同样的细节层次记录
应该尽量选取最细级别的原子粒度,以确保事实表的应用具有最大的灵活性同時对于订单过程而言,粒度可以被定义为最细的订单级别比如淘宝订单中有父子订单的概念,既一条子订单对应一类商品如果拍下了哆种商品,则每种商品对应一条子订单;这些子订单一同结算的话则会生成一条父订单。那么在这个例子中事实表的粒度应该选择为孓订单级别。
完成粒度声明以后也就意味着确定了主键,对应的维度组合以及相关的维度字段就可以确定了应该选择能够描述清楚业務过程所处的环境的维度信息。比如淘宝的订单付款事务事实表中粒度为子订单,相关的维度信息有买家维度、卖家维度、商品维度、收货人信息、业务类型、订单时间等
事实可以通过回答“过程的度量是什么”来确定。应该选择与业务过程有关所有事实且事实的粒喥要与所声明的事实表粒度一致。事实有可加性、半可加性、非可加性事实需要将不可加事实***为可加的组件。
在淘宝的订单付款事務事实表中同粒度的事实有子订单分摊的支付金额、邮费、优惠金额等。
在传统的维度建模星型模型类游戏中对于维度的处理是需要單独存放在专门的维度表中,通过事实表中外键的方式获取维度这样做的目的是为了减少事实表的维度冗余,从而减少存储消耗而在夶数据的事实表模型类游戏设计中,更多的考虑是提高下游用户的使用效率降低数据获取的复杂性,减少关联的表数量所以通常的事實表中会冗余方便下游用户使用的常用维度,以实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等操作
比如在淘寶订单付款事务事实表中,通常会冗余大量的常用维度字段以及商品的类目、卖家店铺等维度信息。
??更多数仓理论请关注:《大数據之路:阿里巴巴大数据实践 》
版权声明:本文内容由阿里云实名注册用户自发贡献版权归原作者所有,阿里云开发者社区不拥有其著莋权亦不承担相应法律责任。具体规则请查看《》和《》如果您发现本社区中有涉嫌抄袭的内容,填写进行举报一经查实,本社区將立刻删除涉嫌侵权内容