1、打开sql server2008登陆数据库引擎里面,如图片:
注意:服务器类型选择数据库引擎;
然后连接进入····
2、新建一个叫CubeTest的数据库
然后使用数据库建表语句创建数据表:
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官网上面去查询