马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 168主编 于 2019-5-15 16:23 编辑
一、文章概述 在开始维度建模之前,数据小组需要理解业务需求,以及作为基础的源数据的情况。通过与业务方沟通需要,数据小组找到业务方想要的关键指标、支持数据分析的目标。维度模型不应该由那些不懂业务需求的人来设计,业务方与数据小组人员的协作才是成功的关键。
二、四步维度建模法
维度建模设计期间主要涉及到4个决策:
按照业务过程、粒度、维度和事实声明的流程,数据小组需要确定表名和字段名、示例值和业务规则。
1、选择业务过程 业务过程实际上就是操作的过程,例如,刷新微博,转发微博,点赞微博,每个月的活跃微博用户数等。度量值可以从业务过程的事件中获取,并转化为事实表中的事实。过程的选择非常重要,这是因为过程的定义就确定了粒度、维度、事实的定义。每个业务过程对应着数据仓库总线矩阵中的一行。 业务过程通常用行为动词表示,因为它们通常代表业务执行的活动。与之相关联的维度描述与每个业务过程事件。 业务过程通常与某个业务操作相关,例如转发、评论微博。 获取关键性能指标度量。分析人员需要通过过滤器和约束的不同组合,来审计和评估这些度量。 业务过程通常由输入和产出输出组成。通常情况下,某个业务过程的输出是其他业务过程的输入。用建模的专业术语描述就是,产生一系列的业务过程事实表。
我们需要把注意力集中在业务过程,而不是功能化的部门,以获取统一一致性的信息。确保一致性的最好方法是一次发布数据。
2、声明粒度 粒度用来确定事实表中的一行表示什么。在确定维度和事实表之前必须声明粒度,因为每个维度和事实必须与定义的粒度保持一致。从给定的业务过程中提取数据时,原子粒度是最细的粒度。建议从关注最原始的粒度开始设计,这样我们就可以针对不同的事实表粒度,建立不同的物理表。切记同一个事实表中不能包含多种不同粒度。
典型的粒度声明如下:
用户刷新一次微博的行为采用一行表示。 用户每发布一次微博的行为采用一行表示。 每个明星每个月发布的微博情况采用一行表示。 每个业务产品页每个月的活跃用户采用一行表示。
维度建模者千万不要忽略声明粒度这一看起来并不起眼的一步。多年来,从对大量维度设计的经验来看,最常见的错误就是在设计之初没有为事实表声明粒度。
3、确定维度 维度表是数仓的灵魂。数据小组的主要工作都要放在数据管理和维度表的开发方面。维度围绕着某一个业务过程所涉及到的“谁、什么、何时、何处、为什么、如何”等背景展开。维度表中包含BI分析需要的各种过滤和分类的描述性属性。牢牢把握事实表粒度,就能将所有可能存在的维度区分开。
4、确定事实 事实涉及来自业务过程事件的度量,基本上是用数值表示。一个事实表行与事实表粒度描述的度量事件是一对一的关系。在事实表中,所有的事实只允许与生命的粒度保持一致。
综合考虑业务用户需求和数据源的实际情况,将4个步骤联系起来。 4.1、事实表分类 总利润额就是由销售总额减去成本总额,也称为收入。尽管是通过计算所得,但对所有维度来说,总利润额也是可加的。那么是否应该将计算获得的事实放在事实表中呢?我的建议是将他们放在事实表中。存储计算值就意味着其计算规则和ETL过程中保持一致,进而消除了用户计算错误的可能性。因此,存储总利润额也能确保所有用户与BI报表展示的利润额保持一致。然而,有些不可加的度量值,例如,百分比或比率,则必须由BI工具计算,因为此类计算不能预先计算并存储在事实表中。
利润率可以通过利润总额除以所有成本开销获得。利润率是不可加事实,因为它不能通过任何维度汇总。计算方法是分别记录收入汇总,以及开销汇总,然后作除法计算。
注意:百分比和比率是不可加的。应当将其分子和分母分别存储在事实表中。比率只能通过计算获得,切记是汇总的比率,而非比率的汇总。
单价是另外一种不可加事实。每一笔交易的行的单价通常不会被关注。一般都是通过销售额和销售数量分析平均价格。那么是否需要在事实表中存储不可加事实呢?我的建议是有时候是有必要存储的,例如在报表中展示单独值或者在事实表中应用过滤器。
事务型业务过程是最常见的业务过程,这些业务过程的事实表有如下特征: 原子事务事实表的粒度可在事务环境下进行简单的描述,每个事务一行或每个事务线一行。 由于这些事实表记录的是一个事务事件,而事务之间又是独立的,所以他们通常是比较稀疏的。 事务事实表非常庞大,数据仓库中多数包含数十亿、数百亿行的事实表。 事务事件返回的度量通常是可加的。 事务事实表通常都是多维的。
三、方便扩展的维度模型
维度模型需要对数据关系发生变化时具有灵活的适应性。当发生下面的变化时,不需要改变现有的BI查询应用。
当新增事实与存在的事实表粒度一致时,可以创建新列。 当新增维度和存在的事实表粒度一致时,可以通过添加外键列和维度表的形式添加。 可以在维度表中添加新的字段描述信息。 可以通过在维度表上增加属性,以更细的粒度重置事实表,是事实表更加原子化。
作者:清和 来源:大数据漫路求索 |