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 维度中相同的结构


更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。


转载于:https://www.cnblogs.com/biwork/p/3276455.html

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

  1. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍...

    在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...

  2. 解读SQL Server 2012中的最新BI功能

    如果SQL Server 2008 R2的重点是让商务智能(BI)的使用者像使用自助服务一样便捷,那么SQL Server 2012则是让自助服务BI这一概念延伸至让IT人员更容易进行管理. 事实上, ...

  3. sql server 2012 报表开发(1) 如何使用Reporting Service 2012制作报表

    Reporting Service,也就是我们平时经常看到的,报表商业智能,BI,基于SQL Server的报表制作工具,这里的例子,是如何通过visual studio 2010,开发Reporti ...

  4. SQL Server 2012中的Contained Database尝试

    简介 SQL Server 2012新增的Contained Database是为了解决数据库在不同SQL Server实例之间迁移的问题.在以往的情况下,数据库本身并不包含一些实例级别的配置参数(比 ...

  5. SQL Server 2005中设置Reporting Services发布web报表的匿名访问

    第一步:在运行IIS的Web服务器的本地访问http://localhost/reports ,这是Reporting Services的管理站点,在Properties(属性)页面下添加一个只有Br ...

  6. SQL Server 2012中包含的数据库(Contained Database)探索

    SQL Server 2012引入了包含数据库(Contained Database),解决了与当前(非包含)数据库关联的某些问题和复杂性.包含的数据库不依赖于其所属服务器相关的配置.管理.排序规则和 ...

  7. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)...

    这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...

  8. 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念...

    开篇介绍 在 SSIS Dataflow 数据流中的组件可以分为 Synchronous 同步和 Asynchronous 异步这两种类型. 同步与异步 Synchronous and Asynchr ...

  9. SQL Server 2012中的ColumnStore Index尝试

    费了半天劲,今天终于装好SQL Server2012了.按照MSDN中的新特性资料(Columnstore Indexes for Fast DW QP SQL Server 11).尝试了下Colu ...

最新文章

  1. java8 list 去重_Java8-Stream在集合中的8种应用案例
  2. pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)
  3. 有两个程序员得了肺癌 都是30多岁的男人
  4. java webservice ssl_[转贴]Java客户端调用Https Webservice
  5. glusphere设置球位置_玄武区举办桌上冰壶球比赛暨江苏省桌上冰壶球俱乐部联赛(玄武区站)活动...
  6. oracle catalog命令,catalog 命令
  7. 使用PHP脚本远程部署git项目
  8. linux复制远程文件和文件夹
  9. JMX Java Management Extensions
  10. 目前使用的python版本_Python版本到底有多少种?
  11. JAVA练习55-最小的k个数
  12. SpringBoot面试常问
  13. dz3 php post 登录,discuz X3用户登录uc_user_login()函数详解
  14. cleaned_data debug django
  15. html中img显示图片的两种常用方式
  16. 连接远程电脑虚拟机时,怎样重启远程电脑?
  17. 带下波浪线的textView
  18. UNIX环境高级编程源码
  19. 【jmeter-参数化】
  20. 学习用 JS/CSS 画一个时钟

热门文章

  1. GridView用法详解
  2. postmessage与sendmessage的区别
  3. MFC(六)(对话框)
  4. 肉肉谈对需求设计的想法--到底是功能驱动界面?还是界面驱动功能?
  5. .NET 中上下文的概念
  6. Android平台上使用属性系统(property system)
  7. qhfl-2 ContentType组件
  8. s28 LNMP架构服务搭建
  9. java 中文 图片_java之服务器端写图片中文乱码
  10. 技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数