数据仓库系列文章二:浅谈企业数据仓库总线矩阵

article/2025/8/17 0:30:27

Kinball在《数据仓库工具箱》一书中,详细阐述维度建模思想,并给出维度建模的众多实践。维度建模的核心内容和建设过程在实践中已经被大家所熟知,网上教程也很多,本文不做赘述。本文重点谈一谈企业数据仓库总线矩阵。

企业数据仓库总线矩阵,又称为“总线矩阵”、“业务矩阵”,是Kinball在《数据仓库工具箱》一书中提出的,指导维度模型建设的规划性文件。

为什么要谈企业数据仓库总线矩阵,一方面是它在数仓建设中非常重要,是纲领性的文件,是数仓最重要的文档交付物(Kinball认为是最重要的交付物之一,我认为可以把“之一”去掉);另一方面,实际工作中发现很少有人提到总线矩阵更谈不上在工作中规划这份文件,更多是直接上手开发后期不停维护的节奏,希望这篇文章能让更多人了解和实践起来。

什么是企业数据仓库总线矩阵

先看示例,一家商品零售商的业务矩阵:

 图片来源于《数据仓库工具箱》一书。

总线矩阵包含业务过程、公共一致性维度。每行代表一个业务过程,每列表示一个公共维度,还包括业务过程与维度间的联系,图中每个叉号表示该业务过程与维度具有关联关系,也就是我们通常说的外键。

还可进一步扩展业务矩阵,加入主题划分和业务过程包含的度量值。如下图,某智能制造工厂业务矩阵:

主题               维度

业务过程
工厂产线项目物料日期班次度量
生产生产计划件数
实际生产件数
设备停机次数/时长

该工厂总线矩阵划分为生产、供应链、财务等主题,每个主题对应不同的业务过程,相互间不重叠。如生产主题中,包括生产计划、实际生产和设备停机等业务过程。

总线矩阵每个列代表维度,如:工厂、产线、物料等维度,这些维度将全局共享。

总线矩阵中每个√(也可用×表示)符合表示该业务过程同该维度关联,比如设备停机事件,相关的维度有设备所在工厂、所属产线、停产日期与停产班次。而设备和项目与物料并无直接关系,体现在总线矩阵中没有用√关联。

度量是该业务过程中包含的事实,如设备停机中次数和时长都是描述该业务过程的度量值。

如何编写业务矩阵

业务矩阵不是代码,但也不是纯文档性质,完成业务矩阵的过程中,也需要完成开发代码前期的许多准备工作。

首先完成横向,即主题域划分,业务过程的确立。主题域是一种对数据的抽象,通过将联系较为紧密的数据划分为同一主题,方便寻找和使用数据。比如,智能制造工厂中,我们将数仓划分为:生产、财务、人力、供应链、交付等主题,每个主题下包含不同的业务过程。如生产主题下包括生产计划、实际生产、设备停机等业务。通常是先确定业务过程有哪些,再按照某个规则将相关的业务划分为同一主题,常用的规则有:按业务相关性、按需求方、按应用划分等。也可以划分为多级主题,比如先按照部门划分一级主题,再按业务划分二级主题。主题域的划分没有对错,根据实际情况进行划分,让数据归纳更清晰,更好找易用,就是好的主题划分。划分主题域时,可参考这些规则:数量不能太多,建议不超过10个;不同主题间无重叠业务过程;具有一定前瞻性,既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中或扩展新的数据域。

其次完成纵向列,即公共一致性维度的划分以及度量值的确定。维度是我们看世界的角度,度量则是形容指标的水平,他们都是指标的重要组成。比如有个指标:“四月交付2000辆车”,“四月”和“车”是维度,“2000”是度量值,“辆”则是度量单位,维度和度量组合在一起形成月度指标。如果没有维度,“交付2000辆”则啥也代表不了。

维度的划分具有行业共同性,比如电商行业通常涉及这些维度:买家、卖家、订单、广告、货运、支付等,智能工厂中:设备、产线、工站、项目、物料、供应商等,还有一些跨行业通用的维度,如城市、日期等。维度的一致性是数据一致性的重中之重,总线矩阵是一致性维度建设的重要文件。我的观点是从讨论总线矩阵的那刻开始,数仓数据一致性问题就解决了一半。

总线矩阵中的度量通常是原子指标,指业务过程中最基本的原子指标。比如生成计划业务过程中,度量是“件数”,设备停机事件中,度量为“停机时长”。总线矩阵中描述的度量,能够给分析人员直观的了解目前数据具备的分析能力。

最后是确定业务过程同维度间的关联关系。应该分析每个业务过程,尽可能多的关联维度与业务过程,而不仅仅是当前需求需要哪些维度,否则就陷入了面向需求开发的陷阱。

业务矩阵编写完成后,应组织多方参与评审,包括业务方、分析人员、架构师、产品经理等,以确定业务矩阵的最终版本。

优点

总线矩阵是数仓建设的纲领性文件,不论是从零开始一个项目,还是中途接手一个项目,总线矩阵总是最好的切入点。

总线矩阵有利于主数据管理。核心维度由数据管理责任人定义,在多个业务过程中使用,而不是被单一业务过程或部门定义,提供一致性维度,实现跨业务过程钻取的需求。总线矩阵列表示整个企业的公共维度,有助于创建核心维度列表,解决主数据管理和数据集成的需求。

总线矩阵有利于项目规划和排期。总线矩阵将业务过程按主题划分,每个主题下包含多个业务过程,各个主题中业务过程互不重叠。不同开发小组遵循该架构进行异步独立开发,每个小组承担不同主题或同一主题下不同业务过程,也可以进行一致性维度开发,从而实现增量式的开发。不同小组间分工更加清晰,每个人对自己在组织中承担的任务也更明确。

总线矩阵是数据一致性的重要保障。总线矩阵提倡从初期规划一致性维度,各业务过程共享一致性维度。通过一致性维度,确保维度的有序建设,减少冗余的出现。总线矩阵提供一目了然的维度能力观察,让后面开发的同学了解现有数仓数据,减少烟囱式建设的可能性。

总线矩阵可以避免面向需求开发。总线矩阵要求我们基于业务过程建设数仓,要求我们从全面的角度考虑维度建设。避免了拿到需求后盲目建设的情况,也避免后期不停维护扩展。

总线矩阵是数仓建设过程中各种角色间的沟通桥梁。架构师通过总线矩阵描述项目概况,进行任务分工;建模人员通过总线矩阵了解项目中一致性维度与业务过程关系,开展建模工作;项目经理通过总线矩阵,了解项目规模,进行排期安排,进度跟进;BI同学通过总线矩阵,了解数仓包含的业务过程与支持钻取的维度。通过总线矩阵,简化不同角色人员间沟通,更好的实现不同组织的工作配合。

基于上述优点,我认为总线矩阵是数仓建设中最重要的文档,应当由架构师在项目初期负责建设,并且长期维护和全局共享。

误区

在设计总线矩阵过程中,稍不留意便可能进入误区,影响产出质量。

不应当含有太多行,只选择感兴趣的业务过程作为矩阵的行。不重要、不需要分析的业务过程不包含在总线矩阵中,比如设备停机事件,引起设备停机原因可能有设备故障、人员缺勤,如果只需要分析设备停机原因,业务过程包括选择设备停机事件,而不需要把人员缺勤记录作为业务过程。当然业务事件是否是矩阵的行不是一成不变,比如人员考勤事件,如果人事部门需要分析考勤记录,就是我们感兴趣的业务过程。反之人事部门不需要,则不记录在矩阵行中,并且后续在人事部门需要分析时加入矩阵行中。

业务矩阵的建设应该基于业务过程,而非报表需求或分析。在实际工作中,通常会有一份完整的需求文档,罗列分析需求,并将分析需求拆分为多级的指标。不应针对每个需求建立业务矩阵的行,通常来说单个业务过程可以支持多个需求。例如在智能工厂建设中,业务人员有两个重要指标需求:设备计划外停机时间和设备计划内停机时间,计划外停机包括一些事件如设备故障、物料短缺等,计划内停机包括例行检修等。不应根据需求在业务矩阵中增加2行,而是增加一行为设备停机事件,将设备停机视为一整个业务过程。

深入分析需求,但不要面向需求建设维度模型。业务矩阵应该基于业务过程,即使没有需求我们也可以搭建业务矩阵。个人认为业务需求更多的是表明当前业务部门关注哪些业务过程,我们需要优先建设哪些业务过程的数据,即优先选择哪些业务过程组成业务矩阵的行。反应在工作量上,20%的时间分析需求,40%的时间了解业务系统和数据探查,40%的时间花在数据开发中。和BI对接的时间应当归属于分析需求中,如果发现和BI同学对接的时间占了50%以上的时间,你应该反思是不是在面向需求建设数仓。

总线矩阵的列代表维度,每列的定义应该是清晰具体的,不应太宽泛。比如“人”这个概念可能包含公司员工、上游供应商代表、下游购买合同客户等,这些群体间几乎没有重叠,并且关注不同的属性,将他们划入单一的、一般化的维度中将产生混乱。

将层次的每个级别放入一个列,而不是不同列。比如日期维度,年、月、日不应分为3个列作为3个维度存在,而是保存最小级别的维度,即只存在日维度这一个列。这种设计也称为维度表的层次整合。

总结

基于工作中碰到的情况,网上总线矩阵的介绍文章比较少,本篇文章有感而发。希望看到本篇文章后的数据开发同学,能在工作中良好运用总线矩阵,逐渐体会到它带来的好处。


http://chatgpt.dhexx.cn/article/IRt5DVc8.shtml

相关文章

企业数据仓库总线架构、总线矩阵笔记 (第三篇)

一、总线架构 维度建模的数据仓库中,有一个概念叫Bus Architecture,中文一般翻译为“总线架构”。总线架构是Kimball的多维体系结构(MD)中的三个关键性概念之一,另两个是一致性维度(Conformed Dimension&a…

项目管理模板模板

项目管理模板模板 附件: 项目管理模板模板.rar 更多旧内容请访问 www.17testing.com

项目经理必备-项目总体计划模板-制式文件,可直接填写使用-公司可用

合同中完整项目名称,黑体,28号字, 居中对齐,项目名称较长时换行填写 当前文档名称,黑体,小初, 居中对齐,文档名称较长时 换行填写 版 本 号 x.x 编制人 日期 20xx年xx月xx日…

项目章程和项目管理计划

转自:人月神话blog 项目整体管理的一个重要作用就是对5大项目管理过程组和44个项目管理过程进行有效的整合。整体管理贯穿项目启动到收尾的整个过程。启动过程的一个重要标 志是项目章程的制定,有时候可能也可能是一次项目重要干系人参加的会议决议文件&…

4.1 制定项目章程

4.1 制定项目章程 定义:制定项目章程是编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程。 作用:制定项目章程,以便正式启动已经选定的某个项目,确立该项目在组织中的合法地位,授权项目经理动…

项目章程-文件计划

项目立项以后,就要正式启动项目。项目启动就是以书面的、正式的形式肯定项目的成立与存在,同时以书面的形式为项目经理进行授权。 项目章程是正式批准一个项目的文档,或者是批准现行项目是否进入下一个阶段的文档。项目章程应当由项目组织以外…

100+份项目管理模板和工具免费下载,包含项目管理各个流程都该用到哪些工具和方法!

工作这么多年,相信有很多项目经理已经拥有了一套自己用着熟悉的模板和工具。其实,不管用什么表格模板,我们的最终目的都是为了能及时交付项目。 今天分享给大家的这些内容,希望大家都能找到适合自己的使用工具,并熟能…

软件项目管理 2.3.项目章程

软件项目管理 2.3.项目章程 【公众号 “项目管理研究所” 将会第一时间更新文章】 归档于软件项目管理初级学习路线 第二章 软件项目确立 《初级学习路线合集 》 前言 大家好,这节我们学习软件项目章程概念 一、项目章程 项目章程是证明项目存在的正式书面说明和…

第四章:项目整合管理 - (4.1 制定项目章程)

制定项目章程: 1、编写一份正式批准项目并授权项目经理在项目活动中使用组织资源文件的过程。 2、本过程的主要作用:明确项目与组织战略之间的关系,确立项目的正式地位,并展示组织对项目的承诺。 3、本过程仅开展一次或仅在项目的…

信息系统项目管理:如何制定项目章程?

制定项目章程是编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程。 1.项目章程起了什么作用? 项目章程在项目执行组织与需求组织之间建立起伙伴关系。在执行外部项目时,通常需要用正式的合同来达成合作协议。这种情况下&#x…

项目管理-项目章程

2019独角兽企业重金招聘Python工程师标准>>> 什么是项目章程 先来个例子看一下: 借助这个图,我们再来看看项目章程的定义: 制定项目章程是编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程。 本过程的主…

项目管理 | 如何制定项目章程?|附项目章程模板下载

很多项目经理虽然都知道项目章程,但是大部分项目是从来没有做过的,项目章程是证明项目存在的正式书面说明和证明文件。 是让老板授权的正式文件,是项目经理获得授权的关键。通常是项目开始后第一份正式文件。 今天就为大家分享一份《项目章…

如何制定有效的项目章程?【含项目章程模板】

很多项目经理虽然都知道项目章程,但是大部分项目是从来没有做过的,项目章程是证明项目存在的正式书面说明和证明文件。 是让老板授权的正式文件,是项目经理获得授权的关键。通常是项目开始后第一份正式文件。 今天就为大家分享一份《项目章…

深度学习:Keras入门(一)之基础篇

http://www.cnblogs.com/lc1217/p/7132364.html 1.关于Keras 1)简介 Keras是由纯python编写的基于theano/tensorflow的深度学习框架。 Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果,如果有如…

【小白学习keras教程】十一、Keras中文本处理Text preprocessing

Author:Runsen 文章目录 Text preprocessingTokenization of a sentenceOne-hot encodingPadding sequencesWord EmbeddingsWord vectorsEmbedding layer 本次博客将介绍如何在Keras中,对文本进行处理Text preprocessing Text preprocessing Keras API…

Tensorflow和Keras基础使用教程

视频教程:B站、网易云课堂、腾讯课堂 代码地址:Gitee、Github 存储地址: 百度云-提取码: Google云 1.Tensorflow和Keras简介2.Tensorflow3.实现线性回归4.保存和恢复模型5.TensorBoard监控6. 实现第一个神经网络 7.Keras8.Keras的…

Keras教程:使用Keras开始深度学习和Python(上)

概述:包括什么内容呢 用Keras训练第一个简单的神经网络不需要很多代码,但是我们将慢慢开始,逐步进行,确保您理解如何在自己的自定义数据集上训练网络。 我们今天要讨论的步骤包括: 在系统上安装Keras和其他依赖项 从磁盘加载数据 创建训练和测试分支 定义您的Keras模型体…

Keras入门教程 6.Keras 预训练模型应用

Keras 入门教程 1.线性回归建模(快速入门)2.线性模型的优化3.波士顿房价回归 (MPL)4.卷积神经网络(CNN)5.使用LSTM RNN 进行时间序列预测6.Keras 预训练模型应用 Keras 预训练模型应用 Keras 应用模块用于为深度神经网络提供预训…

keras教程_Keras教程

keras教程 Keras教程 (Keras Tutorial) PDF Version Quick Guide Resources Job Search Discussion PDF版本 快速指南 资源资源 求职 讨论区 Keras is an open source deep learning framework for python. It has been developed by an artificial intelligence researcher at…