一、文章概述

在开始维度建模之前,数据小组需要理解业务需求,以及作为基础的源数据的情况。通过与业务方沟通需要,数据小组找到业务方想要的关键指标、支持数据分析的目标。维度模型不应该由那些不懂业务需求的人来设计,业务方与数据小组人员的协作才是成功的关键。

二、四步维度建模法

维度建模设计期间主要涉及到4个决策:

  1. 选择业务过程
  2. 声明粒度
  3. 确定维度
  4. 确定事实

按照业务过程、粒度、维度和事实声明的流程,数据小组需要确定表名和字段名、示例值和业务规则。

1、选择业务过程

业务过程实际上就是操作的过程,例如,刷新微博,转发微博,点赞微博,每个月的活跃微博用户数等。度量值可以从业务过程的事件中获取,并转化为事实表中的事实。过程的选择非常重要,这是因为过程的定义就确定了粒度、维度、事实的定义。每个业务过程对应着数据仓库总线矩阵中的一行。

  1. 业务过程通常用行为动词表示,因为它们通常代表业务执行的活动。与之相关联的维度描述与每个业务过程事件。
  2. 业务过程通常与某个业务操作相关,例如转发、评论微博。
  3. 获取关键性能指标度量。分析人员需要通过过滤器和约束的不同组合,来审计和评估这些度量。
  4. 业务过程通常由输入和产出输出组成。通常情况下,某个业务过程的输出是其他业务过程的输入。用建模的专业术语描述就是,产生一系列的业务过程事实表。

我们需要把注意力集中在业务过程,而不是功能化的部门,以获取统一一致性的信息。确保一致性的最好方法是一次发布数据。

2、声明粒度

粒度用来确定事实表中的一行表示什么。在确定维度和事实表之前必须声明粒度,因为每个维度和事实必须与定义的粒度保持一致。从给定的业务过程中提取数据时,原子粒度是最细的粒度。建议从关注最原始的粒度开始设计,这样我们就可以针对不同的事实表粒度,建立不同的物理表。切记同一个事实表中不能包含多种不同粒度。

典型的粒度声明如下:

  • 用户刷新一次微博的行为采用一行表示。
  • 用户每发布一次微博的行为采用一行表示。
  • 每个明星每个月发布的微博情况采用一行表示。
  • 每个业务产品页每个月的活跃用户采用一行表示。

维度建模者千万不要忽略声明粒度这一看起来并不起眼的一步。多年来,从对大量维度设计的经验来看,最常见的错误就是在设计之初没有为事实表声明粒度。

3、确定维度

维度表是数仓的灵魂。数据小组的主要工作都要放在数据管理和维度表的开发方面。维度围绕着某一个业务过程所涉及到的“谁、什么、何时、何处、为什么、如何”等背景展开。维度表中包含BI分析需要的各种过滤和分类的描述性属性。牢牢把握事实表粒度,就能将所有可能存在的维度区分开。

4、确定事实

事实涉及来自业务过程事件的度量,基本上是用数值表示。一个事实表行与事实表粒度描述的度量事件是一对一的关系。在事实表中,所有的事实只允许与生命的粒度保持一致。

综合考虑业务用户需求和数据源的实际情况,将4个步骤联系起来。

4.1、事实表分类

  • 计算获得的事实

总利润额就是由销售总额减去成本总额,也称为收入。尽管是通过计算所得,但对所有维度来说,总利润额也是可加的。那么是否应该将计算获得的事实放在事实表中呢?我的建议是将他们放在事实表中。存储计算值就意味着其计算规则和ETL过程中保持一致,进而消除了用户计算错误的可能性。因此,存储总利润额也能确保所有用户与BI报表展示的利润额保持一致。然而,有些不可加的度量值,例如,百分比或比率,则必须由BI工具计算,因为此类计算不能预先计算并存储在事实表中。

  • 不可加事实

利润率可以通过利润总额除以所有成本开销获得。利润率是不可加事实,因为它不能通过任何维度汇总。计算方法是分别记录收入汇总,以及开销汇总,然后作除法计算。

注意:百分比和比率是不可加的。应当将其分子和分母分别存储在事实表中。比率只能通过计算获得,切记是汇总的比率,而非比率的汇总。

单价是另外一种不可加事实。每一笔交易的行的单价通常不会被关注。一般都是通过销售额和销售数量分析平均价格。那么是否需要在事实表中存储不可加事实呢?我的建议是有时候是有必要存储的,例如在报表中展示单独值或者在事实表中应用过滤器。

  • 事务事实表

事务型业务过程是最常见的业务过程,这些业务过程的事实表有如下特征:

  • 原子事务事实表的粒度可在事务环境下进行简单的描述,每个事务一行或每个事务线一行。
  • 由于这些事实表记录的是一个事务事件,而事务之间又是独立的,所以他们通常是比较稀疏的。
  • 事务事实表非常庞大,数据仓库中多数包含数十亿、数百亿行的事实表。
  • 事务事件返回的度量通常是可加的。
  • 事务事实表通常都是多维的。

三、方便扩展的维度模型

维度模型需要对数据关系发生变化时具有灵活的适应性。当发生下面的变化时,不需要改变现有的BI查询应用。

  • 当新增事实与存在的事实表粒度一致时,可以创建新列。
  • 当新增维度和存在的事实表粒度一致时,可以通过添加外键列和维度表的形式添加。
  • 可以在维度表中添加新的字段描述信息。
  • 可以通过在维度表上增加属性,以更细的粒度重置事实表,是事实表更加原子化。

matdem矩阵维度必须一致_「数据仓库篇」Kimball维度建模方案相关推荐

  1. dreamweaver 正则表达式为属性值加上双引号_「前端篇」不再为正则烦恼

    作者:李一二 转发链接:https://mp.weixin.qq.com/s/PmzEbyFQ8FynIlXuUL0H-g 前言 有不少朋友都为写正则而头疼,不过笔者早已不为正则而烦恼了.本文分享一些 ...

  2. python创建工作簿_「总结篇」Python中所有的Excel操作技巧

    Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import xlrd 1.引入xlrd模块 workbook=xlrd ...

  3. 发那科机器人电柜没电怎么回事_「维修篇」发那科FANUC机器人电路板维修步骤及注意事项...

    机器人维修要说比较复杂是的什么,小编相信很多维修人员映入脑海的第一个几乎都是电路板了,电路板因其结构的特殊性,非常复杂也非常精细,在维修过程中通常需要借助专业维修工具才能进行维修.一些非专业维修人员可 ...

  4. canvas换图时候会闪烁_基于Canvas实现的高斯模糊(上)「JS篇」

    作者:iNahoo 转发链接:https://mp.weixin.qq.com/s/5TxPjznpEBku_ybSMBdnfw 目录 基于Canvas实现的高斯模糊(上)「JS篇」本篇 基于Canv ...

  5. python对excel某一列去重-「总结篇」Python中所有的Excel操作技巧

    原标题:「总结篇」Python中所有的Excel操作技巧 Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import ...

  6. php switch 函数,PHP丨PHP基础知识之条件语SWITCH判断「理论篇」

    Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择.以PHP来说,switch(开关语句)常和case break default一起使用 典型结构 switch($control ...

  7. 「实战篇」开源项目docker化运维部署-后端java部署(七)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...

  8. 「GitLab篇」如何用Git平台账号登录建木CI

    介绍 继上一篇博客「Gitee篇」如何用Git平台账号登录建木CI发布后,得到了很多小伙伴们的关注,我趁热打铁推出了如何用Git平台账号登录建木CI 系列的第二篇 「GitLab篇」如何用Git平台账 ...

  9. lgg8配置_LG G8 ThinQ 评测「上手篇」:真小屏旗舰

    原标题:LG G8 ThinQ 评测「上手篇」:真小屏旗舰 --- "你买的是什么手机 ?" --- "买了个 G8 !" --- "什么??&quo ...

最新文章

  1. 10.LeetCode第九题--有效的数独--哈希表的经典应用
  2. 59 Celery架构
  3. Python数据分析与挖掘
  4. spoon kettle连接数据库失败解决方法
  5. 弹性碰撞后速度方向_高三期中考后分析,不得不知道的重难点
  6. 聊聊 HTTP 常见的请求方式
  7. Django web开发系列(五)模板
  8. javascript中打印对象显示[object object]_js如何打印object对象
  9. [靠谱原创!] SSH免密登录设置----原理详解+具体操作(全国人民看完都懂了!)
  10. 职场人,职场事,八卦一下职场那些有意思的公众号
  11. Excel批量生成minitab图表(自动化)
  12. 戴尔电脑,耳机插入无反应解决办法
  13. java多线程贪吃蛇实验报告_JAVA开放性实验报告贪吃蛇
  14. ruoyi增加导入导出
  15. 与亚马逊Amazon Device EDI进行测试都有哪些场景?
  16. 侧扫声纳内业处理--基于HYPACK2018
  17. SSM框架解决QQ邮箱激活535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´及端口25被占用问题
  18. Odbgscript Updated to 1.65.4 by sunbeam
  19. Mifare l射频卡初始值及其相关说明
  20. mybatis里的when和otherwise用法

热门文章

  1. 商城系统PageBean分页 Cookie存储浏览记录
  2. LeetCode:安排工作以达到最大收益【455】
  3. fedora22有时不能启动
  4. 【软件分析与挖掘】An Empirical Study of Bugs in Build Process
  5. NAnt 与 MS Build
  6. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...
  7. Robotframework--随机选取下拉框的字段值进行搜索
  8. HTML文本样式标签
  9. JAVA工具类-StrUtils
  10. 构造函数模式知识的扩展