定義未知的成員和 Null 處理屬性
當 Analysis Services 處理維度時,資料來源檢視中之資料表或檢視內基礎資料行的所有相異值會在維度中擴展屬性。 如果 Analysis Services 在處理期間發現 Null 值,它預設會將這個 Null 轉換成零 (若為數值資料行) 或空字串 (若為字串資料行)。 您可以在基礎關聯式資料倉儲的擷取、轉換和載入過程中,修改這些預設設定或轉換 Null 值 (如果有的話)。 此外,您也可以設定下列三個屬性,藉以讓 Analysis Services 將 Null 值轉換成指定的值:維度的 [UnknownMember] 和 [UnknownMemberName] 屬性 (Property),以及維度索引鍵屬性 (Attribute) 的 [NullProcessing] 屬性 (Property)。
「維度精靈」和「Cube 精靈」將會根據維度的索引鍵屬性是否可為 Null,或者雪花維度的根屬性是否以可為 Null 的資料行為基礎,自動為您啟用這些屬性。 在這些情況下,索引鍵屬性的 [NullProcessing] 屬性將會設定為 [UnknownMember],而 [UnknownMember] 屬性則會設定為 [可見]。
但是,當您以累加方式建立雪花維度時 (就如同我們在這個教學課程中處理 [產品] 維度的方式一樣),或者當您使用 [維度設計師] 定義維度,然後將這些現有的維度合併到 Cube 中時,可能必須以手動方式設定 [UnknownMember] 和 [NullProcessing] 屬性。
在這個主題的工作中,您會從雪花資料表將產品類別目錄和產品子類別目錄屬性加入 [產品] 維度中,而且您將把雪花資料表加入 Adventure Works DW 資料來源檢視中。 接著,您會為 [產品] 維度啟用 [UnknownMember] 屬性 (Property)、指定組件元件當做 [UnknownMemberName] 屬性 (Property) 的值、使 [子類別目錄] 和 [類別目錄] 屬性 (Attribute) 與產品名稱屬性 (Attribute) 產生關聯,然後為連結雪花資料表的成員索引鍵屬性 (Attribute) 定義自訂的錯誤處理方式。
[!附註]
如果您最初使用「Cube 精靈」定義 Analysis Services 教學課程 Cube 時已經加入了 [子類別目錄] 和 [類別目錄] 屬性,系統就會自動執行這些步驟。
在 [產品] 維度中檢閱錯誤處理方式和未知的成員屬性
請針對 [產品] 維度切換到維度設計師,按一下 [維度結構] 索引標籤,然後在 [屬性] 窗格中選取 [產品]。
這可讓您檢視及修改維度本身的屬性。
在 [屬性] 視窗中,檢閱 [UnknownMember] 和 [UnknownMemberName] 屬性。
請注意,[UnknownMember] 屬性並未啟用,因為它的值是設定為 [無],而不是 [可見] 或 [隱藏],而且沒有為 [UnknownMemberName] 屬性指定任何名稱。
在 [屬性] 視窗的 [ErrorConfiguration] 屬性資料格中選取 [(自訂)],然後展開 [ErrorConfiguration] 屬性集合。
將 [ErrorConfiguration] 屬性設定為 [(自訂)],可讓您檢視預設的錯誤組態設定,這麼做並不會變更任何設定。
檢閱索引鍵和 Null 索引鍵錯誤組態屬性,但不做任何變更。
請注意,依預設,當 Null 索引鍵轉換成未知的成員時,會忽略與這項轉換相關的處理錯誤。
下圖顯示 [ErrorConfiguration] 屬性集合的屬性設定。
按一下 [瀏覽器] 索引標籤,確認已在 [階層] 清單中選取 [產品型號線],再展開 [所有產品]。
請注意 [產品線] 層級的 5 個成員。
依序展開 [元件] 和 [模型名稱] 層級的未標記成員。
這個層級包含在建立其他元件時所使用的組件元件,從 [Adjustable Race] 產品開始,如下圖所示。
定義雪花資料表中的屬性和產品類別目錄使用者定義階層
在 Adventure Works資料來源檢視中,開啟資料來源檢視設計工具,選取 [圖表組合管理] 窗格中的 [轉售商銷售],然後在 SQL Server Data Tools (SSDT) 的 [資料來源檢視] 功能表上中,按一下 [加入/移除物件]。
此時會開啟 [加入/移除資料表] 對話方塊。
在 [包含的物件] 清單中,選取 [DimProduct (dbo)],再按一下 [加入關聯資料表]。
[DimProductSubcategory (dbo)] 和 [FactProductInventory (dbo)] 隨即加入。 移除 [FactProductInventory (dbo)],如此只有 [DimProductSubcategory (dbo)] 資料表會加入到 [包含的物件] 清單中。
依預設,會選取 [DimProductSubcategory (dbo)] 資料表做為最新加入的資料表,請再按一下 [加入關聯資料表]。
此時會將 [DimProductCategory (dbo)] 資料表加入 [包含的物件] 清單中。
按一下 [確定]。
在 SQL Server Data Tools 的 [格式] 功能表上,指向 [自動配置],再按一下 [圖表]。
請注意,[DimProductSubcategory (dbo)] 資料表和 [DimProductCategory (dbo)] 資料表彼此連結,並且透過 [產品] 資料表連結到 [ResellerSales] 資料表。
請針對 [產品] 維度切換到維度設計師,再按一下 [維度結構] 索引標籤。
以滑鼠右鍵按一下 [資料來源檢視] 窗格中的任何位置,再按一下 [顯示所有資料表]。
在 [資料來源檢視] 窗格中,尋找 [DimProductCategory] 資料表,以滑鼠右鍵按一下該資料表的 [ProductCategoryKey],再按一下 [從資料行新增屬性]。
在 [屬性] 窗格中,將這個新屬性的名稱變更為類別目錄。
在 [屬性] 視窗的 [NameColumn] 屬性欄位中按一下,然後按一下瀏覽 (…) 按鈕,即可開啟 [名稱資料行] 對話方塊。
選取 [來源資料行] 清單中的 [EnglishProductCategoryName],然後按一下 [確定]。
在 [資料來源檢視] 窗格中,尋找 [DimProductSubcategory] 資料表,以滑鼠右鍵按一下該資料表的 [ProductSubcategoryKey],再按一下 [從資料行新增屬性]。
在 [屬性] 窗格中,將這個新屬性的名稱變更為子類別目錄。
在 [屬性] 視窗的 [NameColumn] 屬性欄位中按一下,然後按一下瀏覽 (…) 按鈕,即可開啟 [名稱資料行] 對話方塊。
選取 [來源資料行] 清單中的 [EnglishProductSubcategoryName],然後按一下 [確定]。
建立稱為 [產品類別目錄] 的新使用者定義階層,其中含有下列層級,由上往下依序為:[類別目錄]、[子類別目錄] 和 [產品名稱]。
指定 All Products 做為 [產品類別目錄] 使用者定義階層之 [AllMemberName] 屬性的值。
在產品維度中瀏覽使用者定義階層
在 [產品] 維度的 [維度設計師] 的 [維度結構] 索引標籤的工具列上,按一下 [處理]。
按一下 [是] 來建立及部署專案,再按一下 [執行] 來處理 [產品] 維度。
處理成功之後,在 [處理進度] 對話方塊中依序展開 [產品維度已順利處理完成]、[產品名稱維度屬性已順利完成] 和 [SQL 查詢 1]。
按一下 SELECT DISTINCT 查詢,再按一下 [檢視詳細資料]。
請注意,WHERE 子句已加入 SELECT DISTINCT 子句中,它會移除在 ProductSubcategoryKey 資料行中沒有值的那些產品,如下圖所示。
按三次 [關閉] 來關閉所有處理中的對話方塊。
請針對 [產品] 維度按一下維度設計師的 [瀏覽器] 索引標籤,再按一下 [重新連接]。
確認 [產品型號線] 有出現在 [階層] 清單中,然後依序展開 [所有產品] 和 [元件]。
選取 [階層] 清單中的 [產品類別目錄],依序展開 [所有產品] 和 [元件]。
請注意,沒有任何組件元件出現。
若要修改上一項工作中提到的行為,您需要啟用 [產品] 維度的 [UnknownMember] 屬性、設定 [UnknownMemberName] 屬性的值、將 [子類別目錄] 和 [模型名稱] 屬性的 [NullProcessing] 屬性設定為 [UnknownMember]、將 [類別目錄] 屬性定義為 [子類別目錄] 屬性的相關屬性,然後將 [產品線] 屬性定義為 [模型名稱] 屬性的相關屬性。 這些步驟將會使 Analysis Services 在沒有 [SubcategoryKey] 資料行值的每一項產品中使用未知的成員名稱值,如下一項工作所示。
啟用未知的成員、定義屬性關聯性及指定 Null 的自訂處理屬性
在 [產品] 維度的維度設計師中,按一下 [維度結構] 索引標籤,然後在 [屬性] 窗格中選取 [產品]。
在 [屬性] 視窗中,將 [UnknownMember] 屬性變更為 [可見],再將 [UnknownMemberName] 屬性值變更為組件元件。
將 [UnknownMember] 屬性變更為 [可見] 或 [隱藏] 會啟用維度的 [UnknownMember] 屬性。
按一下 [屬性關聯性] 索引標籤。
在圖表中,以滑鼠右鍵按一下 [子類別目錄] 屬性,然後選取 [新增屬性關聯性]。
在 [建立屬性關聯性] 對話方塊中,[來源屬性] 是 [子類別目錄]。 將 [相關屬性] 設定為 [類別目錄]。 然後,保持關聯性類型設定為 [彈性] 的狀態。
按一下 [確定]。
在 [屬性] 窗格中,選取 [子類別目錄]。
在 [屬性] 視窗中,展開 [KeyColumns] 屬性,然後展開 [DimProductSubcategory.ProductSubcategoryKey (Integer)] 屬性。
將 [NullProcessing] 屬性變更為 [UnknownMember]。
在 [屬性] 窗格中,選取 [模型名稱]。
在 [屬性] 視窗中,展開 [KeyColumns] 屬性,然後展開 [Product.ModelName (WChar)] 屬性。
將 [NullProcessing] 屬性變更為 [UnknownMember]。
由於這些變更,當 Analysis Services 在處理期間發現 [子類別目錄] 屬性或 [模型名稱] 屬性是 Null 值時,未知的成員值會替換成索引鍵值,而使用者定義階層將可正確建構。
再次瀏覽 [產品] 維度
在 [建立] 功能表上,按一下 [部署 Analysis Services 教學課程]。
順利完成部署之後,針對 [產品] 維度按一下維度設計師的 [瀏覽器] 索引標籤,再按一下 [重新連接]。
確認已在 [階層] 清單中選取 [產品類別目錄],再展開 [所有產品]。
請注意,此時「組件元件」會出現成為 [類別目錄] 層級的新成員。
展開 [類別目錄] 層級的 [組件元件] 成員,然後再展開 [子類別目錄] 層級的 [組件元件] 成員。
請注意,所有組件元件現在都會出現在 [產品名稱] 層級,如下圖所示。