基本的な MDX スクリプト (MDX)

多次元式 (MDX) スクリプトは、MicrosoftSQL ServerAnalysis Services におけるキューブの計算処理を定義します。MDX スクリプトには、以下の 2 種類があります。

  • 既定の MDX スクリプト
    キューブを作成すると、そのキューブの既定の MDX スクリプトが Analysis Services によって作成されます。このスクリプトは、キューブ全体の計算パスを定義します。

  • ユーザー定義の MDX スクリプト
    キューブを作成した後で、キューブの計算機能を拡張するためにユーザー定義の MDX スクリプトを追加することができます。

既定の MDX スクリプト

キューブを定義したときに Analysis Services によって作成される既定の MDX スクリプトには、CALCULATE ステートメントが 1 つ入っています。この単一の CALCULATE ステートメントは既定の MDX スクリプトの先頭に置かれており、最初の計算パスでキューブ全体が計算されるということを示しています。

既定の MDX スクリプトには、キューブ デザイナで作成された、名前付きセット、割り当て、および計算されるメンバを作成するためのスクリプト コマンドも入ります。

  • Analysis Services は既定の MDX スクリプトに直接スクリプト コマンドを追加します。

  • キューブ内の名前付きセットごとに、対応する CREATE SET ステートメントが既定の MDX スクリプトに存在します。

  • キューブに定義されている計算されるメンバごとに、対応する CREATE MEMBER ステートメントが既定の MDX スクリプトに存在します。

既定の MDX スクリプトの中のスクリプト コマンド、名前付きセット、および計算されるメンバの順番は、キューブ デザイナの [計算] タブを使って制御できます。既定の MDX スクリプトに格納されている計算の定義の詳細については、「計算の定義」を参照してください。

関連付けられている MDX スクリプトがない場合、キューブは既定の MDX スクリプトを使用します。キューブには最低 1 つの MDX スクリプトを関連付ける必要があります。これは、キューブが計算の動作を決定するにあたって MDX スクリプトに依存しているためです。つまり、キューブが MDX スクリプトに関連付けられていない場合、または関連付けられている MDX が空の場合、そのキューブはセルの計算がまったくできないことになります。Analysis Services Scripting Language (ASSL) コマンドまたは分析管理オブジェクト (AMO) のいずれかを使用してプログラム的にキューブを作成する場合は、単一の CALCULATE ステートメントが入った既定の MDX スクリプトをキューブのために作成することをお勧めします。

MDX スクリプトの内容

MDX スクリプトには以下のステートメントと式を入れることができます。

  • すべての MDX スクリプト ステートメント
    MDX スクリプトにおいて、MDX スクリプト ステートメントは、計算のコンテキストと範囲を制御し、MDX スクリプト内の他のステートメントの動作を管理します。このカテゴリには以下のステートメントが含まれます。

    MDX スクリプト ステートメントの詳細については、「MDX スクリプト ステートメント (MDX)」を参照してください。

  • CREATE MEMBER
    CREATE MEMBER ステートメントは、計算されるメンバを作成します。計算されるメンバを作成する方法の詳細については、「MDX での計算されるメンバの作成 (MDX)」を参照してください。

  • CREATE SET
    CREATE SET ステートメントは名前付きセットを作成します。名前付きセットを作成する方法の詳細については、「MDX での名前付きセットの作成 (MDX)」を参照してください。

  • 条件ステートメント
    条件ステートメントは、MDX スクリプトに条件ロジックを追加します。このカテゴリには CASE および IF ステートメントが含まれます。

  • 代入式
    代入式は、制約されたサブキューブに式 (値など) を代入します。制約されたサブキューブ式は、MDX スクリプト内でサブキューブの "境界" を定義する、制約されたセット式の集合です。以下のコードに、制約されたサブキューブ式の構文を示します。

    <Constrained subcube> ::= ( 
        ( <Constrained set> [<Crossjoin operator> <Constrained set>...] |
        <ROOT function> |
        <TREE function> |
        LEAVES() |
        * ) [, <Constrained subcube>...]
    <Constrained set> ::= 
        <Natural hierarchy>.MEMBERS | 
        <Natural hierarchy>.LEVEL(<numeric expression>).MEMBERS | 
        { <Natural hierarchy member> } | 
        DESCENDANTS( <Natural hierarchy member>, <Level expression>, ( SELF | AFTER | SELF_AND_AFTER ) ) | 
        DESCENDANTS( <Natural hierarchy member>, , LEAVES )
    <Natural hierarchy> ::= <Hierarchy identifier>
    <Natural hierarchy member> ::= <Natural hierarchy>.<identifier>[.<identifier>...]