依次要屬性來排序屬性成員

在第 3 課,您學會如何依名稱或索引鍵值來排序屬性成員。您也學會如何使用構成要素成員索引鍵來影響屬性成員和排序順序。如需詳細資訊,請參閱<修改 [時間] 維度>。不過,有時候您必須依據第二屬性來排序屬性成員,以達到所要的排序順序,例如,屬性名稱和屬性索引鍵均未能提供您所要的排序順序。若要按第二屬性名稱或索引鍵來排序屬性,您必須使用與該屬性相關的第二屬性。

屬性關聯性定義屬性之間的關聯性或相依性。在以單一關聯式資料表為基礎的維度中,所有屬性通常都是透過索引鍵屬性而彼此相關。這是因為維度的所有屬性會提供有關成員的資訊,這些成員會由維度的索引鍵屬性連結到各個相關量值群組之事實資料表中的事實。在以多份資料表為基礎的維度中,屬性通常是依據資料表之間的聯結索引鍵來連結。

不過,使用者也可能對階層中某特定層級之成員的其他資訊感興趣。維度設計師可讓您定義屬性之間的其他關聯性,或變更預設關聯性來增加效能。當您建立屬性關聯性時,主要條件約束是要確定所參考的屬性對於它相關的屬性中的任何成員只有一個值。當您在兩個屬性之間定義關聯性時,可以依據成員之間的關聯性是否因為時間而改變來定義固定或彈性關聯性。例如,員工有可能調到不同的銷售地區,但縣 (市) 卻留在原來的省份。如果定義固定關聯性,則每次累加處理維度時不會重新計算屬性彙總。不過,如果成員之間的關聯性改變,維度必須完全處理。如需詳細資訊,請參閱<屬性關聯性>、<定義及設定屬性關聯性>、<設定屬性關聯性的屬性>和<在使用者自訂階層的屬性之間指定屬性關聯性>。

在這個主題的工作中,您會在 [時間] 維度中依據基礎維度資料表的現有資料行來定義新屬性。您會使用這個新屬性,按照時間順序而非字母順序來排序日曆月成員。您也會在 [客戶] 維度中依據具名計算來定義新屬性,您將用它來排序 [通勤距離] 屬性成員。在下一個主題的工作中,您會學到如何使用屬性關聯性來增加查詢效能。

在時間維度中定義屬性關聯性和排序順序

在時間維度中定義屬性關聯性和排序順序

  1. 開啟 [時間] 維度的維度設計師,然後在 [屬性] 視窗中檢閱 [月份] 屬性的 [OrderBy] 屬性。

    請注意,[月份] 屬性成員是按照索引鍵值來排序。

  2. 切換到 [瀏覽器] 索引標籤,確認已在 [階層] 清單中選取 [日曆時間],再展開使用者自訂階層中的層級,來檢閱日曆月的排序順序。

    請注意,屬性階層的成員是依據成員索引鍵的 ASCII 值排序,也就是月和年。在這種情形下,按照屬性名稱或索引鍵排序並不會按時間順序排序日曆月。若要解決這個問題,您要依據一個新屬性來排序屬性階層的成員,亦即 [MonthNumberOfYear] 屬性。您將依據已存在於 DimTime 維度資料表中的資料行來建立這個屬性。

  3. 切換到 [時間] 維度的 [維度結構] 索引標籤,以滑鼠右鍵按一下 [資料來源檢視] 窗格中的 [MonthNumberOfYear],再按一下 [從資料行新增屬性]

  4. [屬性] 窗格中,選取 [年中的月份],然後在 [屬性] 視窗中將 [AttributeHierarchyEnabled] 屬性設為 [False],將 [AttributeHierarchyOptimizedState] 屬性設為 [NotOptimized],將 [AttributeHierarchyOrdered] 屬性設為 [False]

    這些設定會把屬性隱藏起來,讓使用者看不到它們,而且可節省處理時間,您應該做這樣的設定,因為這個新屬性只用來排序另一個屬性的成員。

ms166763.note(zh-tw,SQL.90).gif附註:
如果依字母順序排序 [屬性] 視窗中的屬性,將可簡化這項工作,因為這三個屬性在排序後將會彼此相鄰。
  1. [屬性] 窗格中展開 [日期]
    請注意,[時間] 維度中的所有屬性都與 [日期] 屬性直接相關,[日期] 屬性是成員索引鍵,它會使維度成員與相關量值群組中的事實產生關聯。
  2. 展開 [月份]
    請注意,[月份] 屬性和 [年中的月份] 屬性之間沒有定義關聯性。
  3. [年中的月份] 屬性拖曳到 [月份] 屬性之下的 [<新增屬性關聯性>] 標記。
    雖然您可能已經定義了其他關聯性,但是移動現有的關聯性將會使處理效能更有效率,並且減少冗餘的情況。現在您已在 [年中的月份] 屬性和 [月份] 屬性之間沒有定義了關聯性。在 [屬性] 視窗中,請注意 [年中的月份] 屬性關聯性的 [RelationshipType] 屬性的預設值是 [Flexible]
  4. 在 [屬性] 視窗中,將 [RelationshipType] 屬性的值變更為 [Rigid]
    [月份] 屬性和 [年中的月份] 屬性的成員之間的關聯性不會隨時間而改變。因此,在累加式處理期間,Analysis Services 不會卸除此關聯性的彙總。如果真的發生變更,在累加式處理期間將會產生處理錯誤,到時候您就必須執行維度的完整處理。現在您可以設定 [月份] 之成員的排序順序。
    下圖顯示在 [月份] 屬性的 [年中的月份] 屬性關聯性中,[RelationshipType] 屬性是設為 [Rigid]
    RelationshipType 屬性設定為 Rigid
  5. [屬性] 窗格中選取 [月份],再將 [屬性] 視窗中的 [OrderBy] 屬性值變更為 [AttributeKey],將 [OrderByAttribute] 屬性值變更為 [年中月份]
    下圖顯示 [屬性] 視窗中的這些屬性變更。
    OrderBy 和 OrderByAttribute 屬性變更
  6. [建立] 功能表上,按一下 [部署 Analysis Services 教學課程]
  7. 順利完成部署之後,切換到 [時間] 維度的 [瀏覽器] 索引標籤,按一下 [重新連接],再瀏覽 [日曆時間] 和 [會計時間] 使用者階層,以確認月份現在是按照時間順序排序。
    請注意,月份現在是按照時間順序排序,如下圖所示。
    依時間順序的已修改使用者階層

在客戶維度中定義屬性關聯性和排序順序

在客戶維度中定義屬性關聯性和排序順序

  1. 切換到 [客戶] 維度的維度設計師的 [維度結構] 索引標籤。

  2. [屬性] 窗格,選取 [通勤距離] 屬性,再檢閱 [屬性] 視窗中的 [OrderBy] 屬性。

  3. 切換到 [瀏覽器] 索引標籤,再瀏覽 [通勤距離] 屬性階層的成員。

    請注意,這個屬性階層的成員是依據成員索引鍵的 ASCII 值排序。在這種情形下,按照屬性名稱或索引鍵排序並不會將通勤距離從小排到大。在這項工作中,您會依據 CommuteDistanceSort 具名計算來排序屬性階層的成員,而適當的排序編號將歸因於資料行的每一個相異值。為了節省時間,這個具名計算已加入 Adventure Works DW 資料來源檢視的 [客戶] 資料表中;您可以切換到這個資料來源檢視,來檢視這個具名計算所使用的 SQL 指令碼。如需詳細資訊,請參閱<在資料來源檢視中定義具名計算 (Analysis Services)>。

    下圖顯示 [通勤距離] 屬性階層的成員,它們是按照成員索引鍵的 ASCII 值來排序。

    通勤距離屬性階層

  4. 切換到 [客戶] 維度的維度設計師的 [維度結構] 索引標籤,以滑鼠右鍵按一下 [資料來源檢視] 窗格中的 [客戶] 資料表的 [通勤距離排序],再按一下 [從資料行新增屬性]

  5. [屬性] 窗格中,選取 [通勤距離排序],然後在 [屬性] 視窗中將這個屬性的 [AttributeHierarchyEnabled] 屬性設為 [False],將 [AttributeHierarchyOptimizedState] 屬性設為 [NotOptimized],將 [AttributeHierarchyOrdered] 屬性設為 [False]

    這些設定會把屬性隱藏起來,讓使用者看不到它們,而且可節省處理資源,您應該做這樣的設定,因為這個新屬性只用來排序另一個屬性的成員。

  6. [屬性] 窗格中,展開 [全名]

    請注意,在 [客戶] 維度中,所有衍生自 Analysis Services 教學課程資料來源檢視的 [客戶] 資料表的屬性,都是透過這個屬性而產生關聯。

  7. 展開 [地理位置]

    請注意,在 [客戶] 維度中,所有衍生自 Analysis Services 教學課程資料來源檢視的 [地理位置] 資料表的屬性,都是透過 [地理位置] 屬性而產生關聯。

  8. 選取 [地理位置],然後在 [屬性] 窗格中將它的 [AttributeHierarchyVisible] 屬性設為 [False],將它的 [AttributeHierarchyOptimized] 屬性設為 [NotOptimized],將它的 [AttributeHierarchyOrdered] 屬性設為 [False]

    因為這個屬性不會用來瀏覽,所以這些設定會把屬性隱藏起來,讓使用者看不到它們,並節省處理時間。如果屬性階層有成員屬性,則必須啟用屬性階層。

  9. [屬性] 窗格中,選取 [通勤距離]

    請注意,這個屬性和 [通勤距離排序] 屬性之間沒有定義關聯性。

  10. [通勤距離排序] 屬性拖曳到 [通勤距離] 屬性之下的 [<新增屬性關聯性>] 標記。

    現在您已在 [通勤距離] 屬性和 [通勤距離排序] 屬性之間定義了關聯性。在 [屬性] 視窗中,請注意 [通勤距離] 屬性的 [通勤距離排序] 成員的 [RelationshipType] 屬性的預設值是 [Flexible]

  11. 在 [屬性] 視窗中,將 [RelationshipType] 屬性的值變更為 [Rigid]

    [通勤距離] 屬性和 [通勤距離排序] 屬性的成員之間的關聯性不會隨時間而改變。現在您可以設定 [通勤距離] 屬性的排序順序。

  12. [屬性] 窗格中選取 [通勤距離],再將 [屬性] 視窗中的 [OrderBy] 屬性值變更為 [AttributeKey],將 [OrderByAttribute] 屬性值變更為 [通勤距離排序]

  13. [建立] 功能表上,按一下 [部署 Analysis Services 教學課程]

  14. 順利完成部署之後,切換到 [客戶] 維度的維度設計師的 [瀏覽器] 索引標籤,按一下 [重新連接],再瀏覽 [通勤距離] 屬性階層。

    請注意,屬性階層成員現在是依據遞增的距離按邏輯順序排序,如下圖所示。

    重新排序的通勤距離屬性階層

本課程的下一項工作

在使用者自訂階層的屬性之間指定屬性關聯性