您的位置:首页 > 数据库

Sql Server分析服务与多维数据库的学习——CUBE创建

2012-12-12 18:11 260 查看
1、打开sql server2008登陆数据库引擎里面,如图片:

View Code

USE [CubeTest]
GO
/****** Object:  Table [dbo].[Factdata_2012]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Factdata](
[TRM_ID] [int] NULL,
[YYMM_ID] [int] NULL,
[City_ID] [int] NULL
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Dim_TRADE]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dim_TRM](
[TRM_ID] [int] IDENTITY(1,1) NOT NULL,
[TRM] [varchar](10) NULL,
[TRMN] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[TRM_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Dim_Time]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dim_Time](
[YYMM_ID] [int] IDENTITY(1,1) NOT NULL,
[HGDATE] [varchar](10) NULL,
[yy] [varchar](10) NULL,
[mm] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[YYMM_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Dim_City]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dim_City](
[City_ID] [int] IDENTITY(1,1) NOT NULL,
[City] [varchar](10) NULL,
[CityN] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[City_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO


好了,数据库的原始表创建好,现在到我们的重头戏了“cube的创建过程”

1、“cube的创建过程”:

  Cube的创建实质上可以分成2个步骤:

    第一:通过ETL将客户的生产库数据加工成建CUBE所需的元数据表;

    第二:通过Microsoft Visual Studio 2008创建一个analysis service分析服务项目,进行CUBE的创建和部署;

作为演示例子:我们上面所创建的的CubeTest就相当于”第一“那里的元数据表,只是实际的生产环境中元数据表的通过ETL来创建。

接下来,我们来进行上面所提到的第二部,但是在进行这个步骤之前,我们首先要解决自己心中的几个疑问,只有解答了这些疑问才能够真正的理解我们为什么要建立Cube??

问题一:什么是维度和度量值

  示例:你的客户想看销售额,要从时间、城市、企业类型各个角度来查看,这里的时间、城市、企业类型就是维度,销售额就是度量值。

    如:2009年5月份,广州和汕头市国有企业销售额为2088亿美元

在上面的例子中:时间(2009-5)、城市(广州、汕头)、企业(企业类型:国有企业)分别就是时间维度、城市维度和企业类型维度;销售额就是度量值。

问题二:什么是维度表和事实表?创建cube所需要的元数据库是什么样的结构呢?

  维度表就是用来存储维度数据的表,用来记录从哪个方向来描述事实。事实表是用来存储度量值以及维度和度量值对应关系的表

下面来看一下维度表和事实表的结构和关系

  



上图中,以DIM开头的表都是维度表,Factdata是事实表。看一下它们的表结构:



假设我们要查询条件为“广州地区以汽车方式的USD”,那么如果用传统的sql语句可能就要,如:select USD from Factdata_2012 a left outer join Dim_City 然后再outer join Dim_TRM来进行查询(PS:具体类似是外连接表的select操作,我本人也没具体实际操作过,因为平常根本很少需要这样的操作,同时插入多个表的操作可能还比这个多些···~~而且,这么多的外连接操作效率可想而知); 而Cube和MDX也就是为了解决这样的问题而诞生的;

  以上是城市维度Dim_City、运输方式Dim_TRM、事实表FactData的表结构。

城市表中存储了所有的城市名称cityN,其对应的city_id和城市编号City。我们将其理解为城市的字典表

事实表中会存储所有维度的ID和度量值,说明维度和度量值的对应关系。其中USD字段就是以后建cube时的度量值,请记住

下面我们来实际操作Microsoft Visual Studio 2008创建一个cube

第一步:打开VS2008,新建项目,选择analysis services项目,自定义名称后确定。

如图:



记住:是“商业智能项目”;

第二步:在解决方案资源管理器中,选择数据源,右键新建一个数据源

如图:





点击“新建”



录入服务器名,选择cube的元数据库(CubeTest),点击“确定”,

点击下一步,在下图中务必选择“使用服务账户”



一直下一步,直至完成。

第三步:新建数据源视图

在解决方案资源管理器中选择“数据源视图”,右键新建



一直点击下一步,到以下界面中,选择需要放到cube中的表,点击下一步直到完成 ;

最终得到下面的关联:(PS:有时候可能需要手动的建立关联)



第三步:在解决方案资源管理器中新建多维数据集



点击下一步,一直到以下界面,系统要求选择事实表。请选择Factdata



点击下一步,选择实施表中的度量值字段,这里选择USD字段即可



点击下一步,系统会自动根据我们的选择,和数据源视图中表与表之间的关系生成维度。

如下图所示,我们可以通过双击名称进行维度名称的修改。下图左为修改前 右为修改后





一直下一步,点击完成后,一个基本的cube创建完成,如图所示



第四步:目前这个cube仅仅是一个最为基础的cube,为了适应我们的需求,我们需要对维度和cube进行一些修改。

(1)双击打开运输方式维度(城市维度和运输方式的修改方法一样)





从这个图中我们可以看到,运输方式只有TRM_ID一个属性,但是这个属性用户是没法使用的,因为ID是我们系统内部的一个表示,对用户来讲没有任何意义,所以我们需要展现给用户的是运输方式名称TRMN字段。同时我们不需要将TRM_ID显示给用户,但是因为ID是主键我们不能删除,所以需要将ID属性设置为不可见。

a) 用鼠标将其拖到属性框中

b) 点击TRM_ID,在属性窗口中,将AttributeHierarchyVisible属性改为False



这样,将来部署之后,用户在前台只能看到运输方式名称,不能看到ID。

第五步:修改时间维度。

微软建议每一个cube都有一个时间属性的维度;时间维度存在层次结构,也就是实现“年-上下半年-季度-月份-日期”这种结构。

A)实现方法,将年字段yy、月字段mm、日期字段HGDATE加到属性窗口。将yy改名为Year,将Mm改为Month,将HGDATE改为Day,这样比较方便理解

B)先将Year属性拖入“层次结构”框中,然后将Month拖入Year下面,将Day拖入Month下面,实现层次结构。

第六步:现在cube建好了,我们点击菜单“生成”-“部署”,将cube部署起来。



第七步:打开sql server,连接分析服务器





至此,完成。

有关MDX语句的使用可以到msdn官网上面去查询
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐