商業智慧語意表格式模型中的基本階層設計

  • 4639
  • 0

商業智慧語意表格式模型中的基本階層設計

大家對於多維度模型最深的印象通常就是維度的階層可以進行下鑽(drill-down)、展開(Expand)、拖放(Drag & drop)以及切片篩選(Slice & dice)等操作。說穿了,階層(Hierarchy)的作用其實就是定義出彼此關聯的一組屬性(Attribute)間快速導覽的順序。因此階層的各層級並不必然具備條件約束(也就是說您若是想要設計出日-季-月-年這種階層也不會受到限制),但是在設計階段仍舊必須要深思熟慮哪種階層配置對於使用者來說是最直覺且具有分析意義的。

在商業智慧語意表格式模型中定義階層有幾個限制:

  • 必須切換至「圖表檢視」才能夠瀏覽與設計階層。
  • 各個層級所使用的資料行必須位於同一個資料表中。

一般階層的設計方式非常簡單,首先將SSDT畫面切換為「圖表」檢視,接下來將滑鼠點選要增加階層的資料表後按右鍵,選取「建立階層」,此時就會在此資料表中新增階層物件。

image

接下來可以透過滑鼠,將所需要的層級(Level)資料行拖放至階層物件中(例如我們設計了作業系統階層,第一層放的是「作業系統平台」,而第二層放的是「作業系統」)。您也可以直接透過按右鍵,調整階層與層級的名稱。以下圖為例,由於「作業系統平台」以及「作業系統」已經被放在階層中,為了讓日後資料模型在顯示時能夠更為精簡,通常會建議將原始的「作業系統平台」以及「作業系統」設定為隱藏,也就是避免相同資訊的資料行在同一個資料表中重複顯示,造成使用者日後操作上的混淆。

image

設計完成階層後,日後各位就能夠在任何商業智慧前端工具進行階層的檢視操作。

image

 

階層都位於同一個資料表的結構我們稱之為星狀架構(Star Schema),這可以說是最簡單的維度模型,它會被稱之為星狀架構的主因是當事實資料表位於中心,而單一維度資料表環繞其外的形狀,看起來就像是一個放射狀的星形。

image

至於雪花狀架構(Snowflake Schema)則是將星狀架構的「維度資料表」根據資料重複性以及階層關係進行局部正規化,例如產品維度(Product)中,裡面記載產品的敘述性欄位具有高度重複性,例如產品類別(Product Category),同時這兩個欄位本身與產品代碼呈現階層關係,因此我們可以將產品維度資料表進行正規化,拆解成產品資料表(Product)、產品類別(Product Category)二個資料表。其中,產品資料表主索引鍵為產品代碼,透過此主索引鍵與事實資料表連結;而產品類別資料表主索引鍵為產品類別代碼,透過此主索引鍵與產品資料表連結。這樣的結構由於像是星狀放射狀在向外延伸,有如雪花的結晶般,因此才稱之為雪花狀架構。

image

在傳統的觀念中總認為星狀架構的效能優於雪花狀架構,事實上以現行微軟技術無論是多維度模型或者是表格式模型中,星狀架構與雪花狀架構其實效能上並無太大差異。

由於之前曾經提到在商業智慧語意表格式模型中,階層內的層級必須為位於同一個資料表。那麼當我們想要設計的階層來自於多個資料表時該如何處理呢?

image

上圖中,產品大類與產品分置於兩個資料表中。若我們依照之前介紹的階層設計方式,各位可以發現「產品大類名稱」資料行是無法直接拖放到位於產品別資料表的階層中的,見下圖。那是因為目前商業智慧語意表格式模型中並不允許括資料表的階層結構。

image

為了能夠實作雪花狀結構的階層,此時我們需要在產品別資料表上新增名為「產品大類」的導出資料行,其公式如下:

 

 

導出資料行範例:

產品大類

=RELATED('產品大類別'[產品大類名稱])

 

此導出資料行的意義是根據鍵值,查閱該產品在「產品大類別」資料表的「產品大類名稱」資料行結果。其計算結果如下圖。

image

如此一來我們就可以直接利用導出資料行「產品大類」來設計階層,見下圖,同樣的為了讓資料模型看起來精簡,我們可以將「產品」大類別資料表隱藏。由於這種技巧是讓雪花狀架構轉換為星狀架構,等於是減少了資料模型的複雜度,卻又不必事前透過ETL將資料表作整併,也因此這種設計技術也被稱之為模型的降階(Degenerate)。

image

 

亞洲資採臉書粉絲團:www.facebook.com/AsiaMinerTW

asiaminerQR

Allan Yiin

CTO, AsiaMiner