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项目,自定义名称后确定。
如图:
记住:是“商业智能项目”;
第二步:在解决方案资源管理器中,选择数据源,右键新建一个数据源
如图:
点击“新建”