利用指令碼命令定義範圍的指派

在這一課前兩個主題的工作中,您學習在 Cube 的計算指令碼中加入導出成員和命名集計算。除了這兩個特定類型的多維度運算式 (MDX) 計算之外,您也可以使用「新增指令碼」命令,在 Cube 中執行 MDX 支援的大部分動作。

在 Microsoft SQL Server 2005 Analysis Services (SSAS) 中,MDX 指令碼可以套用至整個 Cube,也可以在指令碼執行作業的特定點,套用至該 Cube 的特定區段。您已經學習預設指令碼命令 CALCULATE 陳述式,它會在 Cube 的資料格中,依據預設範圍來擴展彙總資料。

預設範圍是整個 Cube,但就像前一個主題中所述,您可以使用 SCOPE 陳述式定義更小的範圍,稱為 Subcube,然後將 MDX 指令碼只套用至該特定的 Cube 空間。SCOPE 陳述式會定義計算指令碼內所有後續 MDX 運算式和陳述式的範圍,直到目前範圍終止或重新制定範圍為止。接著 THIS 陳述式會將 MDX 運算式套用至目前範圍中。您可以使用 BACK_COLOR 陳述式來指定目前範圍資料格的背景資料格顏色,幫助您偵錯。

在這個主題的工作中,您要使用 SCOPETHIS 陳述式,為 2005 會計年度的每一個會計季度定義銷售配額。然後針對 Cube 中所有的會計年度,將銷售配額配置到月份層級。另外,您也要學習使用中斷點,幫助您為計算指令碼偵錯。

根據時間和員工來檢閱銷售量配額配置

根據時間和員工來檢閱銷售量配額配置

  1. 針對 Analysis Services 教學課程 Cube 開啟 Cube 設計師,然後按一下 [瀏覽器] 索引標籤。

  2. [資料] 窗格移除所有的階層和量值,以及從 [篩選] 窗格移除所有的維度成員。

  3. [銷售配額] 量值群組中的 [銷售量配額] 量值加入至 [資料] 窗格的資料區域。

  4. [Fiscal Time] 使用者自訂階層加入至資料行。

  5. [員工名稱] 屬性階層加入至資料列區域。

    請注意,2005 會計年度尚未定義任何銷售配額值。

  6. 在資料行區域中,移除 [FY 2002][FY 2003]

  7. 在資料行區域中,依序展開 [FY 2004][H1 FY 2004][Q3 FY 2004]

    請注意,該會計季度中每一個會計月份的銷售量配額,與該會計季度的銷售量配額一樣。這是因為 [銷售配額] 量值群組中的時間維度微粒是季度層級,如第 5 課所討論。

    下圖所顯示的是,在 2004 會計年度第四季中,每個月都有銷售配額的每個員工之銷售配額。

    每個會計月份的銷售額配額

定義 2005 會計年度銷售量配額計算的範圍。

在這項工作中,您要檢閱目前範圍、修改範圍、然後定義計算,根據 2004 會計年度值,來決定 2005 會計年度銷售量配額值。

定義 2005 會計年度銷售量配額計算的範圍

  1. 選取 [計算] 索引標籤,然後在工具列選取 [表單檢視]

  2. [指令碼組合管理] 窗格中選取 [大型轉售商],然後在 [計算] 索引標籤的工具列上,按一下 [新增指令碼命令]

    請注意,[計算運算式] 窗格會出現空白指令碼,而且這個指令碼命令顯示在 [指令碼組合管理] 窗格中時,其標題亦為空白。

  3. [計算運算式] 窗格中,輸入下列陳述式:

    /* Changing Scope to All or Default Member */
    SCOPE (ROOT())
    

    這個 SCOPE 陳述式會將 Cube 範圍改為該 Cube 中所有屬性的所有成員或預設成員。

  4. [計算] 索引標籤的工具列上,按一下 [新增指令碼命令],然後在 [計算運算式] 窗格中,輸入下列陳述式:

    /* Defining the cube scope for the sales amount quotas for FY2005 */
    SCOPE ()
    

    請注意,右括號底下如果出現紅色曲線,表示您必須在 SCOPE 陳述式的括號中定義一組成員。您一開始就得把 [銷售量配額] 量值加入 SCOPE 陳述式中,把這個量值納入該範圍。

  5. [計算工具] 窗格的 [中繼資料] 索引標籤上,依序展開 [量值][銷售配額],然後將 [銷售量配額] 量值拖曳至 [計算運算式] 窗格中 SCOPE 陳述式的括號內。

    請注意,紅色曲線會消失。接下來,您要將 [FY 2005] 維度成員加入至 SCOPE 陳述式中,以便將這個時間維度成員加入至目前範圍內。

  6. [計算工具] 窗格的 [中繼資料] 索引標籤上,依序展開 [日期][會計][會計時間][會計年度],然後將 [FY 2005] 成員拖曳至 [計算運算式] 窗格中的 SCOPE 陳述式內,緊接在您所定義之集合的 [銷售量配額] 成員後面。

    請注意這個集合的這個新成員的 [日期] 部分下面的紅色曲線。這條線是在通知您,這個維度成員前面有語法錯誤,因為在 SCOPE 陳述式中該集合的每一個成員之間,都必須加上逗號。

  7. [日期] 維度中 [FY 2005] 成員的 [日期] 部分前面,加上必要的逗號。

    請注意,原先出現的紅色曲線消失了。接下來,您要將 [Employee] 維度中 [Employee] 使用者自訂階層的成員加入 SCOPE 陳述式中,以便將這些成員加入目前的範圍內。

  8. [計算工具] 窗格中的 [中繼資料] 索引標籤上,展開 [Employee],然後將 [Employee] 使用者自訂階層拖入 [計算運算式] 窗格中的 SCOPE 陳述式之內,緊接在您所定義之集合的 [Date].[Fiscal Time].[Fiscal Year].&[2005] 成員後面。

    請注意,如果這個集合的這個新成員的 [員工] 部分下面出現紅色曲線,表示 SCOPE 陳述式內該集合的每一個成員之間,必須加上一個逗號。

  9. 在新成員的 [員工] 部分前面,加上必要的逗號。

    請注意,原先出現的紅色曲線消失了。

  10. SCOPE 陳述式內該集合的 [員工].[員工] 成員尾端,加入下列子句,完成該集合第三個成員的定義:

    .Members
    

    這個子句可指定 [員工] 維度中員工階層所有的成員,都應該含括在目前 Cube 範圍內。

  11. 驗證您所完成的 SCOPE 陳述式,是否與下列指令碼相符:

    SCOPE ([Measures].[Sales Amount Quota],[Date].[Fiscal Time].[Fiscal Year].&[2005], [Employee].[Employees].Members)
    

    現在您已經完成範圍定義,定義您要將 MDX 運算式套用至的 Subcube,來計算 2005 會計年度的銷售配額量。

  12. [計算] 索引標籤的工具列上,按一下 [指令碼檢視],然後檢閱您剛剛加入的指令碼命令。

    請注意,您在 [計算運算式] 窗格中輸入的每一個指令碼命令都會顯示出來,但是每一個指令碼命令結尾都會加上分號。另外也請注意,每一個指令碼命令前面的註解,都可以幫助您瞭解每一個命令,如下圖所示。

    計算運算式窗格

定義和測試 2005 會計年度的新增銷售配額計算

在這個程序中,您將會在針對 [員工] 維度中所有成員計算 2005 會計年度銷售配額量的計算指令碼內,加入新的指令碼命令。不過,這次並不是在 [表單] 檢視中加入指令碼命令,而是直接在 [指令碼] 檢視中加入指令碼命令。在 [指令碼] 檢視中,您必須確定每一個指令碼命令之間都要加上分號。

定義和測試 2005 會計年度的新增銷售配額計算

  1. [指令碼] 檢視中,於計算指令碼結尾新增的一行中,輸入下列陳述式:

    /* Applying a calculation to the subcube */
    THIS = [Date].[Fiscal Time].[Fiscal Year].&[2004] * 1.25;
    

    THIS 陳述式會配置一個新值,給 Subcube 中 [員工] 成員和 [FY 2005] 成員交集的 [銷售量配額] 量值。這個新值是根據 2004 會計年度中 [員工] 成員和 [銷售量配額] 量值交集的值再乘以 1.25 而計算得出。

  2. [計算運算式] 窗格中,按一下 THIS 陳述式左邊的邊界,以設定中斷點。

    請注意,該邊界會出現一個紅點,而且陳述式會以紅色標示出來,如下圖所示。當您以偵錯模式執行這個專案時,您對專案所做的變更,會部署到 Analysis Services 的執行個體,Cube 會被處理,而且計算指令碼也會持續執行到中斷點為止。接下來您就可以逐個執行其餘的指令碼了。如果沒有設定中斷點,就以偵錯模式執行專案,計算指令碼會在遇到第一個計算指令碼 CALCULATE 陳述式時中斷。

    計算運算式窗格中所設定的中斷點

  3. [偵錯] 功能表上,按一下 [開始偵錯] (或者在鍵盤上按 F5)。

    專案會被部署和處理,而計算指令碼也會持續執行到中斷點。

  4. 隱藏所有停駐視窗,以便能有更多的空間,用來檢視顯示在 [計算] 索引標籤底端的 [樞紐資料表] 窗格。

    顯示的 [樞紐資料表] 窗格將可協助您進行偵錯,如下圖所示。

    協助偵錯的資料窗格

  5. [樞紐資料表] 窗格中,將 [銷售量配額] 量值加入至資料區域,將 [Date.Fiscal Time] 使用者自訂階層加入資料行區域,然後將 [Employee] 維度中的 [Employee Name] 屬性階層加入資料列區域。

    請注意,每位員工 [銷售量配額] 量值中 [會計年度] 層級的 [FY 2005] 成員,其 [銷售配額量] 量值的資料區域中不包含任何值,如下圖所示。依預設,當您處於偵錯模式時,[樞紐資料表] 窗格中會顯示空的資料格。

    在偵錯期間清空資料窗格中的資料格

  6. [F10] 執行 THIS 陳述式,並且計算 2005 會計年度的銷售配額。

    請注意,現在就會開始計算 [銷售量配額] 量值、[FY 2005] 維度成員和 [員工名稱] 成員交集之 [樞紐資料表] 窗格中的資料格。另外請注意,受到 THIS 陳述式影響的資料格會以黃色標示出來。有工具列圖示可以啟用或停用已變更資料格的反白顯示。依預設,已變更的資料格會反白顯示。

  7. [樞紐資料表] 窗格中,從資料行區域移除 [FY 2002][FY 2003][FY 2004]

  8. 以滑鼠右鍵按一下資料區域中的任何位置,然後按一下 [顯示空的資料格],移除這個選項旁邊的核取記號,並且隱藏所有空的資料格 (在 [計算] 索引標籤工具列上也有這個選項)。這樣就可以更方便的檢視所有具有銷售量配額值的員工,如下圖所示。

    顯示銷售額配額值的資料窗格

  9. [樞紐資料表] 窗格中,試著展開資料行區域中的 [FY 2005]

    請注意,由於 [銷售量配額] 量值和 [員工名稱] 屬性階層交集之 [H1 FY 2005] 成員的值因為超出目前範圍而無法計算,因此您無法展開 [FY 2005]

  10. 若要檢視空的資料格中是否有 [H1 FY 2005] 成員的值,請按一下 [樞紐資料表] 窗格中的任何位置,然後按一下 [計算] 索引標籤工具列上的 [顯示空的資料格],即可顯示所有空的資料格,如下圖所示。

    顯示 2005 會計年度的資料窗格

  11. [偵錯] 功能表上,按一下 [停止偵錯] (或者在鍵盤上按 Shift-F5)。

  12. 按一下計算指令碼左邊界的中斷點,將它移除。

將銷售量配額配置到 2005 會計年度半年度和季度

在這個程序中,您要修改範圍,加入 2005 會計年度的會計半年度成員,取代 2005 會計年度成員,同時還要將 2005 會計年度銷售量配額值的一半,配置到 2005 會計年度的每半年度。然後再修改範圍,加入 2005 會計年度的會計季度成員,來取代 2005 會計年度成員,接著再將 2005 會計年度銷售量配額值的四分之一,配置到 2005 會計年度的每一季。接著就是測試這些配置。

將銷售量配額配置到 2005 會計年度半年度和季度

  1. [計算運算式] 窗格的 [指令碼] 檢視中,於計算指令碼結尾新增的一行中,輸入下列陳述式:

    /* Allocation of Sales Amount Quota to the 2005 Fiscal Semesters */
    SCOPE ( [Date].[Fiscal Semester].[Fiscal Semester].Members ); 
    

    因為在這個 SCOPE 陳述式和前一個 SCOPE 陳述式之間不會出現任何 END SCOPE 陳述式,所以這個 SCOPE 陳述式是巢狀的 SCOPE 陳述式。當 SCOPE 陳述式被巢狀包含時,被巢狀包含的 SCOPE 陳述式會繼承那些未重訂範圍之屬性的父範圍。前一個 SCOPE 陳述式並不會直接修改 [銷售量配額] 量值、[Employees] 使用者自訂階層或 [Fiscal Time] 使用者自訂階層。而是利用 Members 函數,將 [會計半年] 屬性階層的所有成員都加入至 Subcube 定義中。如需詳細資訊,請參閱<Members (集合) (MDX)>。由於巢狀 SCOPE 陳述式的關係,Cube 空間現在包含 [Employee] 成員和 2005 會計年度中任何會計半年度之 [銷售量配額] 量值交集的所有成員 (在 Cube 中,2005 會計年度目前只有一個會計半年度)。

  2. [計算運算式] 窗格中,計算指令碼結尾的新行上,輸入下列陳述式:

    THIS = [Date].[Fiscal Time].CurrentMember.Parent / 2;
    

    這個陳述式會將會計季度的計算值,配置到所定義之 Cube 空間的每個會計半年度。CurrentMember.Parent 函數是用來將每個成員父系值的四分之一,配置給每個成員。如需詳細資訊,請參閱<CurrentMember (MDX)>和<Parent (MDX)>。

  3. [計算運算式] 窗格中,計算指令碼結尾的新行上,輸入下列陳述式:

    /* Allocation of Sales Amount Quota to the 2005 Fiscal Quarters */
    SCOPE ( [Date].[Fiscal Quarter].[Fiscal Quarter].Members ); 
    

    因為在這個 SCOPE 陳述式和前一個 SCOPE 陳述式之間不會出現任何 END SCOPE 陳述式,所以這個 SCOPE 陳述式也是巢狀的 SCOPE 陳述式。前一個 SCOPE 陳述式並不會直接修改 [銷售量配額] 量值、[Employees] 使用者自訂階層或 [Fiscal Time] 使用者自訂階層。而是利用 Members 函數,將 [會計季度] 屬性階層的所有成員都加入至 Subcube 定義中。因此,Cube 空間現在包含 [員工] 成員和 2005 會計年度中任何會計季度之 [銷售量配額] 量值交集的所有成員 (在 Cube 中,2005 會計年度目前只有一個會計季度)。

  4. [計算運算式] 窗格中,計算指令碼結尾的新行上,輸入下列陳述式:

    THIS = [Date].[Fiscal Time].CurrentMember.Parent / 2;
    

    這個陳述式會將會計季度的計算值,配置到所定義之 Cube 空間的每個會計季度。CurrentMember.Parent 函數是用來將每個成員父系值的一半,配置給每個成員。

  5. [計算運算式] 窗格中,按一下最終 SCOPE 陳述式旁的邊界來設定中斷點,然後在鍵盤按 F5

    計算指令碼會持續執行到中斷點。

  6. 按一下 [樞紐資料表] 窗格資料區域中的任何位置,然後按一下 [計算] 索引標籤工具列上的 [顯示空的資料格],以隱藏空的資料格。

    請注意,資料窗格會以您上次通過偵錯工具之行程所使用的相同量值和階層進行擴展,而且 [H1 FY 2005] 成員的值已經計算為父系值的一半,如下圖所示。

    最後請注意,每一個 [FY 2005] 成員的值都是根據其成員的彙總而重新計算的,此處是指會計年度的第一個會計半年度。2005 會計年度成員的值,會受到 2005 會計半年度成員計算值的影響,因為每一個指令碼都被當作獨立的行程加以執行。若要 Pin 一個現有的值,不讓它受到計算指令碼中後續陳述式的影響,請使用 FREEZE 陳述式。如需詳細資訊,請參閱<FREEZE 陳述式 (MDX)>。

    使用 FREEZE 所固定的現有值

  7. 在資料行區域中,展開 [H1 FY 2005]

    請注意,Q1 FY 2005 成員的值尚未計算。

  8. 按一下 [樞紐資料表] 窗格資料區域中的任何位置,然後按一下 [計算] 索引標籤工具列上的 [顯示空的資料格]

  9. 在資料行區域中,展開 [Q1 FY 2005]

    請注意,沒有任何值被配置到 2005 會計年度第一季內的兩個月,因為這些成員還不在目前 Subcube 的範圍內 (必須等到指令碼的最後兩個陳述式被執行為止)。Analysis Services 教學課程 Cube 的時間維度,只包含 2005 會計年度的前兩個月。因此,並沒有 Q2 FY 2005 成員。

  10. F10 執行 SCOPE 陳述式,然後再按一次 F10 執行計算指令碼中的最後一個陳述式,它會將計算套用至目前的 Subcube。

    請注意,Q1 FY 2005 成員的值已經計算,H1 FY 2005 的值和 FY2005 成員值也重新計算為其子成員的彙總,如下圖所示。另外也請注意,2005 會計年度中每個會計月份的值 (2005 七月和八月) 則未計算。在下一個程序中,您要將適當的值配置給每一季。

    Q1 FY 2005 成員的導出值

  11. [偵錯] 功能表上,按一下 [停止偵錯] (或者在鍵盤上按 Shift-F5)。

  12. 移除計算指令碼中的中斷點。

將銷售配額配置到月份

在這個程序中,您要修改範圍,在所有會計年度中加入會計月份層級 (前一個範圍陳述式將計算限制在 2005 會計年度)。接下來您要將每個員工銷售量配額之會計季度值的三分之一,配置到每一個會計月份。

將銷售配額配置到月份

  1. [計算運算式] 窗格中,計算指令碼結尾的新行上,加入下列陳述式:

    /* Allocate Quotas to Months */
    SCOPE ( [Date].[Fiscal Time].[Fiscal Month].Members );
    

    這個 SCOPE 陳述式是另一個巢狀範圍陳述式,這個陳述式會修改 Cube 空間,讓您將 MDX 運算式套用至這個 Cube 空間,根據每個會計季度的值,將銷售量配額配置到每個會計月份。這個 SCOPE 陳述式與前一個巢狀的 SCOPE 陳述式很類似,不過請注意,[Fiscal Time] 使用者自訂階層本身已重新制定範圍。因此,Cube 空間的成員現在包含 [Date] 維度的所有會計月份成員,而不只是 2005 會計年度的會計月份成員。

    ms169878.note(zh-tw,SQL.90).gif附註:
    將您對 Cube 範圍所做的這項修改,與您在前一個程序中對 Cube 範圍所做的修改作比較,務必讓自己確實瞭解兩個範圍變更陳述式的差異。
  2. [計算運算式] 窗格中,計算指令碼結尾的新行上,加入下列陳述式:

    THIS = [Date].[Fiscal Time].CurrentMember.Parent / 3; 
    

    這個陳述式將會計時間階層每個月份成員父系值的三分之一 — 季度層級,配置到會計時間階層的每個月份成員。這項計算會套用至 Cube 的所有會計月份。

  3. [計算運算式] 窗格中,按一下最終 THIS 陳述式左邊界來設定中斷點,然後在鍵盤按 F5

  4. 檢閱 2004 年七月和 2004 年八月的值。

    請注意,目前 2004 七月或 2004 八月尚未計算任何值。

  5. 以滑鼠右鍵按一下 [資料] 窗格中的任何位置,再按一下 [顯示空的資料格],只顯示含有值的資料格。

    如此可讓您更容易看清會計陳述式如何套用在計算指令碼之中。

  6. F10,執行最終陳述式。

    請注意,每個會計月份每個員工的銷售量配額值,都被計算為其父系值的三分之一,如下圖所示。

    計算的銷售額配額值

  7. 在資料行區域中移除 [FY 2005],然後再加入 [Q4 FY 2004]

  8. 依序展開 [FY 2004]、[H2 FY 2004] 和 [Q4 FY 2004]

    請注意,每個會計月份的值,等於會計季度的總值,如下圖所示。

    每個會計月份的導出值

  9. [偵錯] 功能表上,按一下 [停止偵錯]

  10. 移除計算指令碼中的中斷點。

  11. 在工具列中,按一下 [全部儲存]

ms169878.note(zh-tw,SQL.90).gif附註:
您可以下載並安裝更新的範例,以取得第 6 課已完成的專案。如需詳細資訊,請參閱<安裝範例>中的「取得更新的範例」。

下一課

第 7 課:定義關鍵效能指標 (KPI)

請參閱

其他資源

建立與編輯 MDX 指令碼
SCOPE 陳述式 (MDX)
FORE_COLOR 及 BACK_COLOR 內容 (MDX)
This (MDX)
FREEZE 陳述式 (MDX)
CurrentMember (MDX)
Parent (MDX)
Members (集合) (MDX)

說明及資訊

取得 SQL Server 2005 協助