微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project



SQL Server 2012 中提供了开发 SSAS 项目的两种模型,一种是新增加的 Tabular Model 表格模型,另一种就是原始的 Multidimensional Model 多维模型。

在这里演示的是 Multidimensional Model,如果要了解 Tabular Model 表格模型,请参看 - http://www.cnblogs.com/biwork/archive/2013/05/22/3093896.html

下面使用的环境是 VS2012 + SSDT 集成,可以参看 - http://www.cnblogs.com/biwork/archive/2013/05/12/BI_VS2012.html

数据库 AdventureWorks 可以到这里下载 - http://msftdbprodsamples.codeplex.com/releases/view/55330


新建一个多维模型项目

创建数据源

数据源包含分析服务与源数据库连接时的信息。

新建数据源

数据源的数据必须是关系型的数据源,并且分析服务可以从 SQL Server, Access, Oracle 或其它 OLE DB/ODBC 驱动的数据库中读取数据。

选择 AdventureWorksDW2012

Windows 用户名和密码

 数据源创建完成,指向本机 BIWORK 的 AdventureWorksDW2012 数据库

 

数据源视图的创建

数据源视图是物理数据库和分析服务维度与多维数据集之间的逻辑数据模型,在创建数据源视图的时候,需要在源数据库中指定我们所需要的表或者视图,这些表和视图是我们进行维度创建和分析的基础。

通常情况下,最好使用视图,这样即使源表结构有改动,也不需要重新修改数据源视图,这样对逻辑模型中的其它对象影响都会非常大。在本示例中,选择的仍然是表。

选择数据源

在这个例子中只创建了有关 Internet Sales 相关的表对象,Fact 开头的是事实表,Dim 开头的是维度表。

那么这个数据源视图就包含了这么 5 张表,后面的维度设计和度量设计都是围绕着这 5 张表。

可以在创建好的数据源视图中看到这 5 张表的关系,很显然这是一个雪花型 Snowflake 模型, 它也是 Star Scheme 星型模型的延伸。

创建了数据源视图之后,根据需要可以做很多事情 -

  • 创建区域关系图,本示例中表数量较少,如果表数量多的情况下,可以根据主题选择相应的表逻辑性的将表与表之间的关系分开。
  • 增加主键以及表之间的关系,有的表的元数据不完整,没有定义主键和表之间的关系,也可以在数据源视图中修改。
  • 增加命名计算,可以根据已有列追加新的列,或者创建计算列,这个类似于 SQL Select 语句中根据已有列创建新的计算列。
  • 还可以根据这些表创建命名查询表,比如关联 A 表和 B 表查询出来一个关联表然后保存在数据源视图对象中。

在这里不演示上述操作,只对表名做出友好的命名操作。

取一个简单的名字

每个表都改一下,看起来更加简洁一些。

数据源视图设计完毕后,就可以根据这些逻辑模型来创建最基础的维度和度量组了。

补充一点 - 在修改数据源视图的时候要注意:不能将命名计算添加到命名查询,也不能基于包含命名计算的表创建命名查询。

维度的设计

创建维度的时候首先应该要熟悉源表的数据以及它们之间的逻辑关系,下面只演示创建维度的过程。

使用已存在的表,注意还有其它选项,比如可以根据需要创建时间维度表 -

可以从现有的表中创建时间维度。

可以向维度向导提供一个开始和结束日期,向导可以创建和填充关系型数据库,并生成该表的时间维度。

可以向维度向导提供一个开始和结束日期,向导将生成只存在于分析服务数据库中的时间维度。

选择好刚创建的数据源是视图表,再选择 Date 表,这个表稍微有点特殊, 目前可以说没有哪一个分析服务 OLAP 数据库中不使用到时间维度的。这里 Key Column 和 Name Column 先默认吧,之后可以改的。

只选择勾中的列,并且注意在维度设计器中,我们对应的 Date 表中列在这里叫做 Dimension Attribute, Dimension Attribute 有 Attribute Name, Enable Browing 和 Attribute Type 可供操作。

注意到 Dimension Attribute 的 Attribute Name 实际上对应的就是数据源视图中 DimDate 表的列名,按字母开头给自然分开了。

Enable Browsing 在维度设计浏览中是否出现。

Attribute Type - Dimension Attribute 的每一个 Attribute 都会有这个。在时间维度的设计过程中,我们可以通过这个属性来指定每个属性所代表的时间单元,分析服务将通过设定好的时间单元来进行复杂的时间计算。 除此之外,分析服务还提供了会计,货币转换和地理等 Attribute Type。

时间属性修改之后的效果

对比一下数据库中的源数据再来理解一下这样的设计。如果都是 Regular,那么 Date 维度中的属性值是什么就是什么,分析服务不会把 FullDateAlternateKey, EnglishMonthName, CalendarQuarter, CalendarSemester, CalendarYear 当作用来统计和计算数据的时间对象了。比如要统计 2005年第一个季度或者第一个月 January 的数据,比如上半年或者下半年的数据,那么通过对 Attribute Type 的修改,分析服务就知道 CalendarSemester = 1 的时候是指 1- 6 月。

第一个时间维度就设计完成了,再次注意在时间维度里,之前表中的列在这里叫做 Attribute, 这些 Attribute 有其它的属性来丰富它们各自的含义,比如像上面提到的有关时间的 Attribute Type 的设计。

这样我们的第一个维度就算创建完成了,但是对于维度的创建和设计其实还有很多方面需要掌握 -

  • 通常情况下,应该掌握 3 种不同类型维度(标准,时间和父子维度)的创建方式。
  • 创建完维度之后,通过维度设计器增强维度,比如修改属性层次结构,层次结构属性的排序,创建属性关系,设置默认成员,去除 ALL 级别等操作。

多维数据集 Cube 的实现和维度的自动创建

虽然上面只选择了一个时间维度表,但是可以通过创建多维数据集将其它相关的维度也给同时创建出来。

在创建 Cube 的过程中,有一个很重要的对象将会出现,它就是度量值(组)。我们要做的事情就是把维度和度量值组中的数据在多维数据集中组合起来,这样我们就可以大致通过维度来观察不同角度下的数据。

使用已存在的表,这里的表还是从数据源视图中选择。

在创建 Cube 的时候,其实就是从数据源视图中引入所有相关的事实表 Fact Table 和维度表 Dimension Table, 所以所有的事实表和维度表都必须包含在这个数据源视图中。并且,对于每一个事实表,在这个过程中都会创建一个相应的度量值组,包含了由事实表中各个选择出来的列所创建的度量值。

所以下面它首先要选择的是 Measure Group Tables - 度量值组表。

Measures - 选择度量值,只选择需要的度量值。可以把这里的 Internet Sales 看作是视图中的表,下面的 Measure 都是表中的列,实际上也就是这么来转换的。

要注意的是,Cube 多维数据集中必须包含一个度量值组,而一个度量值组中必须包含一个度量值。简单可以理解就是必须要有一个事实表,事实表中必要要有一列。

但是它们之间还是有着很大的区别,Measure Group 和 Measure 的概念只在 Cube 中存在而不是关系型数据库中的表和列。

选择已创建好的维度。

由于数据源视图中,可以看到事实表和其它维度表之间存在着直接或者间接的关系 (Snowflake 雪花型模型)。因此在这里都会关联起来,当然也可以不选择这些维度,但通常情况下还是要选择的。

注意到 Geography 是通过 Customer 关联的,还有对于事实表 Internet Sales 来说,也会为它创建一个维度,这个有事实表构成的维度就叫做事实维度。

多维数据集 Cube 由 Measure Groups 度量值组和 Dimensions 维度组成。

在这里可以看到最原始的数据源视图,创建的度量值组以及维度。

要注意的是,在多维数据集中显示了三个维度,但是我们并没有创建过,它们是 Order Date, Ship Date 和 Due Date,这个一会再来看。

修改维度,增加维度属性。由于在创建 Cube 时选择的事实表只有相关的外键关联到这些维度表,因此创建完维度之后,默认情况下也就只为维度创建了这些维度属性,比如 Customer 中的 Customer Key 和 Geography Key。 但事实上,只有这两者是不够的,需要继续添加新的维度属性,这些都是我们看数据(度量值)的“角度”。

在 VS2012 或者 SSDT 中非常方便的就可以直接拖拉过去,如果需要修改命名的话,可以修改属性。

这是 Product 维度属性的修改

 

再来看这三个维度 Due Date, Order Date 和 Ship Date。

实际上这里的三个维度仍然表示的是时间维度 Date, 只不过在时间维度与度量值的关联过程中依次有三个纬度属性与之相关联。

而每一个 Date 无论是 Due Date, Ship Date 或是 Order Date 都应该具有相同的 Date 维度属性 -

如果放在一起,试问又该如何区分这里的 Calendary Quarter 究竟是指 Order Date 还是 Ship Date 呢?因此就在这里将它们区分开来,它们都具有 Date 维度相同的属性。这是用我们最简单的思考方式来解释 Cube 中的维度为什么要这么来操作,它们又如何存在的。

实际上,这三个维度有一个专有的名字 - Role Playing Dimension 角色扮演或者角色模仿维度。

角色模仿维度在这里就清晰的告诉了我们数据库维度 Database Dimension 和多维数据集维度 Cube Dimension 之间的差异。

数据库维度中我们能看到的只有 Date, Customer, Product 和 Internet Sales 这几个维度。但是在多维数据集维度中,数据库维度 Date 扮演了三个不同的维度角色,Role Date, Order Date 和 Ship Date。

一个多维数据集可能包含一个或者多个数据库维度,它引用了数据库维度中的属性和数据,必要的时候会通过角色扮演维度来更好的维护和管理维度和度量值组之间的关系。

 

最后部署到本机来查看一下创建好的多维数据集 Cube。

部署成功后,能看到 SSAS 数据库中的各个对象 -

  • 数据源
  • 数据源视图
  • 多维数据集对象 Cube 与度量值组
  • 数据库维度 - 此时数据库维度中的 Date 在 Cube 中扮演了 Due Date, Order Date 和 Ship Date 这三个多维数据集维度,这三个多维数据集维度具有 Date 维度中相同的结构

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值