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 博客推荐栏中快速看到这些文章。


微软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. 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作

    开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来, ...

  3. SQL Server 2012中快速插入批量数据的示例及疑惑

    SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以 ...

  4. SQL Server 2012中Task是如何调度的?

    SQL Server 2012中Task是如何调度的?[原文来自:How It Works: SQL Server 2012 Database Engine Task Scheduling]     ...

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

    原文:SQL Server 2005中设置Reporting Services发布web报表的匿名访问 一位朋友提出个问题:集成到SQL Server 2005中的Reporting Services ...

  6. (数据科学学习手册28)SQL server 2012中的查询语句汇总

    一.简介 数据库管理系统(DBMS)最重要的功能就是提供数据查询,即用户根据实际需求对数据进行筛选,并以特定形式进行显示.在Microsoft SQL Serve 2012 中,可以使用通用的SELE ...

  7. 微软BI 之SSIS 系列 - 使用 SQL Profilling Task (数据探测) 检测数据源数据

    开篇介绍 SQL Profilling Task 可能我们很多人都没有在 SSIS 中真正使用过,所以对于这个控件的用法可能也不太了解.那我们换一个讲法,假设我们有这样的一个需求 - 需要对数据库表中 ...

  8. 微软BI 之SSAS 系列 - 实现Cube 以及角色扮演维度,度量值格式化和计算成员的创建

    在熟悉完下面这三种维度的创建方式之后,就可以开始创建我们的第一个 Cube 了. SSAS 系列 - 自定义的日期维度设计 SSAS 系列 - 基于雪花模型的维度设计 SSAS系列 - 关于父子维度的 ...

  9. SQL Server 2012中的AlwaysOn尝试

      简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移 ...

随机推荐

  1. CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视

    一.需求无论何时,当你在Explorer窗口中创建.删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图.有时候我们的程序中也需要这样的功能,以便当用 ...

  2. Xcode 统计项目代码行数及常用快捷键

    1.统计Xcode项目代码行数 1   打开终端. 2  用ls和cd进到你项目的路径. 3   输入下面的指令: grep -r "\n" classes | wc -l (cl ...

  3. WordPress基础:去除顶部管理员工具条

    想去掉这条东西有多种方式,个人比较喜欢这个,灵活~ 打开用户,在用户选项里,把这个勾走.

  4. MySql错误处理(三)- 错误处理的例子

    有几种错误处理的声明形式: § 如果任何错误(不是 NOT FOUND ) , 设置 l_error 为 1 后继续执行: DECLARE CONTINUE HANDLER FOR SQLEXCEPT ...

  5. Js与正则表达式

    原本接着上面的章节,这一章节应该是写 Jquery事件的,由工作需要,暂时横插一篇正则表达式的学习,这里是边学边记录,错误之处,希望指正,提拔一二,不甚感激! 此章节有 1.1 正则表达式的定义 1. ...

  6. Lua的文件操作

    先简单介绍一下被迫使用Lua的IO的情境: 游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服.跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的状态. ...

  7. android之Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)

    由于考虑到数据库的安全性,不被轻易SQL注入,执行查询语句时,一般不使用直接拼接的语句,而是使用参数传递的方法.然后在使用参数传递的方法中时,发现当使用like方式查询数据时,很容易出现一个问题. 错 ...

  8. [Web前端] 给li设置float浮动属性之后,无法撑开外层ul的问题。

    cp from : https://www.cnblogs.com/cielzhao/p/5781462.html 最近在项目中有好几次遇到这个问题,感觉是浮动引起的,虽然用<div style ...

  9. KOL:Key Opinion Leader

    什么是关键意见领袖 在营销学上,为各厂家宣传的专家或权威被称为“关键意见领袖(Key Opinion Leader),通常被定义为:拥有更多.更准确的产品信息,且为相关群体所接受或信任,并对该群体的购 ...

  10. 洛谷 P1123 取数游戏

    题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. ...