次の方法で共有


スコープとコンテキストの管理 (MDX)

Microsoft SQL Server Analysis Services では、多次元式 (MDX) スクリプトは、スクリプトの実行中の特定のポイントで、キューブ全体またはキューブの特定の部分に適用できます。 MDX スクリプトは、計算パスを使用してキューブ内の計算に階層化されたアプローチを取ることができます。

計算パスが計算に与える影響の詳細については、「 パス順序と解決順序について (MDX)」を参照してください。

MDX スクリプト内の計算パス、スコープ、コンテキストを制御するには、CACULATE ステートメント、 This 関数、SCOPE ステートメントを特に使用します。

CALCULATE ステートメントの使用

CALCULATE ステートメントは、キューブ内の各セルに集計データを設定します。 たとえば、既定の MDX スクリプトでは、スクリプトの先頭に 1 つの CALCULATE ステートメントがあります。

CALCULATE ステートメントの構文の詳細については、 CALCULATE ステートメント (MDX) を参照してください。

スクリプトに CALCULATE ステートメントを含む SCOPE ステートメントが含まれている場合、MDX はキューブ全体ではなく、SCOPE ステートメントによって定義されたサブキューブのコンテキスト内で CALCULATE ステートメントを評価します。

この関数の使用

This関数を使用すると、MDX スクリプト内の現在のサブキューブを取得できます。 This関数を使用すると、現在のサブキューブ内のセルの値をすばやく MDX 式に設定できます。 多くの場合、 This 関数を SCOPE ステートメントと組み合わせて使用して、特定の計算パス中に特定のサブキューブの内容を変更します。

スクリプトに This 関数を含む SCOPE ステートメントが含まれている場合、MDX は、キューブ全体ではなく、SCOPE ステートメントによって定義されたサブキューブのコンテキスト内で This 関数を評価します。

この関数の例

次の MDX スクリプト コマンドの例では、This 関数を使用して、Adventure Works DW Multidimensional 2012 サンプル キューブの Finance メジャー グループにおける Amount メジャーの値を、Customer ディメンションの Redmond メンバーの子供に対して 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関数の構文の詳細については、「This (MDX)」を参照してください。

SCOPE ステートメントの使用

SCOPE ステートメントは、MDX スクリプト内の他の MDX 式とステートメントを含む現在のサブキューブを定義し、そのスコープを指定します。 MDX は、サブキューブのコンテキスト内で、この他の MDX 式とステートメント ( This 関数や CALCULATE ステートメントを含む) を評価します。

SCOPE ステートメントは動的ですが、本質的には反復的ではありません。 SCOPE ステートメントに含まれるステートメントは 1 回実行されますが、サブキューブ自体は動的に決定できます。 たとえば、SampleCube という名前のキューブがあるとします。 SampleCube キューブに対して、次の SCOPE ステートメントを適用してサブキューブを定義し、メジャー ディメンション内の ALLMEMBERS としてコンテキストを定義します。

SCOPE([Measures].ALLMEMBERS);

THIS = [Measures].ALLMEMBERS.COUNT;

END SCOPE;

この SCOPE ステートメント内のステートメントと式は 1 回実行されます。

これで、ビジネス ユーザーは、SampleCube キューブに対して ExistingMeasure という名前の 1 つのメジャーを含む次の MDX クエリを実行します。

WITH MEMBER [Measures].[NewMeasure] AS '1'

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

クエリから返されるセルセットは、次の表に示す出力のようになります。

[ExistingMeasure] [新しい測定]
[顧客]。[すべて] 2 2

返されたセルセットを見ると、MDX スクリプト内の SCOPE ステートメントに含まれる ExistingMeasure 値が、メジャー NewMeasure が定義された後に動的に更新される方法に注目してください。

SCOPE ステートメントは、別の SCOPE ステートメント内で入れ子にすることができます。 ただし、SCOPE ステートメントは反復的ではないため、SCOPE ステートメントを入れ子にする主な目的は、特別な処理のためにサブキューブをさらに分割することです。

SCOPE ステートメントの例

次の MDX スクリプトの例では、SCOPE ステートメントを使用して、Adventure Works DW 多次元 2012 サンプル キューブの Finance メジャー グループの Amount メジャーの値を、Customer ディメンションの Redmond メンバーの子に対して 10% 上位に設定します。 ただし、別の SCOPE ステートメントによって、サブキューブは2002年暦のすべての子に対する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) を参照してください。

こちらもご覧ください

MDX 言語リファレンス (MDX)
基本的な MDX スクリプト (MDX)
MDX クエリの基礎 (Analysis Services)