Key Attribute和Key Column:蘋果和桔子

drillchina發表於2008-07-19

“SQL Server 2005分析服務裡面的Key Attribute和Key Column有什麼關係呢?”今天在和一夥對微軟的分析服務和商業智慧技術感興趣的朋友們聊天的時候,有幾位突然問了這個問題。

確實,兩個概念裡面都有Key這個字,但是他們之間究竟有什麼關係呢?我的答案是他們就是蘋果和桔子,沒有多大關係。兩個概念雖然都是在多維資料庫的維度物件中存在的,但是兩者扮演的確實截然不同的角色。

Key Attribute

Key Atribute是一個維度的主鍵屬性,Key Attribute決定了一個維度例項中成員的最小粒度取值。拿日期時間舉個例子,如果時間維度中我們設定一個精度為小時的日期時間值或與其一一對應的某列作為Key Attribute,那麼就代表時間維度最小粒度的成員就應該是表示一個精度到小時的確切時間,如果Key Attribute是天,那麼時間維度最小粒度的成員就是精度到天。

正是因為如此,維度的Key Attribute也是用於連線維度與度量組、維度與維度之間的連線依據(除了事實維度關係外,這種維度關係表示維度成員和度量值成員是一一對應的關係)。那上面的例子來說,如果我們設定一個精度為小時的欄位為Key Attribute,那麼我們度量值在時間維度上的聚合就可以達到小時級別,否則就只能達到天級別。

因此,一個維度,只能有一個Key Attribute,就像一張關係型的表只能有一個主鍵一樣(要說這兩者概念差不多也沒有大錯,通常維度表的主鍵就是維度的Key Attribute)。

Key Column

那麼Key Column呢?Key Column是用來確定一個Attribute成員取值的標準的列或列的組合。一個Attribute的成員通常是該Atrribute在資料來源對應維度表中的列中的所有唯一值(注意,是唯一值),例如商品類別名稱,如果你在商品類別表中有30個唯一值,那麼商品類別Atrribute就會生成30個成員。

不過這種情況會有特例,比如說時間維度,時間維度表裡面的Semester,如果我們僅僅依據Semester來判斷Semester Attribute的成員的,那麼這個Attribute就只會有2個成員:上半年和下半年,而實際情況並非如此。

2002年的上半年與2003年的上半年在Semester Attribute中通常應該被看作是不同的Memeber,除非使用者希望認為2002年的上半年和2003年的上半年應該被視為同一個成員。那麼如何讓分析服務在計算多維資料庫的時候能分辨出2002年的上半年和2003年的上半年呢?就必須要在Semester的Key Column裡面同時繫結Year和Semester兩列。那麼客戶不需要區別呢?當然就只要繫結Semester一個列就可以啦。

因此,一個Attribute裡面會有多少個成員,是由這個Attribute的Key Column決定的。說句題外話,至於Attribute中每個成員的顯示值和後臺實際值,則是分別由Name Column和Value Column決定的。

對於上面這個問題的深入分析就需要看客戶的實際需求,如果客戶看一下所有銷售定單中上半年的退訂率和下半年的退訂率,那麼在Semester Attribute中同時繫結Year和Semester就不能直接給出正確的結果。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9079672/viewspace-405419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章