微軟BI 之SSAS 系列 - 基於雪花模型的維度設計


基於雪花模型的維度以下面的 Product 產品與產品子類別,產品類別為例。 DimProduct 表和 DimProductSubcategory 表有外鍵關系,而 DimProductSubcategory 表和 DimProductCategory 表存在外鍵關系。

測試的維度表與數據 - 
USE BIWORK_SSIS GO

IF OBJECT_ID('DimProduct') IS NOT NULL
DROP TABLE DimProduct GO

IF OBJECT_ID('DimProductSubcategory') IS NOT NULL
DROP TABLE DimProductSubcategory GO

IF OBJECT_ID('DimProductCategory') IS NOT NULL
DROP TABLE DimProductCategory GO

SELECT ProductKey, ProductAlternateKey, ProductSubcategoryKey, EnglishProductName, StandardCost, Color, SafetyStockLevel, ListPrice, Class, Size, StartDate, EndDate, [Status], ProductAlternateKey + ' (' + CONVERT (Char(10), StartDate, 120) + ')' AS ProductID INTO DimProduct FROM AdventureWorksDW2012.dbo.DimProduct SELECT ProductSubcategoryKey, ProductSubcategoryAlternateKey, EnglishProductSubcategoryName, ProductCategoryKey INTO DimProductSubcategory FROM AdventureWorksDW2012.dbo.DimProductSubcategory SELECT ProductCategoryKey, ProductCategoryAlternateKey, EnglishProductCategoryName INTO DimProductCategory FROM AdventureWorksDW2012.dbo.DimProductCategory ALTER TABLE DimProductCategory ADD CONSTRAINT PK_CategoryKey PRIMARY KEY CLUSTERED(ProductCategoryKey) GO

ALTER TABLE DimProductSubcategory ADD CONSTRAINT PK_SubCategoryKey PRIMARY KEY CLUSTERED(ProductSubcategoryKey) GO

ALTER TABLE DimProduct ADD CONSTRAINT PK_Product PRIMARY KEY CLUSTERED(ProductKey) GO

ALTER TABLE DimProduct ADD CONSTRAINT FK_SubcategoryKey FOREIGN KEY(ProductSubcategoryKey) REFERENCES DimProductSubcategory(ProductSubcategoryKey) ALTER TABLE DimProductSubcategory ADD CONSTRAINT FK_CategoryKey FOREIGN KEY(ProductCategoryKey) REFERENCES DimProductCategory(ProductCategoryKey) SELECT * FROM DimProduct SELECT * FROM DimProductSubcategory SELECT * FROM DimProductCategory

新建一個 SSAS 項目並創建數據源和數據源視圖 -

新建一個 Dimension 指定使用 DimProduct 表,Key Column 為 ProductKey 列,Name Column 為 Product ID 列。每個屬性都有兩種特性:Key Column 來引用唯一確定屬性成員的一列 (如果是復合主鍵的話可能是多列),Name Column 來引用包含描述性標簽的列,它是顯示在報表上被瀏覽的文本。

由於 DimProduct 表是雪花型產品維度的一部分,因此相關聯的表業也會被包括進來,向導默認為每個表的主鍵創建屬性。

選擇需要出現在維度中的維度屬性,用戶根據這些屬性來查看相應的事實數據。

重命名屬性,讓這些屬性名稱看起來更符合人們的習慣。

下一步並指定維度名稱為 Product ,就可以看到維度設計中維度以及它下面的屬性,可以部署一下這個項目。

部署之后可以在 Browser 瀏覽器中查看屬性層次結構,在維度中的每一個屬性都是一個屬性層次結構,它通常包含兩個級別:一個是 ALL 級別,第二個是由 Category 屬性值構成的級別。 但是在這里看到的 Category ALL 級別下的成員都是數值,並不能明確表示它自身的含義。這是因為我們之前在創建這個屬性的時候,只默認指定了 Category 的 Key Column 而沒有指定 Category 的 Name Column,因此需要修改這些屬性的 Name Column。

修改屬性 Category 的 Name Column ,同樣的還需要修改 Subcategory 。

修改完成之后重新部署一下,就可以看到對應的屬性標簽內容了。

接下來我們需要創建一些層次結構來方便用戶從指定的角度來查看事實數據。維度中的層次結構一般分為:屬性層次結構,用戶自定義層次結構中的非自然層次結構和自定義層次結構中通過創建屬性關系所識別的自然層次結構。

屬性層次結構我們前面我們已經看到過了,即每一個屬性都是一個屬性層次結構。屬性層次結構一般含有兩層,第一層是 ALL 級別,第二層是自身數據形成的成員級別。

自定義層次結構的自然層次結構中,每一個子成員都只有一個父成員,並且級別可能多於兩級。 我們可以通過創建屬性關系來建立自然層次結構,創建屬性關系可以加快數據庫的處理速度。 由於提供了更快的數據訪問並改善了查詢執行計划,從而也提升了查詢性能。

自定義的層次結構也包含自然層次結構,但是也可以不是自然層次結構,也就是說子類可能存在多個父類。

對於產品,產品子類,產品大類這幾個屬性來說,是符合自然層次結構的要求的。一個產品只屬於一個產品子類,一個產品子類也只屬於一個產品大類。

對於顏色和大小,一個顏色可以對應多個不同大小的尺碼,不同大小的尺碼也可以對應多個顏色。那么為顏色和大小創建自定義的層次結構,就是屬於自定義層次結構中的非自然層次結構了。

創建 Category - Subcategory - Product 這樣的層次結構,並創建 Color - Size 這樣的層次結構。

在屬性關系中查看各個屬性是如何關聯的,下圖所示可以看到基本上所有的屬性都是通過關鍵屬性 Product ID 相關聯的, Category 和 Product ID 是通過 Subcategory 間接關聯的。 那么在分析服務中,這種關聯關系表示了分析服務可以通過聚合所有與某個 Category 相關的 Subcategory 的值來得到該 Category 的值。但是分析服務不能從 Product 中得到 Subcategory 的值,因為 Product 和 Subcategory 沒有關系。

我們通過修改 Product 和 Subcategory 的屬性關系實現了一種自定義的自然層次結構。但是像 Color 和 Size 這種本身在層次邏輯上就並不存在這種自然層次結構的特征,因此就不需要做出任何改變了。

部署並查看層次結構 - Product By Category  -

Color by Size -

 

更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。


免責聲明!

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



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