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