商业智慧语义表格式模型中的基本阶层设计

商业智慧语义表格式模型中的基本阶层设计


大家对于多维度模型最深的印象通常就是维度的阶层可以进行下钻(drill-down)、展开(Expand)、拖放(Drag & drop)以及切片筛选(Slice & dice)等操作。说穿了,阶层(Hierarchy)的作用其实就是定义出彼此关联的一组属性(Attribute)间快速导览的顺序。因此阶层的各层级并不必然具备条件约束(也就是说您若是想要设计出日-季-月-年这种阶层也不会受到限制),但是在设计阶段仍旧必须要深思熟虑哪种阶层配置对于使用者来说是最直觉且具有分析意义的。

在商业智慧语义表格式模型中定义阶层有几个限制:

  • 必须切换至“图表检视”才能够浏览与设计阶层。
  • 各个层级所使用的数据行必须位于同一个数据表中。

一般阶层的设计方式非常简单,首先将SSDT画面切换为“图表”检视,接下来将鼠标点选要增加阶层的数据表后按右键,选取“建立阶层”,此时就会在此数据表中新增阶层对象。

image

接下来可以透过鼠标,将所需要的层级(Level)数据行拖放至阶层对象中(例如我们设计了操作系统阶层,第一层放的是“操作系统平台”,而第二层放的是“操作系统”)。您也可以直接透过按右键,调整阶层与层级的名称。以下图为例,由于“操作系统平台”以及“操作系统”已经被放在阶层中,为了让日后数据模型在显示时能够更为精简,通常会建议将原始的“操作系统平台”以及“操作系统”设定为隐藏,也就是避免相同资讯的数据行在同一个数据表中重复显示,造成使用者日后操作上的混淆。

image

设计完成阶层后,日后各位就能够在任何商业智慧前端工具进行阶层的检视操作。

image

阶层都位于同一个数据表的结构我们称之为星状架构(Star Schema),这可以说是最简单的维度模型,它会被称之为星状架构的主因是当事实数据表位于中心,而单一维度数据表环绕其外的形状,看起来就像是一个放射状的星形。

image

至于雪花状架构(Snowflake Schema)则是将星状架构的“维度数据表”根据数据重复性以及阶层关系进行局部正规化,例如产品维度(Product)中,里面记载产品的叙述性字段具有高度重复性,例如产品类(Product Category),同时这两个字段本身与产品代码呈现阶层关系,因此我们可以将产品维度数据表进行正规化,拆解成产品数据表(Product)、产品类(Product Category)二个数据表。其中,产品数据表主索引键为产品代码,透过此主索引键与事实数据表连结;而产品类数据表主索引键为产品类代码,透过此主索引键与产品数据表连结。这样的结构由于像是星状放射状在向外延伸,有如雪花的结晶般,因此才称之为雪花状架构。

image

在传统的观念中总认为星状架构的性能优于雪花状架构,事实上以现行微软技术无论是多维度模型或者是表格式模型中,星状架构与雪花状架构其实性能上并无太大差异。

由于之前曾经提到在商业智慧语义表格式模型中,阶层内的层级必须为位于同一个数据表。那么当我们想要设计的阶层来自于多个数据表时该如何处理呢?

image

上图中,产品大类与产品分置于两个数据表中。若我们依照之前介绍的阶层设计方式,各位可以发现“产品大类名称”数据行是无法直接拖放到位于产品别数据表的阶层中的,见下图。那是因为目前商业智慧语义表格式模型中并不允许括数据表的阶层结构。

image

为了能够实践雪花状结构的阶层,此时我们需要在产品别数据表上新增名为“产品大类”的导出数据行,其公式如下:

导出数据行范例:

产品大类

=RELATED('产品大类'[产品大类名称])

此导出数据行的意义是根据键值,查阅该产品在“产品大类”数据表的“产品大类名称”数据行结果。其计算结果如下图。

image

如此一来我们就可以直接利用导出数据行“产品大类”来设计阶层,见下图,同样的为了让数据模型看起来精简,我们可以将“产品”大类数据表隐藏。由于这种技巧是让雪花状架构转换为星状架构,等于是减少了数据模型的复杂度,却又不必事前透过ETL将数据表作整并,也因此这种设计技术也被称之为模型的降阶(Degenerate)。

image

亚洲资采脸书粉丝团:www.facebook.com/AsiaMinerTW

asiaminerQR

Allan Yiin

CTO, AsiaMiner

原文:大专栏  商业智慧语义表格式模型中的基本阶层设计


猜你喜欢

转载自www.cnblogs.com/petewell/p/11452664.html
今日推荐