在課程 3 中,您已瞭解如何根據其名稱或索引鍵值來排序屬性成員。 您也瞭解如何使用複合成員索引鍵來影響屬性成員和排序順序。 如需詳細資訊,請參閱 修改日期維度。 不過,如果屬性的名稱和索引鍵都未提供您想要的排序順序,您可以使用次要屬性來達到所需的排序順序。 藉由定義屬性之間的關聯性,您可以使用第二個屬性來排序第一個屬性的成員。
屬性關聯性會定義屬性之間的關聯性或相依性。 在以單一關係型數據表為基礎的維度中,所有屬性通常會透過索引鍵屬性彼此相關。 這是因為維度的所有屬性會提供透過維度的鍵屬性連結到相關量值群組中事實數據表的成員信息。 在以多個數據表為基礎的維度中,屬性通常會根據數據表之間的聯結索引鍵連結。 如果基礎數據支援,則可以使用相關的屬性來指定排序順序。 例如,您可以建立新的屬性,以提供相關屬性的排序邏輯。
維度設計師可讓您定義屬性之間的其他關聯性,或變更默認關聯性以提升效能。 當您建立屬性關聯性時,主要的限制條件是確保被參考的屬性對於其關聯的屬性每個成員而言,不會有超過一個的值。 當您定義兩個屬性之間的關聯性時,您可以根據成員之間的關聯性是否會隨著時間而變更,將關聯性定義為固定或彈性。 例如,員工可能會移至不同的銷售區域,但城市不會移至不同的州。 如果關聯性定義為固定的,則每次以累加方式處理維度時,都不會重新計算屬性匯總。 不過,如果成員之間的關聯性確實變更,則必須完整處理維度。 如需詳細資訊,請參閱 屬性關聯性、 定義屬性關聯性、 設定屬性關聯性屬性,以及 指定 User-Defined 階層中屬性之間的屬性關聯性。
在本主題的工作中,您會根據基礎維度數據表中的現有數據行,在 Date 維度中定義新的屬性。 您將使用此新屬性,依時間順序排序行事曆月份成員,而不是依字母順序排序。 在 Customer 維度中,您還將根據具名計算,定義一個新的屬性,以便用來排序 通勤距離 屬性成員。 在下一個主題的工作中,您將瞭解如何使用屬性關聯性來提升查詢效能。
在日期維度中定義屬性關聯性和排序順序
開啟 [日期] 維度的 [維度設計師],然後在 [屬性] 視窗中檢閱 [月份名稱] 屬性的 OrderBy 屬性。
請注意, Month Name 屬性成員會依索引鍵值排序。
切換至 [瀏覽器] 索引標籤,確認 [階層] 清單中已選取 [行事曆日期],然後展開使用者定義階層中的層級,以檢閱行事曆月份的排序順序。
請注意,屬性階層的成員會根據其成員索引鍵的 ASCII 值來排序,這些值是月份和年份。 在此情況下,依屬性名稱或索引鍵排序並不會依時間順序排序行事曆月份。 若要解決此問題,您將根據新屬性 MonthNumberOfYear 屬性來排序屬性階層的成員。 您將根據 Date 維度資料表 中現有的欄位來建立此屬性。
切換至「日期維度」的「維度結構」索引標籤,在「數據源檢視」窗格中以滑鼠右鍵點選「MonthNumberOfYear」,然後點選「從欄新增屬性」。
在 [ 屬性] 窗格中,選取 [ 月份年數],然後在 [屬性] 視窗中將 AttributeHierarchyEnabled 屬性設定為 False 、將 AttributeHierarchyOptimizedState 屬性設定為 NotOptimized,並將 AttributeHierarchyOrdered 屬性設定為 False。
這些設定會隱藏用戶的屬性,並改善處理時間。 此屬性不會用於流覽。 它只會用於排序另一個屬性的成員。
備註
按照字母順序排列 Properties 窗口中的屬性會簡化這項工作,因為這三個屬性將會被相鄰排列。
按一下 屬性關聯性 索引標籤。
請注意, Date 維度中的所有屬性都與 Date 屬性直接相關,這是將維度成員與相關量值群組中事實相關的成員索引鍵。 [月名稱] 屬性與 [月份年數] 屬性之間沒有定義關聯性。
在圖表中,以滑鼠右鍵按兩下 [月份名稱 ] 屬性,然後選取 [ 新增屬性關聯性]。
在 [ 建立屬性關聯性] 對話框中, [來源屬性 ] 是 [月份名稱]。 將 [相關屬性 ] 設定為 [年月數]。
在 [ 關聯性類型 ] 清單中,將關聯性類型設定為 [固定]。
Month Name 屬性的成員與 Month Number Of Year 屬性之間的關聯性不會隨著時間而變更。 因此,Analysis Services 不會在增量處理期間刪除此關聯性的匯總。 如果發生變更,在增量處理期間會發生處理錯誤,您必須執行維度的完整處理流程。 您現在已準備好設定 月份名稱成員的排序順序。
按一下 [確定]。
按一下維度結構索引標籤。
在 [屬性] 窗格中選取 [月份名稱],然後將 [屬性] 視窗中 OrderBy 屬性的值變更為 AttributeKey,並將 OrderByAttribute 屬性的值變更為 [月數年]。
在組建 功能表上,按一下部署 Analysis Services 教學課程。
部署順利完成時,切換至 [日期] 維度的 [ 瀏覽器 ] 索引標籤,按兩下 [ 重新連線],然後流覽 [行事曆日期 ] 和 [ 會計日期 ] 用戶階層,確認月份現在依時間順序排序。
請注意,月份現在會依時間順序排序,如下圖所示。
依時間
在客戶維度中定義屬性關聯性和排序順序
切換至 [客戶] 維度的維度設計師中的 [ 瀏覽器 ] 索引標籤,然後流覽 [通勤距離 ] 屬性階層的成員。
請注意,這個屬性階層的成員會根據成員索引鍵的 ASCII 值來排序。 在此情況下,依屬性名稱或索引鍵排序並不會排序從最小到大部分的通勤距離。 在這項工作中,您會根據名為 CommuteDistanceSort 的計算來排序屬性階層的成員,將適當的排序編號指定為欄位中的每個相異值。 為了節省時間,此具名計算已新增至 Adventure Works DW 數據源檢視中的 Customer 資料表。 您可以切換至此數據源檢視,以檢視此具名計算中使用的 SQL 腳本。 如需詳細資訊,請參閱在數據源檢視中定義具名計算(Analysis Services)。
下圖顯示 通勤距離 屬性階層的成員,依成員索引鍵的 ASCII 值排序。
切換至 [維度設計師] 中的 [維度結構] 索引標籤,然後在 [資料來源檢視] 窗格中的 [Customer] 資料表中,右鍵單擊 [通勤距離排序],接著按一下 [從資料行新增屬性]。
在 屬性 窗格中,選取 通勤距離排序,然後在屬性視窗中,將此屬性的 AttributeHierarchyEnabled 屬性設定為 False,將 AttributeHierarchyOptimizedState 屬性設定為 NotOptimized,並將 AttributeHierarchyOrdered 屬性設定為 False。
這些設定會隱藏用戶的屬性,並改善處理時間。 此屬性不會用於流覽。 它只會用於排序另一個屬性的成員。
選取 [地理位置],然後在 [屬性] 視窗中將其 AttributeHierarchyVisible 屬性設定為 False、將其 AttributeHierarchyOptimizedState 屬性設定為 NotOptimized,並將其 AttributeHierarchyOrdered 屬性設定為 False。
這些設定會隱藏用戶的屬性,並改善處理時間。 此屬性不會用於流覽。 它只會用於排序另一個屬性的成員。 由於 Geography 具有成員屬性,因此其 AttributeHierarchyEnabled 屬性必須設定為 True。 因此,若要隱藏屬性,您可以將 AttributeHierarchyVisible 屬性設定為 False。
按一下 屬性關聯性 索引標籤。
在屬性清單中,以滑鼠右鍵按兩下 [通勤距離 ] 屬性,然後選取 [ 新增屬性關聯性]。
在 [ 建立屬性關聯性] 對話框中, [來源屬性 ] 是 通勤距離。 將 [相關屬性 ] 設定為 [通勤距離排序]。
在 [ 關聯性類型 ] 清單中,將關聯性類型設定為 [固定]。
通勤距離屬性的成員與通勤距離排序屬性之間的關聯性不會隨著時間而變更。
按一下 [確定]。
您現在已準備好設定 通勤距離 屬性的排序順序。
按一下維度結構頁籤。
在 [ 屬性] 窗格中,選取 [ 通勤距離],然後將 [屬性] 視窗中 OrderBy 屬性的值變更為 AttributeKey,然後將 OrderByAttribute 屬性的值變更為 [通勤距離排序]。
在組建 功能表上,按一下部署 Analysis Services 教學課程。
部署順利完成時,切換至 [客戶] 維度維度的 [維度設計師] 索引卷標,按兩下 [重新連線],然後流覽 [通勤距離] 屬性階層。
請注意,屬性階層成員現在會根據遞增距離以邏輯順序排序,如下圖所示。