SQL Server Analysis Service – 在維度中使用分組 (Discretization)

來源:互聯網
上載者:User

在SQL Server Analysis Service中,維度(Dimension)是一個非常重要的概念,通常情況下一個包含多個屬性,每個屬性為某個對象(例如Customer, Product等)的一個欄位表現。這樣,對於每個維度特定屬性,唯一列舉了所有可能出現的值。在某些情況下,這些屬性具有數百萬個值而且不具有任何階層,這對於業務人員來說要想找到某個特定的值就會非常困難,如果能夠將他們分組-例如Year-Quater-Month-Date這樣的結構類似,但不採用Hierarchy--這樣尋找起來就會非常簡單。這就引入了分組的概念。舉個簡單的例子對於年度營收,在一個擁有數百萬員工的單位,每個人的工資收入在很大範圍內是不同的,這樣Yearly Income這個屬性就會有很多的值。而在現實中我們可能更喜歡根據一個區間去限制這些統計值。分組的概念就是將這些屬性值按區間進行歸類。

 

成員組是系統產生的連續維度成員的集合。 在 Microsoft SQL Server Analysis Services 中,可以通過名為離散化的進程將屬性成員分成若干成員組。階層中的層級或者包含成員組,或者包含成員,但是不能同時包含二者。 業務使用者瀏覽包含成員組的層級時,將看見成員組的名稱和單元值。 由 Analysis Services 為了支援成員組而產生的成員稱為分組成員,看上去與普通成員相同。

 

通過使用DiscretizationMethod和DiscretizationBucketCount屬性,Analysis Service可以自動為您建立組.使用DiscretizationMethod 屬性控製成員的分組方式:

 

DiscretizationMethod 設定  

None

顯示成員,不分組。

Automatic

選擇最佳資料標記法: EqualAreas 方法或 Clusters 方法。

EqualAreas

嘗試將屬性中的成員分成若干包含相同數量成員的組。

Clusters

嘗試通過抽樣定型資料、初始化為大量隨機點和運行幾次期望最大化 (EM) 群集演算法的迭代來將屬性中的成員分成若干組。

本方法的好處是適用於任何分布曲線,但就處理時間而言開銷較大。

例如,對於Adventure Works DW2008,我將Yearly Income的DiscretizationMethod屬性設定為Automatic後會有如下分組:

 但很顯然,這讓你無法可以隨心所欲的控制區間及顯示名稱(即使你可以使用Name Template)。某些情況下如果你願意,你也可以通過在資料庫表中增加一個計算資料行來控制,這會讓你更容易去決定他們的區間和名稱。

CASE WHEN Weight IS NULL OR Weight<0 THEN 'N/A'

         WHEN Weight<10 THEN '0-10Kg'

         WHEN Weight<20 THEN '10-20Kg'

         ELSE '20Kg or More'

END

命名模板

當建立成員組時,會自動產生成員組的名稱。 除非您指定了一個命名模板,否則使用預設的命名模板。 通過在某個特性的 NameColumn 屬性的 Format 選項中指定命名模板,可以更改此命名方法。 可以針對資料行繫結(用於特性的 NameColumn 屬性)的 Translations 集合中指定的每種語言重新定義不同的命名模板。預設的命名模板為 "%{First bucket member} - %{Last bucket member}"

 

變數

說明

%{First bucket member}

包含在當前成員組中的第一個成員的名稱。

%{Last bucket member}

包含在當前成員組中的最後一個成員的名稱。

%{Previous bucket last member}

分配到上一個成員組的最後一個成員的名稱。

%{Next bucket first member}

分配到下一個成員組的第一個成員的名稱。

%{Bucket Min}

要分配到當前成員組的最小成員數。

%{Bucket Max}

要分配到當前成員組的最大成員數。

%{Previous Bucket Max}

要分配到上一個成員組的最大成員數。

%{Next Bucket Min}

要分配到下一個成員組的最小成員數。

例如我們將YearlyIncome的NameColumn屬性的Format選項設定為”Less than %{Next Bucket Min};Between %{First bucket member} and %{Last bucket member};Greater than %{Previous Bucket Max}”,分組的名稱會有所改變。我們可以通過Name Template來改變各個分組的名稱:

 

使用離散化屬性更新維度

處理維度時,離散化屬性只在完全更新 (ProcessFull) 中進行重新離散化。 若要對屬性進行重新離散化,必須對維度執行完全更新。 如果離散化屬性的維度資料表已更新,並且您使用增量式更新 (ProcessAdd) 處理該維度,則離散化屬性不會進行重新離散化。 新儲存的名稱和子級將保持不變。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.