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官網上面去查詢