开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2011.11.03
关于SQLServer产品,我从2004年就开始使用了,SQLServer2K,2K5,2K8,到如今已经准6年了,说来惭愧,这六年来所涉及的内容都是在数据库引擎部分,最近有一个机会需要用到多维数据、数据挖掘技术,借此机会把自己的数据库的知识面扩充一下。立志一系列的博文记录之,以备日后温习。
1、本系列的学习目标、实施计划是什么?
“凡事预则立”,做事得有一个目标和实施计划。
目标:
全面熟悉SQLServer2008产品,掌握扎实的理论知识;
实际使用SQLServer2008产品,积累初级经验;
能够熟练使用MDX语言,承担多维数据库的编程工作;
计划:
2、什么是SQLServer?SQLServer2008R2版本?
图一微软SQLServer图标
SQLServer是微软公司一个非常强大的产品,就现在的SQLServer2008而言,可以算得上是一个解决方案了,它包括从数据的存储、分析、挖掘、报表和优化等一篮子内容,最终的目的还是在于快捷的完成用户的需求。如上图一,是微软公司SQLServer产品的Logo,整个logo有一种多维立体的感觉,好似从万千纷繁复杂的数据中杀出一条血路走向金字塔的顶端共领导决策,很是smart,呵呵,扯的有点远啦哈。
2008年8月7日,微软正式发布SQLServer2008;据说2010年05会推出SQLServer2010R2版本。
3、SQLServer2008总体结构图?SQLServer2008包含哪些工具?
图二SQLServer功能图
图二是SQLServer的总体功能图,BizTalkServer是什么东东?在SQLServer2008中,我们可以通过工具来对它进行操作。
SQLServerManagementStudio、BussinessIntelligenceDevelopmentStudio、ReportingServices组件及工具、SQLServer2008IntegrationServices(SSIS)。其它的多了也没用。
4、在那里下载商业智能开发环境?如何安装?
SQLServer企业版本中自带此环境,也在网上单独找了一下,还真没发现那个地方可以独立下载。
6月24日有幸得到同行匡贤绪老师的知道,SQLServer2008已经成功安装。说一下我的安装环境吧,操作系统Windows7旗舰版本,该版本自带dotnetframework3.5.1,所以无需另外安装;安装SQLServer2008的另一个条件是必须安装IIS。所以必须在控制面板——程序——打开和关闭Windows功能中勾上IIS,安装成功后,准备工作就完成了。
下面开始装SQLServer2008,我安装的企业版本的SQLServer。需要注意:64位的操作系统下,必须安装64位的SQLServer;安装的过程中会提示需要安装SQLServerSP1后程序才能正确运行,可暂时忽略不计;SQLServer2008的各个服务可以分开设置系统管理员权限;安装数据库引擎的时候,最好是以混合模式安装,并记录SA账号的密码,以后用得着。上面这些问题,都截了图,明天上图为证。
图三兼容性问题
图四操作系统位数问题
图五默认安装目录
图六访问账号
5、数据仓库?
文到此,不得不提到数据仓库的概念,微软、IBM、SAP提到的数据仓库的方案都大同小异,接下来的问题中来分析说明。数据仓库的概念最先是在某某年某某人士提出来的,英文名叫DW,它是对数据处理的一篮子的概念,是面向决策系统,在线联机分析处理系统的结构化数据环境。并不是字面上的意思,仓库吗?用来存东东的。存什么东东呢?前面有“数据”二字,想当然的那就是用来存数据的呗,简单。翠花,上图:
图七数据仓库架构图
6、数据库与数据仓库有什么区别?
我认为数据库和数据仓库根本就无法比较,是完全两个不同的概念。之所以在此单独提出来,周围的朋友喜欢拿这两个概念做比较。数据仓库本身包括输入、存储、输出这传统的三层。数据库呢?好像只有存储。
6、SSAS的逻辑架构?
图八是总体逻辑结构图
MSND中,在这幅图的下边有一段非常费解的话,姑且不照抄了。我的理解是“三个一对多”。服务器——AnalysisServices实例——服务器对象——数据源。7、各厂商数据仓库产品比较?
1、维度是什么?
图一MSDN中关于维度的概念
2、服务器对象的内容?
包括数据源、数据视图、数据库对象、安全角色和程序集。前4个都不难理解。关于程序集的概念,还需加强一下,程序集可为两种不同的类型:COM和CLR。CLR程序集是使用.NETFramework编程语言(如C#、VisualBasic.NET和托管C++)开发的程序集。说白了,你可以使用C#语言来编程处理服务器对象。
3、维度对象的内容?
简单Dimension对象由基本信息、属性和层次结构组成。基本信息包括维度的名称、维度的类型、数据源和存储模式等。属性可定义维度中的实际数据。属性可不必属于层次结构,但层次结构却要由属性生成。层次结构不但可创建级别的有序列表,还可定义用户浏览维度的方式。简单的讲,就像Session对象中的键值对一样,这里的key(基本信息)、Value(属性),但这里key之前可能存在一定的关系,所以多了一个层次结构。
维度的结构
a、最简单的——星型结构
特点:每个维度均基于一个通过主键-外键关系直接链接到事实数据表的维度表。不多说了,直接上图。
图二星型结构
b、最复杂的——雪花结构
图三雪花型结构
维度的存储
a、ROLAP
使用ROLAP的维度的数据实际上存储在用于定义维度的表中。相对查询性能低。
b、MOLAP
使用MOLAP的维度的数据存储在AnalysisServices实例中的多维结构中。相对查询性能高。
c、HOLAP
结合了ROLAP和MOLAP的存储方式。
4、维度如何落地?
维度本身是一个很抽象的东东,它通过属性来和数据库表挂钩。说到属性,就豁然开朗了,在OO的概念中,属性的概念无处不在。维度落到实处也就是属性的集合,这些属性是由数据源中数据表的列来提供的,一个或者多个列组合,有多个列存在,那不就乱了么?所以再找一个属性中的“老大”,那就是数据表中的主键,于是新出来个新名词,叫做“键属性”,我觉得键属性是成对出现的,主要是事实表中的主键和维度表的外键,双键合璧,那对于星型模型而言,维度都表都和键属性直接挂钩,而雪花型模型,只有部分和键属性挂钩咯,弱弱的说,MSDN是这么说的。
存在这么多的“属性小兵”,如果把这些小兵的层次和属性联合起来,有满足“层次结构包含的每个属性都与其下直接属性一对多”时,叫做“自然层次结构关系”,晕死个人,不过也不难理解。
续ing
简单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
主动缓存(分区)
远程分区
远程分区的数据存储在另一个MicrosoftSQLServerAnalysisServices实例上,而没有存储在包含分区定义(元数据)及其父多维数据集的实例上。
可写入的分区
都说使用了分区后可提高查询性能,到底是如何提高性能的呢?
9、透视
透视是多维数据集的只读视图。透视可控制多维数据集所包含对象的可见性。可在透视中显示或隐藏以下对象:
1、本地多维数据集
本地多维数据集和本地挖掘模型允许在客户端工作站与网络的连接断开时对该工作站进行分析。在与本地多维数据集进行交互时,ADMOD.NET和AnalysisManagementObjects(AMO)也将加载本地多维数据集引擎。只有一个进程可以访问本地多维数据集文件,这是因为本地多维数据集引擎建立到本地多维数据集的连接时将以独占方式锁定本地多维数据集文件。对于一个进程,最多允许同时有五个连接。一个.cub文件可以包含多个多维数据集或数据挖掘模型。对本地多维数据集和数据挖掘模型的查询可通过本地多维数据集引擎处理,不需要连接到AnalysisServices实例。
图本地多维数据集
2、SSAS的客户端
图客户端架构
翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在"\100\SDK\Assemblies\AnalysisServices.dll”中找到。使用AMO我们能够增删修改Cube、dimensions、Miningstructure,AnalysisServiceDatabase,AMO不能够检索数据,要检索数据我们还必须使用ADOMD.NET。
2、AMO的架构?
了解:
图AMO的架构
此处没有必要深究,使用的过后自然明白。AMO可以实现自动化的可配置的管理程序来服务SSAS。了解AMO的早期版本DecisionSupportObjects(DSO),最高版本是9.0,逐渐淘汰,对于初学者的我来说,不存在兼容问题,省去不考虑。
3、什么是ASSL?
AnalysisServicesScriptingLanguage(ASSL)DDL实际上就是一个XML文件,用来定义Objects的架构,如何把数据源和对象绑定起来,定义对象的安全性,操作对象,描述对象。
4、什么是XMLA
TheXMLForAnalysis实际上是一个规范,基于SOAP的XML协议,不管是使用AMO还是ADOMD.NET都必须遵守这个规范。不用详细的看概念,使用过后自然明白。
5、ADOMD.NET概念?
本身的概念与ADO.NET类似,只不过他是用来处理多维数据,如何RetrievingMetadata、RetrievingData,改变分析数据的结构,此处需要像有经验的人请教一次即可理解。
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数据库内容更新
图维度更新后需要重新部署
1、什么是MDX?
MDX叫做“多维表达式”,是一种查询语言,是一种和SQL类似的查询语言,它基于XMLforAnalysis(XMLA)规范,并带有特定于SQLServerAnalysisServices的扩展。
2、MDX与SQL有什么区别?
学东西,总是喜欢“先入为主”,在学习MDX的时候我第一个想法是:MDX与SQL有什么区别?其实搞清楚这个问题后,MDX是什么也就算搞清楚了。SQL是基于OLTP的,而MDX是基于OLAP的,也就是说,MDX是对多维数据进行查询的。MDX和SQL一样,也有很多不同功能的API来支持MDX。其中包括对象链接和为在线分析处理的内嵌数据功能(也就是OLEDBforOLAP)、ADOMD、ADOMD.Net、XMLA(XMLforAnalysis)等。OLEDBforOLAP的规范描述了MDX查询和将被查询信息发送给客户端的数据结构之间的完整关系。
3、MDX能做什么?
从SSAS多维数据集向客户端应用程序返回数据;设置查询结果的格式;执行多维数据集设计任务,包括定义计算成员、命名集、范围分配和关键绩效指标(KPI);执行管理任务,包括维度和单元安全性。
4、第一个多维查询?
查询1965年中国的石油存储量(数据虚拟)?
图查询截图
图MDX查询结果
1、引用DLL?
图AdomdClient.dll的磁盘路径
2、连接字符串?
本人觉得这一块和ADO.NET没有太大的区别,此处我使用的连接字符串是:Provider=SQLNCLI10.1;DataSource=localhost;IntegratedSecurity=SSPI;InitialCatalog=BPDW;,该字符串可以在数据源设计器中找到,所以根本无需记忆,会找即可。