適用対象:
SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Microsoft SQL Server SQL Server Analysis Services では、多次元式 (MDX) スクリプトは、スクリプトの実行内の特定のポイントで、キューブ全体またはキューブの特定の部分に適用できます。 MDX スクリプトは、計算パスを使用してキューブ内の計算に階層化されたアプローチを取ることができます。
注
計算パスが計算に与える影響の詳細については、「 パス順序と解決順序について (MDX)」を参照してください。
MDX スクリプト内の計算パス、スコープ、コンテキストを制御するには、CACULATE ステートメント、 This 関数、SCOPE ステートメントを特に使用します。
CALCULATE ステートメントの使用
CALCULATE ステートメントは、キューブ内の各セルに集計データを設定します。 たとえば、既定の MDX スクリプトでは、スクリプトの先頭に 1 つの CALCULATE ステートメントがあります。
CALCULATE ステートメントの構文の詳細については、 CALCULATE ステートメント (MDX) を参照してください。
注
スクリプトに CALCULATE ステートメントを含む SCOPE ステートメントが含まれている場合、MDX はキューブ全体ではなく、SCOPE ステートメントによって定義されたサブキューブのコンテキスト内で CALCULATE ステートメントを評価します。
この関数の使用
この関数を使用すると、MDX スクリプト内の現在のサブキューブを取得できます。 この関数を使用すると、現在のサブキューブ内のセルの値をすばやく MDX 式に設定できます。 多くの場合、 この 関数を SCOPE ステートメントと組み合わせて使用して、特定の計算パス中に特定のサブキューブの内容を変更します。
注
スクリプトに This 関数を含む SCOPE ステートメントが含まれている場合、MDX はキューブ全体ではなく、SCOPE ステートメントによって定義されたサブキューブのコンテキスト内で This 関数を評価します。
この関数の例
次の MDX スクリプト コマンドの例では、This 関数を使用して、Adventure Works DW 多次元 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] | [NewMeasure] | |
|---|---|---|
| [顧客]。[すべて] | 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)