华远智德(北京)科技有限公司 Jupiter Consulting (Beijing) Ltd.
  
技术讲堂


您的位置: 首页 技术讲堂 第三课 维度的内部结构
        第三讲 非层次结构(3)

数据分析讲堂

第三课 维度的内部结构

第三讲 非层次结构(3)

(4)度量

所有的实例都和度量是相关的

     粗看起来,维度似乎就是由一组实例组成,并且可能带有一定的层次结构。毕竟,你可以在很多不同的OLAP产品中定义层次,在这些OLAP产品中都没有让你定义单位或度量。因此你可能会问为什么要引入单位或度量呢?一个快速简单的答案就是每一次你使用父节点、子节点和层次的时候,其实都隐含地引用了度量。

       类型或维度的名称意味着一组可能的实例。例如,以维度命名的城市所指的是如上海或者广州之类有效的城市名称,而不是像红色、蓝色等表示颜色的记号,这些表示颜色的名称是无效的实例。虽然OLAP工具没有强制你一定要保证实例的同质性,但是我还是建议你应该遵循这个原则。让我们考虑如下的例子。如果是你今天担任数据仓库管理员的第一天,现在你正在熟悉公司的维度模型,当你看到一个叫“产品”的类型或者维度,并且发现其中混杂了经理或者城镇的名字的时候,如果你还希望保住自己工作的话,你很可能会将它们作为异常剔除出去。因此,组成类型的事物、元素、实例、成员、位置等从模型的角度上至少可以平等地对待。

       我们应该把维度的名称看成是所有实例的一个速记,所以维度的名称应该反映出所有实例具有的共性。但是如果已经存在了某些维度的每个实例都必须满足的条件或者度量,那么一个更加精确的表示实例的方法是将维度表示为“实例——度量”对的形式。

我们一般用如下的形式表示维度和其中的实例:

City:shanghai,guangzhou,tianjin

但是一个更加精确的形式如表达式是:

City.any:City.shanghai,City.guangzhou,City.tianjin                   ( 5-1 )

表达式5-1强调了维度中的每一个实例都遵循维度名称所隐含的规则。下面让我们考察如下简单的维度:月份(month)、年份(year)、米(meter)和千米(kilometer)。

Time.metric.彐 Month,year

我们读做“时间维度的集合是月份和年份”。

Time.Month.彐 Month,January,Month.February,...Month.December

我们读成“月份实例的集合是从1月份到12月份”。

Time.Year.彐 Year.1998,Year.1999,Year.2000

我们读成“年份实例的集合从1998年到2000年”。

Distance.Metric.彐 Meter,Kilometer

我们读成“距离度量的集合是米和千米”。

Distance.Meter.彐 Meter1,Meter2,…Meter1000

我们读成“米的实例集合是从1米到1000米”。

Distance.Kilometer.彐 Kilometer1,Kilometer2

我们读成“千米的实例是1和2”。

       每一个人都知道12个月是一年,而1000米等于1千米。比率12:1和1000:1分别表示了在时间和距离维度单位或度量上的换算因子。因此,如果我们知道某个按照年份统计的值,我们可以将其除以12得到每个月的平均值,而我们如果有3个月的值,我们知道将其乘以4,从而估计一年的值。正规的做法是米、千米、月和年作为单位或度量处理。

         现在让我们看看你对于测度或者值的单位了解到了什么?除了可以在不同的层次粒度上指定换算系数之外,你同时还获得了一组可以使用的操作。比如,在米上可以进行加和减,以及乘或除。它们可以被时间单位做除法。冰河可以每年3米的速度移动,官僚主义的移动速度就更慢了。让我们看一下如果没有单位的话,会丢失什么。比如将5个未知单位长度和3个未知单位长度进行相加?除非你知道它们的度量单位,否则就无法在这些维度上进行任何的操作。因此,你无法将度量中的转换部分与允许的操作,以及度量的定义隔离开来。

       虽然我们通常都是将度量的概念作用于那些采用基数排序实例的维度,例如前面的月份——年份和米——千米维度,但是定义实例成员的规则、在换算系数之间提供量化的比较,以及定义有效的操作这些功能完全可以作用于名词排序的维度。

让我们再次考虑城市维度的例子,不过这一次将城市作为多层地理维度的一部分,增加了省份的层次。

按此在新窗口浏览图片

因此,层次的基础是度量关系,如果没有度量的话,那就无法定义层次。如果没有度量的概念,维度或者类型就没有任何的内涵、换算和操作,从而维度就会变成一堆不能支持任何内部计算和逻辑的随意的实例的集合。

那么当你使用OLAP产品的时候,看起来好象并没有提供度量的功能,这个意味着什么呢?首先,你需要意识到任何OLAP产品都会明确地使用某种类型的度量,至少,你的产品会支持一种或更多种数据类型,这些数据类型将与测度或变量相关联,属于基数类型。另外,你定义的其他维度的实例都可能被预先定义为8个字节的字符串。

在工具支持的基本功能之上,你内心应该明了你定义的每个维度相关联的排序和度量。虽然你不一定需要为产品、商店和客户等维度强制定义排序关系,但是还是应该在某些地方为每个维度,比如产品、商店、时间、渠道或客户,手工维护排序的类别等元数据信息。这些维度大都是名词维度,但是其中有些维度,比如时间,或者场景,或者渠道的位置等,可能是序数或者基数排序的。当处理度量、变量或者内容的时候,如果你的系统能够自动地跟踪变量的单位,那么你就可以更加容易地创建、交流和调试你的应用程序。

        首页   |  公司介绍   |  服务理念   |  经营管理   |  企业管理 【TOP】      
版权所有 © 2015 jupiterst.com