在 Microsoft SQL Server Analysis Services 中,多維度表達式 (MDX) 腳本可以套用至整個 Cube,或套用至腳本執行中特定點的 Cube 特定部分。 MDX 腳本可以透過使用計算階段,對 Cube 內的計算採取分層方法。
備註
如需有關計算傳遞如何影響計算的詳細資訊,請參閱 瞭解傳遞順序與求解順序(MDX)。
若要控制 MDX 腳本內的計算階段、範圍和上下文,請特別使用 CALCULATE 語句、This 函數和 SCOPE 語句。
使用 CALCULATE 語句
CALCULATE 語句會以匯總的數據填入 Cube 中的每個數據格。 例如,預設 MDX 腳本在腳本開頭有單一 CALCULATE 語句。
如需 CALCULATE 語句語法的詳細資訊,請參閱 CALCULATE 語句 (MDX) 。
備註
如果腳本包含包含 CALCULATE 語句的 SCOPE 語句,MDX 會在 SCOPE 語句所定義的 Subcube 內容中評估 CALCULATE 語句,而不是針對整個 Cube。
使用此函式
函數 This 用於在 MDX 腳本中擷取目前的子立方體。 您可以使用 This 功能,將目前子立方體內的儲存格值快速設定為 MDX 運算式。 您通常會使用函式 This 配合 SCOPE 語句,在特定計算階段期間變更特定 Subcube 的內容。
備註
如果腳本中包含帶有 This 函式的 SCOPE 語句,MDX 將在 SCOPE 語句所定義的子多維資料集 (Subcube) 內容中評估 This 函式,而不是針對整個多維資料集 (Cube)。
此功能範例
下列 MDX 腳本命令範例會使用 This 函式,在 Adventure Works DW 多維度 2012 範例 Cube 的 Finance 量值群組中,針對 Customer 維度中 Redmond 成員的子系,將 Amount 量值的值增加到 10% 更高:
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS,
[Measures].[Amount], *);
/* This expression sets the value of the Amount measure */
THIS = [Measures].[Amount] * 1.1;
END SCOPE;
如需函式語法 This 的詳細資訊,請參閱 這個 (MDX) 。
使用 SCOPE 陳述式
SCOPE 語句會定義目前包含的 Subcube,並指定 MDX 腳本中其他 MDX 運算式和語句的範圍。 MDX 會在子立方體的上下文中評估其他 MDX 運算式和語句,包括 This 函式及 CALCULATE 語句。
SCOPE 語句是動態的,但本質上不是反覆的。 SCOPE 語句中包含的語句會執行一次,但 Subcube 本身可以動態判斷。 例如,您有一個名為「SampleCube」的立方體。 針對 SampleCube 立方體,您可以套用下列 SCOPE 語句來定義一個子立方體,來定義上下文為量值維度中的所有成員:
SCOPE([Measures].ALLMEMBERS);
THIS = [Measures].ALLMEMBERS.COUNT;
END SCOPE;
此 SCOPE 陳述句中的語句和表達式將執行一次。
現在,企業用戶會針對 SampleCube Cube 執行下列 MDX 查詢,其中包含一個名為 ExistingMeasure 的量值:
WITH MEMBER [Measures].[NewMeasure] AS '1'
SELECT
[Measures].ALLMEMBERS ON COLUMNS,
[Customer].DEFAULTMEMBER ON ROWS
FROM
[SampleCube]
從查詢傳回的數據格集類似於下表所示的輸出。
| 現有措施 | [新測量] | |
|---|---|---|
| [Customer]。[全部] | 2 | 2 |
查看傳回的數據格集,請注意 MDX 腳本中 SCOPE 語句中包含的 ExistingMeasure 值如何在定義 NewMeasure 量值之後動態更新。
SCOPE 陳述可以嵌套在另一個 SCOPE 陳述內。 不過,由於 SCOPE 語句不是重複的,巢狀 SCOPE 語句的主要目的是進一步細分 Subcube 以便進行特殊處理。
SCOPE 語句範例
下列 MDX 腳本範例使用了 SCOPE 語句,將 Adventure Works DW 多維度 2012 範例 Cube 中 Finance 度量組的 Amount 度量的值設定為對於 Customer 維度中 Redmond 成員的子系來說增加 10%。 不過,另一個 SCOPE 語句將 subcube 更改為包含 2002 年曆年度的子項的 Amount 量值。 最後,Amount 量值接著只會針對該 Subcube 進行匯總,讓 Amount 量值在其他行事歷年份中的匯總值保持不變。
/* Calculate the entire cube first. */
CALCULATE;
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS,
[Measures].[Amount], *);
/* This expression sets the value of the Amount measure */
THIS = [Measures].[Amount] * 1.1;
END SCOPE;
如需 SCOPE 語句語法的詳細資訊,請參閱 SCOPE 語句 (MDX) 。