龙象谷项目倒闭了:SSAS系列基础知识

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 15:58:36

SSAS系列——【01】准备知识

     关于SQL Server 产品,我从2004年就开始使用了,SQL Server 2K,2K5,2K8,到如今已经准6年了,说来惭愧,这六年来所涉及的内容都是在数据库引擎部分,最近有一个机会需要用到多维数据、数据挖掘技术,借此机会把自己的数据库的知识面扩充一下。立志一系列的博文记录之,以备日后温习。

    1、本系列的学习目标、实施计划是什么?

    “凡事预则立”,做事得有一个目标和实施计划。

    目标:

         全面熟悉SQL Server 2008 产品,掌握扎实的理论知识;

         实际使用SQL Server2008产品,积累初级经验;

         能够熟练使用MDX语言,承担多维数据库的编程工作;

    计划:

         一个月内达到上述目标 (2010-06-23到 2010-07-22);本系列文章每篇博文最多九个问题,欢迎大家交流。

   2、什么是SQL Server ? SQL Server 2008 R2版本?  

图一 微软SQL Server 图标

     SQL Server 是微软公司一个非常强大的产品,就现在的SQL Server 2008 而言,可以算得上是一个解决方案了,它包括从数据的存储、分析、挖掘、报表和优化等一篮子内容,最终的目的还是在于快捷的完成用户的需求。如上图一,是微软公司SQL Server产品的Logo,整个logo有一种多维立体的感觉,好似从万千纷繁复杂的数据中杀出一条血路走向金字塔的顶端共领导决策,很是smart,呵呵,扯的有点远啦哈。

    2008年8月7日,微软正式发布SQL Server 2008;据说2010年05会推出 SQL Server2010 R2版本。

    3、SQL Server 2008 总体结构图?SQL Server 2008 包含哪些工具?

图二 SQL Server 功能图

      图二是SQL Server的总体功能图,BizTalkServer是什么东东?在SQL Server 2008中,我们可以通过工具来对它进行操作。

SQL Server Management Studio、Bussiness Intelligence Development Studio、Reporting Services 组件及工具、SQL Server 2008 Integration Services (SSIS)。其它的多了也没用。

4、在那里下载商业智能开发环境?如何安装?

    SQL Server 企业版本中自带此环境,也在网上单独找了一下,还真没发现那个地方可以独立下载。

    6月24日有幸得到同行匡贤绪老师的知道,SQL Server 2008已经成功安装。说一下我的安装环境吧,操作系统Windows 7 旗舰版本,该版本自带dotnet framework 3.5.1 ,所以无需另外安装;安装SQL Server 2008的另一个条件是必须安装IIS。所以必须在控制面板——程序——打开和关闭Windows功能中勾上IIS,安装成功后,准备工作就完成了。

    下面开始装SQL Server 2008,我安装的企业版本的SQL Server。需要注意:64位的操作系统下,必须安装64位的SQL Server;安装的过程中会提示需要安装SQL Server SP1后程序才能正确运行,可暂时忽略不计;SQL Server 2008的各个服务可以分开设置系统管理员权限;安装数据库引擎的时候,最好是以混合模式安装,并记录SA账号的密码,以后用得着。上面这些问题,都截了图,明天上图为证。

    图三 兼容性问题

    图四 操作系统位数问题

    图五 默认安装目录

    图六 访问账号

5、数据仓库?

      文到此,不得不提到数据仓库的概念,微软、IBM、SAP提到的数据仓库的方案都大同小异,接下来的问题中来分析说明。数据仓库的概念最先是在某某年某某人士提出来的,英文名叫DW,它是对数据处理的一篮子的概念,是面向决策系统,在线联机分析处理系统的结构化数据环境。并不是字面上的意思,仓库吗?用来存东东的。存什么东东呢?前面有“数据”二字,想当然的那就是用来存数据的呗,简单。翠花,上图:

 

图七 数据仓库架构图

6、数据库与数据仓库有什么区别?

     我认为数据库和数据仓库根本就无法比较,是完全两个不同的概念。之所以在此单独提出来,周围的朋友喜欢拿这两个概念做比较。数据仓库本身包括输入、存储、输出这传统的三层。数据库呢?好像只有存储。

6、SSAS的逻辑架构?

图八 是总体逻辑结构图

      MSND中,在这幅图的下边有一段非常费解的话,姑且不照抄了。我的理解是“三个一对多”。服务器——Analysis Services实例——服务器对象——数据源。
7、各厂商数据仓库产品比较?

待续…

SSAS系列——【02】多维数据(维度对象)

1、维度是什么?

     数学中叫参数,物理学中是独立的时空坐标的数目。0维是一点,1维是线,2维是一个长和宽(或曲线)面积,3维是2维加上高度形成体积面。在物理学上时间是第四维,与三个空间维不同的是,它只有一个,且只能往一方向前进。

     图一 MSDN中关于维度的概念

2、服务器对象的内容?

     包括数据源、数据视图、数据库对象、安全角色和程序集。前4个都不难理解。关于程序集的概念,还需加强一下,程序集可为两种不同的类型:COM 和 CLR。CLR 程序集是使用 .NET Framework 编程语言(如 C#、Visual Basic .NET 和托管 C++)开发的程序集。说白了,你可以使用C#语言来编程处理服务器对象。

3、维度对象的内容?

     简单 Dimension 对象由基本信息属性层次结构组成。基本信息包括维度的名称、维度的类型、数据源和存储模式等。属性可定义维度中的实际数据。属性可不必属于层次结构,但层次结构却要由属性生成。层次结构不但可创建级别的有序列表,还可定义用户浏览维度的方式。简单的讲,就像Session对象中的键值对一样,这里的key(基本信息)、Value(属性),但这里key之前可能存在一定的关系,所以多了一个层次结构。

    维度的结构

            a、最简单的——星型结构

         特点:每个维度均基于一个通过主键-外键关系直接链接到事实数据表的维度表。 不多说了,直接上图。

图二 星型结构

            b、最复杂的——雪花结构

图三 雪花型结构

    维度的存储

         a、ROLAP

            使用 ROLAP 的维度的数据实际上存储在用于定义维度的表中。相对查询性能低。

         b、MOLAP

            使用 MOLAP 的维度的数据存储在 Analysis Services 实例中的多维结构中。相对查询性能高。

         c、HOLAP

            结合了ROLAP和MOLAP的存储方式。

 

4、维度如何落地?

     维度本身是一个很抽象的东东,它通过属性来和数据库表挂钩。说到属性,就豁然开朗了,在OO的概念中,属性的概念无处不在。维度落到实处也就是属性的集合,这些属性是由数据源中数据表的列来提供的,一个或者多个列组合,有多个列存在,那不就乱了么?所以再找一个属性中的“老大”,那就是数据表中的主键,于是新出来个新名词,叫做“键属性”,我觉得键属性是成对出现的,主要是事实表中的主键和维度表的外键,双键合璧,那对于星型模型而言,维度都表都和键属性直接挂钩,而雪花型模型,只有部分和键属性挂钩咯,弱弱的说,MSDN是这么说的。

     存在这么多的“属性小兵”,为了方便管理,那就给这些小兵分个级别把,“旅排营团”的一路摆开,于是又有个新名词,叫做“属性层次结构”,例如,在“日历时间”层次结构中,“日”级别应与“月”级别相关,“月”级别应与“季度”级别相关等等。

     存在这么多的“属性小兵”,小兵与小兵平级之间也该有些关系吧,所有的小兵要紧密团结在老大“键属性”周围,所以MSDN上说,维度内的属性始终与键属性直接或间接相关。所以又有了个新名词,叫做“属性关系”。

     存在这么多的“属性小兵”,如果把这些小兵的层次和属性联合起来,有满足“层次结构包含的每个属性都与其下直接属性一对多”时,叫做“自然层次结构关系”,晕死个人,不过也不难理解。

     续ing

5、维度的写回

     维度中的数据通常只是可读数据,在某些情况下可能对维度启用写操作,维度的任何成员均可以修改,还是有一些限制的,MSDN中有详细的对维度的增删改限制的描述,用的时候自然要想到,此处不再赘述。

6、维度翻译      这里的翻译和我们讲的把英文翻译成中文的意思一样,客户可根据区域标识符(LCID)把相应的标签传给SSAS实例来实现。

SSAS系列——【03】多维数据(多维数据集对象)

1、什么是Cube?

     简单 Cube 对象由基本信息、维度和度量值组组成。 基本信息包括多维数据集的名称、多维数据集的默认度量值、数据源和存储模式等。维度是多维数据集中使用的实际维度组。所有维度都必须先在数据库的维度集合中定义,然后才能在多维数据集中引用。度量值组是多维数据集中的度量值集。度量值组是具有常见数据源视图和维度集的度量值的集合。度量值组是度量值的处理单元;可先对度量值组进行单独处理,然后再浏览。这个概念MSND解释的非常清楚,也不难理解,姑且Copy贴上来。

2、度量值和度量值组

     度量值通常映射到事实数据表中的列。维度表中的属性列可以用于定义度量值,但是这些度量值通常在聚合行为方面具有半累加性或非累加性。

图 事实数据表中的度量值

     简单 MeasureGroup 对象由基本信息、度量值、维度和分区组成。基本信息包括度量值组的名称、度量值的类型存储模式处理模式等。度量值是组成度量值组的实际度量值集。对于每个度量值,均有一个聚合函数定义、一个格式属性定义、一个数据项源定义等其他定义。维度是用于创建已处理度量值组的多维数据集维度的子集。分区是已处理度量值组的物理拆分的集合。在多维数据集中,度量值按照其基础事实数据表分组为多个度量值组。度量值组用于使维度和度量值相互关联。度量值组还可用于将非重复计数作为其聚合行为的度量值。将每个非重复计数度量值放入自己的度量值组后,可优化聚合处理。

3、粒度和聚合函数

     在oo中,如果一个对象“车队”的实现只深入到“汽车”这个层次,而不是“发动机”“轮胎”这个层次,那么前者比后者粒度大。
只要能满足需要,粒度当然越大越好,简单实用。在数据仓库中的粒度的概念同上。

     聚合函数用于库表数据统计,如: sum, count, avg。这儿不用多说,在这儿每个度量值的聚合行为都由与该度量值关联的聚合函数确定。

4、维度关系

      指的是维度和事实数据表在一定的维度粒度下的属性。

常规维度关系

       星型模型,没什么好说的,上图:

应用模型关系

     雪花型模型,上图:

多对多维度关系

 

事实维度关系

     事实维度(通常称为退化维度)是通过事实数据表而非维度表中的属性列构造的标准维度。 有用的维度数据有时存储在事实数据表中以减少重复。

5、计算

     终于讲到一个我很感兴趣的话题了,这儿的应该也是操作数据仓库的核心之一。计算是一种多维表达式 (MDX) 表达式或脚本,用于在 SSAS中定义多维数据集中的计算成员、命名集或范围分配。我的理解是,使用计算后可以在原有的一些度量值的基础上生成新的度量值,在之后的浏览cube的时候新的度量值将和原来的一起使用。使用脚本命令可以让计算变得复杂灵活的满足业务需求。

6、关键绩效指标

      在业务术语中,关键绩效指标 (KPI) 是一个用于测定业务绩效的可计量度量值。一个简单的KPI由基本信息、目标、获取的实际值、状态值、走向值以及在其中查看的KPI的文件夹组成。例如,一个单位的销售部门可以使用每月的毛利润作为 KPI,但同一单位的人力资源部门可以使用每季度流失的雇员作为 KPI。 这是一个比较重要的指标,目前暂时理解到这个程度。

7、操作 Action

       操作的主要目的是为了提供给客户端应用程序并可由客户端应用程序使用的已存储 MDX 语句。他是在服务器端定义的客户端的执行命令。我的理解和数据库引擎中的存储过程相似。

8、分区Partition

       分区是部分度量值组数据的容器。简单的分区对象由基本信息(名称、存储模式和处理模式)、切片定义、聚合设计等组成。SSAS使用分区来管理和存储量度值组的数据和聚合。分区对多维数据集的业务用户不可见。允许多维数据集的源数据和聚合数据分布在多个硬盘驱动器和多个服务器计算机中。分区和极大的提高查询性能、负载性能和多维数据集的易维护性。分区的结构必须与其度量值组的结构匹配。

      分区存储

      MOLAP、ROLAP、HOLAP

      主动缓存(分区)

     提供了多个主动缓存配置选项,您可以利用它们来最大化性能,最小化滞后时间以及安排处理。

      远程分区

     远程分区的数据存储在另一个 Microsoft SQL Server Analysis Services 实例上,而没有存储在包含分区定义(元数据)及其父多维数据集的实例上。

     可写入的分区

      都说使用了分区后可提高查询性能,到底是如何提高性能的呢?

9、透视

     透视是多维数据集的只读视图。透视可控制多维数据集所包含对象的可见性。 可在透视中显示或隐藏以下对象:

维度、属性、层次结构、度量值组、度量值、关键绩效指标 (KPI)、计算(计算成员、命名集和脚本命令)、操作。

SSAS系列——【04】多维数据(物理体系结构)

1、本地多维数据集

     本地多维数据集和本地挖掘模型允许在客户端工作站与网络的连接断开时对该工作站进行分析。在与本地多维数据集进行交互时,ADMOD.NET 和 Analysis Management Objects (AMO) 也将加载本地多维数据集引擎。只有一个进程可以访问本地多维数据集文件,这是因为本地多维数据集引擎建立到本地多维数据集的连接时将以独占方式锁定本地多维数据集文件。对于一个进程,最多允许同时有五个连接。一个 .cub 文件可以包含多个多维数据集或数据挖掘模型。对本地多维数据集和数据挖掘模型的查询可通过本地多维数据集引擎处理,不需要连接到 Analysis Services 实例。

图 本地多维数据集

 

2、SSAS的客户端

图 客户端架构

     核心: Analysis Services 的本机协议为 XML for Analysis (XML/A)。Analysis Services 为客户端应用程序提供了数个数据访问接口,但是所有这些组件都使用 XML for Analysis 与 Analysis Services 实例进行通信。

3、SSAS服务器属性和最大容量规范       详见MSDN,以后用到的时候知道在哪儿找就成。

SSAS系列——【05】多维数据(编程体系结构)

1、什么是AMO?

翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在"\100\SDK\Assemblies\AnalysisServices.dll”中找到。使用AMO我们能够增删修改Cube、dimensions、Mining structure,Analysis Service Database,AMO不能够检索数据,要检索数据我们还必须使用ADOMD.NET。

2、AMO的架构?

了解:

图 AMO的架构

此处没有必要深究,使用的过后自然明白。AMO可以实现自动化的可配置的管理程序来服务SSAS。了解AMO的早期版本Decision Support Objects (DSO),最高版本是9.0,逐渐淘汰,对于初学者的我来说,不存在兼容问题,省去不考虑。

3、什么是ASSL?

      Analysis Services Scripting Language (ASSL) DDL实际上就是一个XML文件,用来定义Objects的架构,如何把数据源和对象绑定起来,定义对象的安全性,操作对象,描述对象。

4、什么是XMLA?

 

      The XML For Analysis实际上是一个规范,基于SOAP的XML协议,不管是使用AMO还是ADOMD.NET都必须遵守这个规范。不用详细的看概念,使用过后自然明白。

5、ADOMD.NET概念?

      本身的概念与ADO.NET类似,只不过他是用来处理多维数据,如何Retrieving Metadata、Retrieving Data,改变分析数据的结构,此处需要像有经验的人请教一次即可理解。

图 ADOMD.NET的结构 了解

SSAS系列——【06】多维数据(创建Cube)

1、文件类型说明

项目定义文件 (.dwproj)、项目用户设置 (.dwproj.user)、数据源文件 (.ds)、数据源视图文件 (.dsv)、多维数据集文件 (.cube)、分区文件 (.partitions)、维度文件 (.dim)、挖掘结构文件 (.dmm)、数据库文件 (.database)、数据库角色文件 (.role)。第一次启动,纪念贴。

图 启动界面 留念

图 默认文件夹中内容

2、创建数据源、数据源视图、维度、定义和部署多维数据集

图 按SDK操作界面

注意,数据源视图一定要选择“使用服务账号”,否则会部署失败,SDK中没有详细说明。

图 数据源模拟信息界面

图 Cube数据浏览

3、修改度量值、属性和层次结构

a、添加维度的层次结构

很简单,只需要拖动鼠标即可以完成设置工作,设置完成后需要重命名。

图 设置维度的层次结构

图 设置属性关系

刚性关系不随时间变化而变化:

图 设置关系属性

 

b、添加命名计算

在数据源视图中,选择表,单击右键,选择“新建命名计算”:

图 编辑命名计算

c、定义显示文件夹

选择要放入文件夹中的维度值(按Ctrl键可以多选),右键,属性

图  设置AttributeHierarchyDisplayFolder值

 

d、定义组合的KeyColumns

图 设置KeyColumns

图 组合值

图 设置显示值

e、查看更改、部署生效

图 OLTP数据库内容更新

图 维度更新后需要重新部署

图 Cube浏览

SSAS系列——【07】多维数据(查询Cube)

1、什么是MDX?

MDX叫做“多维表达式”,是一种查询语言,是一种和SQL类似的查询语言,它基于 XML for Analysis (XMLA) 规范,并带有特定于 SQL Server Analysis Services 的扩展。

2、MDX与SQL有什么区别?

学东西,总是喜欢“先入为主”,在学习MDX的时候我第一个想法是:MDX与SQL有什么区别?其实搞清楚这个问题后,MDX是什么也就算搞清楚了。SQL是基于OLTP的,而MDX是基于OLAP的,也就是说,MDX是对多维数据进行查询的。MDX和SQL一样,也有很多不同功能的API来支持MDX。其中包括对象链接和为在线分析处理的内嵌数据功能(也就是OLE DB for OLAP)、ADO MD、ADOMD.Net、XMLA(XML for Analysis)等。OLE DB for OLAP的规范描述了MDX查询和将被查询信息发送给客户端的数据结构之间的完整关系。

3、MDX能做什么?

从SSAS多维数据集向客户端应用程序返回数据;设置查询结果的格式;执行多维数据集设计任务,包括定义计算成员、命名集、范围分配和关键绩效指标 (KPI);执行管理任务,包括维度和单元安全性。

4、第一个多维查询?

查询1965年中国的石油存储量(数据虚拟)?

图 查询截图

select {[Measures].[Oil Proved Reserves]} on columns 
,{[Dim Time].[年份].&[19]} on rows from [BPDW]
where [Dim Geography].[国家名称].&[Total Asia Pacific]&[China]

图 MDX查询结果

哈哈,到这一步一般都会小有成就感,其实就这么简单,捣鼓几下就出来了,下面的问题中,我得介绍一下MDX中比较重要的知识,把那些需要常用的东东要像自己的名字一样深深的置入脑海。

SSAS系列——【08】多维数据(程序展现Cube)

1、引用DLL?

      按照之前安装的MS SQLServer的步骤安装完成后,发现在新建的项目中“Add Reference”时居然找不到Microsoft.AnalysisServices.AdomdClient命名空间,不知道是什么状况?只好添加DLL了,在“C:\Program Files\Microsoft.NET\ADOMD.NET\100\Microsoft.AnalysisServices.AdomdClient.dll”下找到了该文件,该文件的最后修改时间是2009年3月30日,534KB。如图:

图 AdomdClient.dll的磁盘路径

2、连接字符串?

本人觉得这一块和ADO.NET没有太大的区别,此处我使用的连接字符串是:Provider=SQLNCLI10.1;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=BPDW; ,该字符串可以在数据源设计器中找到,所以根本无需记忆,会找即可。

图 连接字符串

3、第一个程序

 

代码
string ReturnCommandUsingCellSet()
{
//Create a new string builder to store the results
System.Text.StringBuilder result = new System.Text.StringBuilder();
//Connect to the local server
using (AdomdConnection conn = new AdomdConnection("Provider=SQLNCLI10.1;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=BPDW;"))
{
conn.Open();
//Create a command, using this connection
AdomdCommand cmd = conn.CreateCommand();
cmd.CommandText = @"select {[Measures].[Oil Proved Reserves]} on columns ,{[Dim Time].[年份].&[19]} on rows from [BPDW]where [Dim Geography].[国家名称].&[Total Asia Pacific]&[China]";
//Execute the query, returning a cellset
CellSet cs = cmd.ExecuteCellSet();
//Output the column captions from the first axis
//Note that this procedure assumes a single member exists per column.
result.Append("\t");
TupleCollection tuplesOnColumns = cs.Axes[0].Set.Tuples;
foreach (Microsoft.AnalysisServices.AdomdClient.Tuple column in tuplesOnColumns)
{
result.Append(column.Members[0].Caption + "\t");
}
result.AppendLine();
//Output the row captions from the second axis and cell data
//Note that this procedure assumes a two-dimensional cellset
TupleCollection tuplesOnRows = cs.Axes[1].Set.Tuples;
for (int row = 0; row < tuplesOnRows.Count; row++)
{
result.Append(tuplesOnRows[row].Members[0].Caption + "\t");
for (int col = 0; col < tuplesOnColumns.Count; col++)
{
result.Append(cs.Cells[col, row].FormattedValue + "\t");
}
result.AppendLine();
}
conn.Close();
return result.ToString();
} // using connection
}