Sql Server分析服務與多維數據庫的學習——CUBE創建【轉】


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM