修改 [時間] 維度

您可以定義屬性的複合索引鍵來控制 SELECT DISTINCT 處理查詢所傳回的成員。當您使用複合索引鍵時,屬性成員的排序順序是由複合索引鍵的成員順序來決定。在這個主題的工作中,您可以變更使用者自訂階層名稱、變更針對 [Date]、[Month]、[Calendar Quarter] 和 [Calendar Semester] 等屬性所顯示的成員名稱、為 EnglishMonthName、CalendarQuarter 和 CalendarSemester 等屬性定義複合索引鍵,以及修改複合索引鍵成員的順序來控制維度成員的排序順序。

修改使用者自訂階層

修改使用者自訂階層

  1. 請針對 Business Intelligence Development Studio 中的 [Time] 維度,切換到維度設計師,再按一下 [維度結構] 索引標籤。

  2. [階層和層級] 窗格中,按一下 [CalendarYear - CalendarSemester - CalendarQuarter - EnglishMonthName - FullDateAlternateKey] 階層,之後,在 [屬性] 視窗中將 [Name] 屬性變更為 Calendar Time

    這個使用者自訂階層的名稱現在變成 [Calendar Time]

  3. [Calendar Time] 使用者自訂階層中,將 [English Month Name] 層級變更為 Calendar Month[Full Date Alternate Key] 層級變更為 Date

  4. 請針對 Adventure Works DW 資料來源檢視,切換到資料來源檢視設計師,再以滑鼠右鍵按一下 [資料表] 窗格中的 [Time (dbo.DimTime)],再按一下 [新增具名計算]

  5. [建立具名計算] 對話方塊中,於 [資料行名稱] 方塊中輸入 SimpleDate,再於 [運算式] 方塊中輸入下列 SQL 指令碼:

    DATENAME(mm, FullDateAlternateKey) + ' ' +
    DATENAME(dd, FullDateAlternateKey) + ', ' +
    DATENAME(yy, FullDateAlternateKey)
    

    這個 SQL 指令碼會從 FullDateAlternateKey 資料行中擷取 year、month 和 day 等值。您可以在 [Time] 維度的 [Calendar Time] 階層中修改 [Date] 層級,來顯示這個新資料行的值,而非儲存在 DimTime 資料表的 FullDateAlternateKey 資料行中的原始值。

  6. 按一下 [確定],再切換到 [Time] 維度的維度設計師。

  7. 按一下 [Calendar Time] 階層的 [Date],然後在 [屬性] 視窗中檢閱 [Date] 層級的屬性。

    請注意,階層中的 [Date] 層級是以 [FullDateAlternateKey] 屬性為基礎。在接下來的步驟中,您會將這個層級所依據的屬性變更為 TimeKey 屬性,然後修改 TimeKey 屬性的屬性,使其成員的名稱是以您剛才在 SimpleDate 資料行定義的值為基礎。您也可以將 FullDateAlternateKey 保留為 [Date] 層級所依據的屬性,並變更該屬性,使其成員名稱以 SimpleDate 資料行為基礎。不過,第一個方法比較有效率;您不需要同時有 TimeKey 屬性和 FullDateAlternateKey 屬性,因此,可以刪除 FullDateAlternateKey 屬性。

  8. [Calendar Time] 使用者自訂階層中,將 [Date] 層級的 [SourceAttribute] 屬性值變更為 [TimeKey],再從 [屬性] 窗格中刪除 [FullDateAlternateKey] 屬性。

  9. 選取 [屬性] 窗格中的 [TimeKey],依序展開 [NameColumn] 屬性集合和 [屬性] 視窗中的 [Source] 屬性集合。將 [ColumnID] 屬性的值變更為 [SimpleDate]

    請注意,TimeKey 屬性 (Attribute) 的 OrderBy 屬性 (Property) 指定屬性 (Attribute) 階層的成員要按照其索引鍵值排列順序。

  10. 在 BI Development Studio 的 [建立] 功能表上,按一下 [部署 Analysis Services Tutorial]。當成功完成部署後,針對 [Time] 維度在 [維度設計師] 中按一下 [瀏覽器] 索引標籤,然後按一下 [重新連接]

  11. 展開 [Calendar Time] 階層中的層級,以檢閱 [Date] 層級的成員。

    請注意,[Date] 層級的成員已比以前更加清楚易懂。不過,也請注意,semester、quarter 和 month 成員並沒有指出其父系年份。

    下圖顯示 [Date] 層級的成員。

    日期層級的成員

  12. [階層] 清單中,選取 [EnglishMonthName],再展開 [All] 成員。

    請注意,在 [Time] 維度中,每一個月份總共只出現一次,而不是每一年出現一次。在這個主題的下一項工作中,您會為每一年的每一月建立其唯一名稱。

  13. [階層] 清單中,選取 [CalendarQuarter],再展開 [All] 成員。

    請注意,在 [Time] 維度中,每一季總共只出現一次,而不是每一季出現一次。另外也請注意,月份是依字母順序排序。在這個主題的下一項工作中,您會為每一年的每一日曆季建立其唯一名稱。在第 4 課,您將繼續設定月份以按時間先後排序。

提供唯一的維度成員名稱

提供唯一的維度成員名稱

  1. 請針對 Adventure Works DW 資料來源檢視,切換到資料來源檢視設計師,再以滑鼠右鍵按一下 [資料表] 窗格中的 [Time (dbo.DimTime)],再按一下 [新增具名計算]

  2. [建立具名計算] 對話方塊中,於 [資料行名稱] 方塊中輸入 MonthName,再於 [運算式] 方塊中輸入下列 SQL 指令碼:

    EnglishMonthName+' '+ CONVERT(CHAR (4), CalendarYear)
    

    這個 SQL 指令碼會將 DimTime 資料表中的每一個月的月份和年份串連成新的資料行。

  3. 按一下 [確定]

  4. 以滑鼠右鍵按一下 [資料表] 窗格中的 [Time (dbo.DimTime)],再按一下 [新增具名計算]

  5. [建立具名計算] 對話方塊中,於 [資料行名稱] 方塊中輸入 CalendarQuarterDesc,再於 [運算式] 方塊中輸入下列 SQL 指令碼:

    'Q' + CONVERT(CHAR (1), CalendarQuarter) +' '+ 'CY ' +
    CONVERT(CHAR (4), CalendarYear)
    

    這個 SQL 指令碼會將 DimTime 資料表中的每一季的日曆季和年份串連成新的資料行。

  6. 按一下 [確定]

  7. 以滑鼠右鍵按一下 [資料表] 窗格中的 [Time],再按一下 [新增具名計算]

  8. [建立具名計算] 對話方塊中,於 [資料行名稱] 方塊中輸入 CalendarSemesterDesc,再於 [運算式] 方塊中輸入下列 SQL 指令碼:

    CASE
    WHEN CalendarSemester = 1 THEN 'H1' + ' ' + 'CY' + ' ' 
           + CONVERT(CHAR(4), CalendarYear)
    ELSE
    'H2' + ' ' + 'CY' + ' ' + CONVERT(CHAR(4), CalendarYear)
    END
    

    這個 SQL 指令碼會將 DimTime 資料表中的每半年度的日曆半年度和年份串連成新的資料行。

  9. 按一下 [確定],然後切換到 [Time] 維度的維度設計師,再按一下 [維度結構] 索引標籤。

    您將在 [Time] 維度中修改 EnglishMonthName、CalendarQuarter 和 CalendarSemester 等屬性,以便使用新資料行的值作為成員值。

  10. [屬性] 窗格中,選取 [EnglishMonthName]。在 [屬性] 視窗中,依序展開 [NameColumn] 屬性和 [Source] 屬性,再將 [ColumnID] 屬性的值變更為 [MonthName]

  11. 以相同方式,將 [Calendar Quarter] 屬性和 [Calendar Semester] 屬性的 [ColumnID] 屬性變更如下:

    • Calendar Quarter — 將 [ColumnID] 屬性變更為 [CalendarQuarterDesc]
    • Calendar Semester — 將 [ColumnID] 屬性變更為 [CalendarSemesterDesc]
  12. 在 BI Development Studio 的 [建立] 功能表上,按一下 [部署 Analysis Services Tutorial]。順利完成部署之後,按一下 [Time] 維度的維度設計師的 [瀏覽器] 索引標籤。

  13. [瀏覽器] 索引標籤的工具列上,按一下 [重新連接],再檢閱 [Calendar Quarter] 屬性階層中的 [Calendar Quarter] 屬性階層的成員。

    請注意,雖然 CalendarQuarter 屬性階層的成員名稱比以前更加清楚易懂,屬性階層中仍維持 4 個成員,而不是每一個年份和季別組合各一個成員。如果您檢閱 EnglishMonthName 或 CalendarSemester 屬性階層,就會發現類似的行為。在這個主題的下一項工作中,您會指定這些屬性的複合索引鍵來修改這個行為。

指定複合索引鍵值

指定複合索引鍵值

  1. 選取 [Time] 維度的維度設計師的 [維度結構] 索引標籤,選取 [EnglishMonthName] 屬性,再按一下省略符號按鈕 ([…]) (在 [屬性] 視窗的 [KeyColumns] 屬性資料格中),來修改屬性的值。

    此時會開啟 [DataItem 集合編輯器],顯示這個屬性的成員索引鍵資料行。當 Analysis Services 處理維度時,它會發出 SELECT DISTINCT 查詢來決定維度的成員。在 [DataItem 集合編輯器] 中,您可以為屬性指定複合索引鍵而非單一資料行索引鍵,來傳回其他維度成員。

  2. 按一下 [加入] 來定義維度屬性的第二個成員索引鍵。

    新的成員索引鍵會出現在成員清單中。您必須定義這個新索引鍵成員的屬性。

  3. [新增繫結 (WChar) 屬性] 下,按一下省略符號按鈕 ([...]) (在 [Source] 屬性資料格中),來變更它的值。

    此時會出現 [物件繫結] 對話方塊。在這個對話方塊中,您可以指定所指定資料表中的現有資料行,如果您是使用上下設計方法來產生關聯式結構描述,也可以指定您要建立的資料行類型。

  4. [繫結類型] 清單中,選取 [資料行繫結]

  5. 請確認在 [來源資料表] 清單中選取 [Time]

  6. [來源資料行] 清單中,選取 [CalendarYear]

    下圖顯示 [物件繫結] 對話方塊。

    物件繫結對話方塊

  7. 按一下 [確定] 來關閉 [物件繫結] 對話方塊,再按一下 [確定] 來關閉 [DataItem 集合編輯器]

    請注意,[KeyColumns] 屬性的值現在設為 [(Collection)]

  8. 選取 [CalendarQuarter] 屬性,再按一下省略符號按鈕 ([...]) (在 [屬性] 視窗的 [KeyColumns] 屬性資料格中),來修改屬性的值。

    此時會出現 [DataItem 集合編輯器]

  9. 按一下 [加入] 來定義 [KeyColumns] 屬性的第二個成員。

  10. [新增繫結 (WChar) 屬性] 下,按一下省略符號按鈕 ([...]) (在 [Source] 屬性資料格中),來變更它的值。

    此時會出現 [物件繫結] 對話方塊。

  11. [繫結類型] 清單中,選取 [資料行繫結]

  12. [來源資料表] 清單中,確認已選取 [Time]

  13. [來源資料行] 清單中,選取 [CalendarYear]

  14. 按一下 [確定],再按一下 [確定]

  15. 選取 [CalendarSemester] 屬性,再按一下省略符號按鈕 ([...]) (在 [屬性] 視窗的 [KeyColumns] 屬性資料格中),來修改屬性的值。

    此時會出現 [DataItem 集合編輯器] 對話方塊。

  16. 按一下 [加入] 來定義 [KeyColumns] 屬性的第二個成員。

  17. [新增繫結 (WChar) 屬性] 下,按一下省略符號按鈕 ([...]) (在 [Source] 屬性資料格中),來變更它的值。

    此時會出現 [物件繫結] 對話方塊。

  18. [繫結類型] 清單中,選取 [資料行繫結]

  19. [來源資料表] 清單中,確認已選取 [Time]

  20. [來源資料行] 清單中,選取 [CalendarYear]

  21. 按一下 [確定],再按一下 [確定]

  22. 在 BI Development Studio 的 [建立] 功能表上,按一下 [部署 Analysis Services Tutorial]。順利完成部署之後,按一下 [Time] 維度的維度設計師的 [瀏覽器] 索引標籤。

  23. [瀏覽器] 索引標籤的工具列上,按一下 [重新連接],再檢閱 [Calendar Quarter] 屬性階層中的 [Calendar Quarter] 屬性階層的成員。

    請注意,雖然成員現在已經存在於每一年每一季的 CalendarQuarter 屬性階層中,但那些成員並未按照時間順序排列,而是先按季再按年排序。在這個主題的下一項工作中,您會修改先按季再按年排序這個屬性階層成員的行為。

    下圖顯示 CalendarQuarter 屬性階層的目前結構。

    CalendarQuarter 階層的目前結構

  24. 檢閱 EnglishMonthName 和 CalendarSemester 屬性階層的成員。

    請注意,這些階層的成員也未按照時間順序排列,而是分別按月或按半年度再按年來排序。在這個主題的下一項工作中,您會修改這個行為來變更這種排序順序。

修改複合索引鍵成員順序來變更排序順序

修改複合索引鍵成員順序

  1. 選取 [Time] 維度之維度設計師的 [維度結構] 索引標籤,再選取 [屬性] 窗格中的 [CalendarSemester]

  2. 在 [屬性] 視窗中,檢閱 [OrderBy] 屬性的值。

    CalendarSemester 屬性階層的成員是按照其索引鍵值來排序。利用複合索引鍵,成員索引鍵的排序是先依據第一個成員索引鍵的值,再依據第二個成員索引鍵的值。換句話說,CalendarSemester 屬性階層的成員是先按半年度再按年來排序。

  3. 在 [屬性] 視窗中,按一下省略符號按鈕 ([...]) 來變更 [KeyColumns] 屬性值。

    此時會開啟 [DataItem 集合編輯器]

  4. [DataItem 集合編輯器][成員] 資料表中,請確認已選取 [DimTime.CalendarSemester (UnsignedTinyInt)],再按一下向下箭號,使這個複合索引鍵的成員順序相反。按一下 [確定]

    屬性階層的成員現在變成先按年再按半年度排序。

  5. [屬性] 窗格中選取 [CalendarQuarter],之後,在 [屬性] 視窗的 [KeyColumns] 屬性中,按一下省略符號按鈕 ([...])。

  6. [DataItem 集合編輯器][成員] 資料表中,請確認已選取 [DimTime.CalendarQuarter (UnsignedTinyInt)],再按一下向下箭號,使這個複合索引鍵的成員順序相反。按一下 [確定]

    屬性階層的成員現在變成先按年再按季排序。

  7. [屬性] 窗格中選取 [EnglishMonthName],之後,在 [屬性] 視窗的 [KeyColumns] 屬性中,按一下省略符號按鈕 ([...])。

  8. [DataItem 集合編輯器][成員] 資料表中,請確認已選取 [DimTime.EnglishMonthName (WChar)],再按一下向下箭號,使這個複合索引鍵的成員順序相反。按一下 [確定]

    屬性階層的成員現在變成先按年再按月排序。

  9. 在 BI Development Studio 的 [建立] 功能表上,按一下 [部署 Analysis Services Tutorial]。順利完成部署之後,按一下 [Time] 維度的維度設計師的 [瀏覽器] 索引標籤。

  10. [瀏覽器] 索引標籤的工具列上,按一下 [重新連接],再檢閱 CalendarQuarter 和 CalendarSemester 屬性階層的成員。

    請注意,這些階層的成員現在已按照時間順序排列了,它們是先按年再按季或半年度來排序。

  11. 檢閱 [EnglishMonthName] 屬性階層的成員。

    請注意,現在階層的成員會先依年排序,然後依月按字母順序排序 (這是因為依據關聯式資料庫中的 nvarchar 資料類型,在資料來源檢視中 EnglishCalendarMonth 資料行的資料類型為字串資料行)。不過,每一年的月份若按時間順序排序會更有幫助。您會在第 4 課進行這項變更。

    下圖顯示 [EnglishMonthName] 屬性階層。

    EnglishMonthName 屬性階層

  12. 在 BI Development Studio 的 [檔案] 功能表上,按一下 [全部儲存] 來儲存您到目前為止在 Analysis Services 教學課程專案中所進行的變更,讓您可以在這裡停止教學課程,等以後再繼續。

您透過在資料來源檢視中建立具名計算,再使用這些具名計算作為屬性成員名稱,而順利增加了 [Time] 維度屬性階層成員的易懂性。您也透過定義複合索引鍵及指定複合索引鍵成員的適當順序來控制維度成員排序順序,而增加了易懂性。

本課程的下一項工作

修改 [產品] 維度

請參閱

其他資源

定義及設定維度、屬性和階層

說明及資訊

取得 SQL Server 2005 協助