當 Analysis Services 處理維度時,數據表中基礎數據行的所有相異值,或數據源檢視中的檢視表都會填入維度中的屬性。 如果 Analysis Services 在處理期間遇到 Null 值,則預設會將這個 Null 轉換成數值數據行的零或字串數據行的空字串。 您可以修改基礎關係型資料倉儲中擷取、轉換和載入過程中的預設設定,或轉換 Null 值(如果有的話)。 此外,您可以設定三個屬性,讓 Analysis Services 將 Null 值轉換成指定的值:維度的 UnknownMember 和 UnknownMemberName 屬性,以及維度索引鍵屬性的 NullProcessing 屬性。
維度精靈和 Cube 精靈會根據條件來啟用這些屬性,具體來說,如果維度的鍵屬性可以為 Null,或者雪花維度的根屬性是基於可為 Null 的欄位,則會這樣設定。 在這些情況下,索引鍵屬性的NullProcessing會設定為UnknownMember,而UnknownMember則設定為Visible。
不過,當您以累加方式建置雪狀維度時,如同我們在本教學課程中使用 Product 維度,或使用維度設計師定義維度,然後將這些現有維度併入 Cube 時,可能需要手動設定 UnknownMember 和 NullProcessing 屬性。
在本主題的工作中,您將把產品類別和產品子類別屬性從您新增至 Adventure Works DW 資料來源檢視的雪花式數據表添加到 Product 維度。 然後,您將啟用 Product 維度的 UnknownMember 屬性、指定Assembly Components為 UnknownMemberName 屬性的值、將 Subcategory 和 Category 屬性關聯至產品名稱屬性,然後為連結雪花數據表的成員索引鍵屬性定義自定義錯誤處理。
備註
如果您在最初使用 Cube 精靈定義 Analysis Services 教學課程 Cube 時新增了 Subcategory 和 Category 屬性,則會自動為您執行這些步驟。
檢視產品維度中的錯誤處理和未知成員屬性.
切換至 [產品] 維度的 [維度設計師],按兩下 [維度結構] 索引卷標,然後在 [屬性] 窗格中選取 [產品]。
這可讓您檢視和修改維度本身的屬性。
在 [屬性] 視窗中,檢閱 UnknownMember 和 UnknownMemberName 屬性。
請注意, UnknownMember 屬性未啟用,因為其值 設定為 None ,而不是 Visible 或 Hidden,而且 UnknownMemberName 屬性未指定任何名稱。
在 [屬性] 視窗中,選取 ErrorConfiguration 屬性單元格中的 [自定義],然後展開 ErrorConfiguration 屬性集合。
將 ErrorConfiguration 屬性設定為 (custom) 可讓您檢視預設的錯誤組態設定 - 它不會變更任何設定。
檢閱鍵值和空鍵值錯誤的組態屬性,但不需更改。
請注意,根據預設,當 Null 索引鍵被轉換為未知的成員時,與此轉換相關的處理錯誤會被忽略。
下圖顯示 ErrorConfiguration 屬性集合的屬性設定。
點選 [瀏覽器] 標籤,確認在 [階層] 清單中選取了 [產品型號行],然後展開
All Products。請注意 Product Line 層級的五個成員。
展開 [元件],然後展開 [模型名稱 ] 層級的未標記成員。
此層級包含在建置其他元件時所使用的組裝元件,從 可調整賽道 產品開始,如下圖所示。
定義 Snowflaked 資料表和產品類別 User-Defined 層級的屬性
開啟 Adventure Works DW 數據源檢視的 [數據源檢視設計師],在 [圖表召集人] 窗格中選取 [轉售商銷售],然後按兩下 [SQL Server Data Tools ][SSDT] 的 [數據源檢視] 功能表上的 [新增/移除物件]。
[ 新增/移除數據表] 對話框隨即開啟。
在 [ 包含的物件 ] 清單中,選取 [DimProduct ][dbo],然後按兩下 [ 新增相關數據表]。
同時新增 DimProductSubcategory (dbo) 和 FactProductInventory (dbo)。 拿掉 FactProductInventory (dbo) ,以便只將 DimProductSubcategory (dbo) 數據表新增至 Included 物件 清單。
默認選取 DimProductSubcategory (dbo) 數據表做為最近新增的數據表,再次按兩下 [新增相關數據表 ]。
DimProductCategory (dbo) 數據表會新增至 Included 物件清單。
按一下 [確定]。
在 [SQL Server Data Tools] 的 [ 格式 ] 功能表上,指向 [ 自動配置],然後按兩下 [ 圖表]。
請注意,DimProductSubcategory (dbo) 數據表和 DimProductCategory (dbo) 數據表彼此連結,也透過 Product 數據表連結到 ResellerSales 數據表。
切換至 產品 維度的 [維度設計師],然後點選 [維度結構] 索引標籤。
以滑鼠右鍵按兩下 [資料源檢視 ] 窗格中的任何位置,然後按兩下 [ 顯示所有資料表]。
在 [ 數據源檢視 ] 窗格中,找出 DimProductCategory 數據表,以滑鼠右鍵按兩下該數據表中的 ProductCategoryKey ,然後按兩下 [從數據行新增屬性]。
在 [ 屬性] 窗格中,將這個新屬性的名稱變更為
Category。在 [屬性] 視窗中,按兩下 [ NameColumn ] 屬性欄位,然後按兩覽 (...) 按鈕以開啟 [ 名稱資料行 ] 對話框。
在 [來源] 數據行清單中選取 [EnglishProductCategoryName],然後按兩下 [確定]。
在 [ 數據源檢視 ] 窗格中,找出 DimProductSubcategory 數據表,以滑鼠右鍵按兩下該數據表中的 ProductSubcategoryKey ,然後按兩下 [從數據行新增屬性]。
在 [ 屬性] 窗格中,將這個新屬性的名稱變更為
Subcategory。在 [屬性] 視窗中,按兩下 [ NameColumn ] 屬性欄位,然後按兩覽 (...) 按鈕以開啟 [ 名稱資料行 ] 對話框。
在 [源數據行] 列表中選取 [EnglishProductSubcategoryName],然後按兩下 [確定]。
使用下列層級建立名為 Product Categories 的新使用者定義階層,依上至下的順序:
Category、Subcategory和 產品名稱。指定
All Products為產品類別使用者定義階層 之 AllMemberName 屬性的值。
瀏覽產品維度中的 User-Defined 等級结构
在 維度設計師的 產品維度的維度結構索引標籤上方的工具列中,按一下處理。
按兩下 [是 ] 建置和部署專案,然後按兩下 [ 執行 ] 以處理 Product 維度。
處理成功時,在 [處理進度] 對話框中展開 [處理維度 'Product' 已完成],展開 [處理維度屬性 '產品名稱] 已完成,然後展開 [SQL 查詢 1]。
按兩下 SELECT DISTINCT 查詢,然後按兩下 [ 檢視詳細資料]。
請注意,WHERE 子句已新增至 SELECT DISTINCT 子句,以移除 ProductSubcategoryKey 數據行中沒有值的這些產品,如下圖所示。
按兩下 [ 關閉 三次] 以關閉所有處理對話框。
在 [維度設計師] 中點擊 [瀏覽器] 索引標籤以查看 產品 維度,然後點擊 [重新連線]。
確認 [產品型號行 ] 出現在 [階層 ] 清單中,展開
All Products,然後展開 [ 元件]。在 [階層] 清單中選取 [產品類別],展開
All Products,然後展開 [元件]。請注意,沒有任何元件元件出現。
若要修改上一項工作中提到的行為,您將啟用 Products 維度的 UnknownMember 屬性,設定 UnknownMemberName 屬性的值,設定 Subcategory 和 Model Name 屬性的 NullProcessing 屬性為 UnknownMember,將 Category 屬性定義為 Subcategory 屬性的相關屬性,然後將 Product Line 屬性定義為 Model Name 屬性的相關屬性。 這些步驟會導致 Analysis Services 針對每個沒有 SubcategoryKey 資料行值的產品使用未知的成員名稱值,如下列工作所示。
啟用未知的成員、定義屬性關聯性,以及指定 Null 的自定義處理屬性
按兩下 [產品維度設計師] 中的 [維度結構] 索引標籤,然後在 [屬性] 窗格中選取 [產品]。
在 [ 屬性] 視窗中,將 UnknownMember 屬性變更為 Visible,然後將 UnknownMemberName 屬性的值變更為
Assembly Components。將 UnknownMember 屬性變更為 Visible 或 Hidden 會啟用維度的 UnknownMember 屬性。
按一下 屬性關聯性 索引標籤。
在圖表中,以滑鼠右鍵按下
Subcategory屬性,然後選取 [ 新增屬性關聯性]。在 [ 建立屬性關聯性] 對話框中, [來源屬性 ] 是
Subcategory。 將 [相關屬性 ] 設定為Category。 將關聯性類型保留為 [彈性]。按一下 [確定]。
在 [ 屬性] 窗格中,選取 [子類別]。
在 [屬性] 視窗中,展開 KeyColumns 屬性,然後展開 DimProductSubcategory.ProductSubcategoryKey (Integer) 屬性。
將 NullProcessing 屬性變更為 UnknownMember。
在 [ 屬性] 窗格中,選取 [模型名稱]。
在 [屬性] 視窗中,展開 KeyColumns 屬性,然後展開 Product.ModelName (WChar) 屬性。
將 NullProcessing 屬性變更為 UnknownMember。
由於這些變更,當 Analysis Services 在處理期間遇到
Subcategory屬性或模型名稱屬性的 Null 值時,未知的成員值會被取代為索引鍵值,而且使用者定義的階層會得到正確建構。
再次瀏覽產品維度
在組建 功能表上,按一下部署 Analysis Services 教學課程。
部署成功完成時,按一下 [維度設計師] 中 [產品] 維度的 [瀏覽器] 索引標籤,然後按一下 [重新連線]。
確認 [階層] 清單中已選取 [產品類別],然後展開
All Products。請注意,組件元件會顯示為類別層級的新成員。
展開
Assembly Components層級的成員Category,然後展開Assembly Components層級的成員Subcategory。請注意,所有組件現在都會出現在 產品名稱 層級,如下圖所示。