指标肯定与建模是有关系的了,目前世界上两种主流的数仓建模方式,会有Kimball先生的维度建模和Immon先生的主题建模(3范式)。别看互联网上Kimball先生的维度建模是主流,但像金融领域Inmon先生的主题建模(3范式)才是主流。

由于本人的工作经历关系,如没有特别标注,使用的都是维度建模的理论体系。

要了解原子指标等指标分级体系,首先得知道维度(表)与事实(表)的概念,这也是维度建模的核心,但由于我们这次的课题不是建模,因此只需要在概念上有个大概的理解便可。



一、维度的定义

维度的正式定义是:维度表是事实表不可或缺的组成部分。维度表包含与业务过程度量事件有关的文本环境。它们用于描述与“谁、什么、哪里、何时、如何、为什么”有关的事件。(The dimension tables contain the textual context associated with a business process measurement event. They describe the “who, what, where, when, how, and why” associated with the event.)

PS.国内正式出版译本把textual context翻译为文本环境,有的书会翻译为“文本的上下文”或“文本的语境”等。我个人更倾向于直译为“文本的上下文规则”。关于上下文这个词,正式翻译可以翻译为“语境”,但这个翻译还是很别扭,IT中可以译为“因素”或“脉络”。即textual context="行文脉络",意指维度是用来度量事实的脉络(因素)

我自己的理解:维度是用来分类业务过程数据的,或者说业务过程是按维度来度量其工作的好坏;

再粗暴及技术一点的理解:维度是一些用于分类业务或者度量业务的枚举值(有例外情况,后面会提到);


各位同学可能很奇怪为什么说维度是分类业务数据的,又为什么是事件的度量(关于事件的描述及原由,请看下文第二大点“事实的定义”)。我拿订单来举几个例子,把分类、度量、业务做一个关联:

区域维度表:如广州、深圳等,是把订单按城市维度划分,也就是按城市来分类订单,或者说按城市来度量订单情况,也就是按城市来度量业绩(卖得不好的城市总负责人估计就要背锅了);

产品维度表:如iphone13、mate40等,是把订单按产品维度划分,也就是按产品分类订单,或者说按产品来度量订单情况,也就是按产品来度量业绩(卖得不好的产品就要咔嚓掉了);


各位同学可能很难接受这种这么奇怪的解释,让我们回到维度表的正式定义:它们用于描述与“谁、什么、哪里、何时、如何、为什么”有关的事件。

谁(Who):即人的维度表,或者是会员的维度表;

什么(What):如产品、产品线、业务线条等;

哪里(Where):即区域维度表,如北上广深;

何时(When):即时间维度表,时间维表上一篇文章介绍过了;

如何(How):即怎么干的方法,如我们常提到的精准营销,可以是短信、微信、电话、线下等不同的方式;

为什么(Why):即原因,如产品购买的原因,可以是“促销”、“价格便宜”、“外观漂亮”等; 

其实除了这个5W1H,我们现实中,还可以举出更多的例子,如支付能力“高/中/低”等,技术一点来说,这些全都是枚举值,用于度量事实的枚举值。


注意,维度的例外情况:有些枚举值不是维度,如表示状态(有效、无效),大厂们叫“普通修饰词/修饰词/口径”。当然,我们也可以不按大厂的定义,按Kimball大神的理论这些也可以定义作维度的。

例:有促销员进驻的(促销员列的值为:1),有效的门店(门店状态列的值为:有效),线上生鲜门店(渠道列的值为:线上)


二、事实的定义

事实的正式定义是:维度模型中的事实表存储组织机构业务过程事件的性能度量结果。“事实”这一术语表示某个业务度量。从市场角度观察,记录销售的产品的数量单位,以及每种产品在每个销售事务中涉及的销售额。(The fact table in a dimensional model stores the performance measurements resulting from an organization’s business process events.The term fact represents a business measure. Imagine standing in the marketplace watching products being sold and writing down the unit quantity and dollar sales amount for each product in each sales transaction.)

PS.国内正式出版译本把performance翻译为性能,大家或者可以尝试理解为效果(业绩/绩效)也可以。

事实比较好理解,就是业务过程,如订单、物流等的,其特点是连续数据(连续指不停产生的数据,不是指12345这种连在一起的数据),不是枚举值,也不是累加值。连续的方法一般是时间、地点等的维度进行连续。值得一提的是,维度建模把业务过程产生数据记录的动作,称为事件,这也是维度的定义中事件的这个词的由来。其实也好理解,如客户下了一个订单,就是产生了一个订单的事件。

也就是说,事实表是由无数个连续的事件构成,而这些事件的度量脉络(因素),就是维度。


注意:随着业务越来越复杂,有些表已经很难单纯用维度和事实来表示,很难界定是事实还是维度。如患者与医生的关系表,就会出现多多的关系,若是使用Immon先生的理论建数仓,这种表多的是;但如果要用维度建模,就要冗余到事实表中,会造成计算量的暴增。因此,我们建数仓的时候,很多时候会以维度建模为主体,少量数据保持3范式,总之一句话,性能怎么高就怎么来...


三、两家大厂对指标的定义和理解

阿里:

原子指标用于明确业务的统计口径和计算逻辑,是基于用户的业务活动(即业务过程)创建的,用于统计业务活动(请参阅前文业务过程,同义)中某一业务状况的数值。例如,用户的业务活动为购买,则原子指标就可以指定为支付金额。

派生指标是由原子指标、时间周期、修饰词构成,用于反映企业某一业务活动在指定时间周期及目标范围中的业务状况。例如,某企业近一周上海地域的销售金额。本文为您介绍如何创建并使用派生指标。

构建数仓指标体系4:理解原子、复合、派生指标(1/3)_指标体系

详细请参阅:​​https://help.aliyun.com/document_detail/276966.html​

华为:

原子指标是指标数据通过添加口径/修饰词、维度卷积而成,口径/修饰词、维度均来源于指标数据中的属性。

复合指标由一个或多个原子指标叠加计算而成,其中维度、口径/修饰词均继承于原子指标,不能脱离原子指标维度和口径/修饰词的范围去产生新的维度和口径/修饰词。

构建数仓指标体系4:理解原子、复合、派生指标(1/3)_数据仓库_02

详细请参阅:《华为数据之道》


可以看得出来,大厂们对指标的定义还是有点差别的,先不看大厂们的定义差别在哪,其实他们本质上是一样的,就是把指标进行分级管理,目前是为了复用,我们详细分析一下:

阿里定义原子指标与派生指标,是为了在维度上进行细分,如定义了销售额这个原子指标后,可以按不同的维度(阿里叫修饰词,与维度同义)进行细分,如区域维度,客户维度。请注意,是细分,不是扩展,原子指标定义的时候其实已经包含所有维度。

华为由于没有派生指标(其实是把阿里的原子和派生揉到一起,全是派生指标了),但多了复合指标,是因为两个指标相除,就会得到新的指标,使用起来会更方便,如进店购买率,就是购买人数/进店人数。

本文取两家所长,把指标定义为原子指标、派生指标、复合指标三种。



(1)所有维度与事实的定义,均来自于Kimball先生所著的《The Data WareHouse ToolKit Third Edition》

(2)关于Context的英文详细注解,请参阅:​​http://englishtextualconcepts.nsw.edu.au/content/context​