次の方法で共有


スクリプト コマンドによるスコープが指定された割り当ての定義

Analysis Services では、多次元式 (MDX) スクリプトをキューブ全体に適用することも、スクリプト実行の特定の時点でキューブの特定のセクションに適用することもできます。既定のスコープに基づいて集計データをキューブ内のセルに入れる既定のスクリプト コマンド、つまり CALCULATE ステートメントについては、既に学習したとおりです。

既定のスコープはキューブ全体ですが、前のトピックで説明したように、SCOPE ステートメントを使用してサブキューブという限定されたスコープを定義し、その特定のキューブ空間だけに MDX スクリプトを適用することができます。SCOPE ステートメントは、計算スクリプト内の後続のすべての MDX 式およびステートメントのスコープを定義します。その定義は、現在のスコープが終了または再設定されるまで有効です。その後、MDX 式を現在のスコープに適用するために THIS ステートメントを使用します。デバッグを容易にするために、BACK_COLOR ステートメントを使用して現在のスコープのセルに対して背景セル色を指定することができます。

このトピックの作業では、2005 会計年度における会計四半期ごとの販売ノルマを定義するために SCOPE および THIS ステートメントを使用します。その後、キューブ内のすべての会計年度を対象として販売ノルマを月レベルに割り当てます。さらに、計算スクリプトのデバッグに役立つブレークポイントの使用法についても学習します。

日付および従業員別の販売ノルマの割り当ての確認

販売ノルマの割り当てを日付別および従業員別に確認するには

  1. Analysis Services Tutorial キューブのキューブ デザイナを開いて、[ブラウザ] タブをクリックします。

  2. データ ペインからすべての階層とメジャーを削除して、フィルタ ペインからすべてのディメンション メンバを削除します。

  3. Sales Quotas メジャー グループの Sales Amount Quota メジャーを [データ] ペインのデータ領域に追加します。

  4. Date ディメンションの Fiscal Date ユーザー定義階層を列領域に追加します。

  5. Employee ディメンションの Employee Name 属性階層を行領域に追加します。

    2005 会計年度の販売量の値は定義されていません。

  6. 列領域で、[Fiscal Year] の横にある矢印ボタンをクリックし、[FY 2002][FY 2003] の横のチェック ボックスをそれぞれオフにして、[OK] をクリックします。

  7. 列領域で、[FY2004][H2 FY 2004][Q4 FY 2004] の順に展開します。

    会計四半期内のそれぞれの会計月の販売ノルマが、会計四半期の販売ノルマと等しいことに注目してください。これは、レッスン 5 で説明したように、Sales Quota メジャー グループの時間ディメンションの粒度が四半期レベルであるためです。

    次の図は、2004 会計年度第 4 四半期の 3 か月間について、各従業員に割り当てられている販売ノルマを示しています。

    会計月ごとの販売ノルマ

2005 会計年度の販売ノルマ計算のスコープの定義

この作業では、現在のスコープを確認し、スコープを変更します。その後、2004 会計年度の値に基づいて、2005 会計年度の販売ノルマの値を決定する計算を定義します。

2005 会計年度の販売ノルマ計算のスコープを定義するには

  1. [計算] タブをクリックして、ツール バーの [フォーム ビュー] をクリックします。

  2. [スクリプト オーガナイザ] ペインで [Large Resellers] をクリックし、[計算] タブのツール バーの [新しいスクリプト コマンド] ボタンをクリックします。

    計算式ペインに空のスクリプトが表示され、[スクリプト オーガナイザ] ペインにこのスクリプト コマンドがタイトルなしで表示されます。

  3. 計算式ペインに、以下のステートメントを入力します。

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

    この SCOPE ステートメントは、キューブ内のすべての属性に関して、キューブ スコープを All メンバ (既定) に変更します。

  4. [計算] タブのツール バーで [新しいスクリプト コマンド] をクリックし、以下のステートメントを計算式ペインに入力します。

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

    最後のかっこの下に赤い波線が表示されます。これは、SCOPE ステートメントのかっこ内にメンバ セットを定義する必要があることを示します。次に、Sales Amount Quota メジャーをスコープに含めるために、このメジャーを SCOPE ステートメントに追加します。

  5. [計算ツール] ペインの [メタデータ] タブで、[Measures][Sales Quotas] の順に展開します。次に、[Sales Amount Quota] メジャーを、[計算式] ペイン内の SCOPE ステートメントのかっこ内にドラッグします。

    赤い波線が消えます。次に、FY 2005 ディメンション メンバを現在のスコープに追加するために、この時間ディメンションを SCOPE ステートメントに追加します。

  6. [計算ツール] ペインの [メタデータ] タブで、[Date] ディメンション、[Fiscal][Fiscal Date][Fiscal Year] の順に展開します。次に、[FY 2005] メンバを、[計算式] ペインの SCOPE ステートメント内にドラッグします。ドラッグ先は、定義対象のセットの [Sales Amount Quota] メンバの直後です。

    このセットに新しく追加したメンバの [Date] の部分の下に、赤い波線が表示されます。この波線は、このディメンション メンバの直前に構文エラーが存在することを示しています。ここでは、SCOPE ステートメント内のセットの各メンバ間にコンマが必要です。

  7. Date ディメンションの FY 2005 メンバの [Date] の部分の前に、必要なコンマを追加します。

    元の赤い波線が消えます。次に、Employee ディメンション内の Employees ユーザー定義階層のメンバを現在のスコープに追加するために、これらのメンバを SCOPE ステートメントに追加します。

  8. [計算ツール] ペインの [メタデータ] タブで、[Employee] ディメンションを展開します。次に、[Employees] ユーザー定義階層を、[計算式] ペインの SCOPE ステートメント内にドラッグします。ドラッグ先は、定義対象のセットの [Date].[Fiscal Date].[Fiscal Year].&[2005] メンバの直後です。

    このセットに新しく追加したメンバの [Employee] の部分の下に赤い波線が表示されます。これは、SCOPE ステートメント内のセットの各メンバ間にコンマが必要であることを示しています。

  9. 新しいメンバの [Employee] の部分の前にコンマを追加します。

    赤い波線が消えました。

  10. SCOPE ステートメント内のこのセットの [Employee].[Employees] メンバの末尾に次の句を追加すれば、セットの 3 番目のメンバの定義が完了します。

    .Members
    

    この句は、Employee ディメンション内の Employees 階層のすべてのメンバを現在のキューブ スコープに含めることを指定します。

  11. 完成した SCOPE ステートメントが次のようになっていることを確認してください。

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

    これで、2005 会計年度の販売ノルマを計算する MDX 式の対象となるサブキューブを定義するスコープ定義が完了しました。

  12. [計算] タブのツール バーで [スクリプト ビュー] をクリックして、新しく追加されたスクリプト コマンドの内容を確認します。

    それぞれのスクリプト コマンドは計算式ペインに入力したとおりに表示されますが、各スクリプト コマンドの末尾にセミコロンが追加されていることに注目してください。また、各スクリプト コマンドの前にはコメントが自動で挿入されています。これは、それぞれのコマンドを理解するうえで役立ちます。

2005 会計年度の新しい販売ノルマ計算の定義とテスト

この作業では、Employee ディメンションのすべてのメンバの 2005 会計年度における販売ノルマを計算する計算スクリプトに、新しいスクリプト コマンドを追加します。ただし、スクリプト コマンドをフォーム ビューで追加するのではなく、スクリプト ビューで直接追加します。スクリプト ビューでは、各スクリプト コマンドの間に必ず手動でセミコロンを追加する必要があります。

2005 会計年度の新しい販売ノルマ計算を定義してテストするには

  1. スクリプト ビューで、計算スクリプトの末尾の新しい行に以下のステートメントを入力します。

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

    THIS ステートメントは、サブキューブの Employee メンバと FY 2005 メンバの交差部分で、Sales Amount Quota メジャーに新しい値を割り当てます。新しい値は、Employee メンバと、Fiscal Year 2004 の Sales Amount Quota メジャーとの交差部分にある値に基づき、それを 1.25 倍したものです。

  2. [計算式] ペインで、THIS ステートメントの左余白をクリックしてブレークポイントを設定します。

    余白に赤いドットが表示され、ステートメントが赤く強調表示されます。このプロジェクトをデバッグ モードで実行すると、プロジェクトの変更内容が Analysis Services インスタンスに配置され、キューブが処理されて、ブレークポイントに到達するまで計算スクリプトが実行されます。その後は、残りのスクリプトを 1 つずつ段階的に実行できます。ブレークポイントを設定せずにプロジェクトをデバッグ モードで実行した場合、最初のスクリプト ステートメントである CALCULATE ステートメントで計算スクリプトが中断します。

  3. [デバッグ] メニューの [デバッグ開始] をクリックします。または、キーボードの F5 キーを押します。

    プロジェクトが配置および処理され、ブレークポイントに到達するまで計算スクリプトが実行されます。

  4. すべてのドッキング ウィンドウを非表示にし、[計算] タブの下部に表示される [Pivot Table] ペインを表示する領域を増やします。

    [Pivot Table] ペインはデバッグに役立ちます。

  5. [Pivot Table] ペインで、Sales Amount Quota メジャーをデータ領域に、Fiscal Date ユーザー定義階層を列領域に、Employee ディメンションの Employee Name 属性階層を行領域にそれぞれ追加します。ピボット テーブルの最下部までスクロールして、販売ノルマが割り当てられている従業員を確認します。

    従業員ごとの Sales Amount Quota メジャーの Fiscal Year レベルの FY 2005 メンバには、Sales Amount Quota メジャーに対応する値がないので、値がデータ領域に表示されません。既定では、デバッグ モードでは空のセルが [Pivot Table] ペインに表示されます。

  6. F10 キーを押します。THIS ステートメントが実行され、2005 会計年度の販売ノルマが計算されます。

    この時点で、[Pivot Table] ペインでは、Sales Amount Quota メジャー、FY 2005 ディメンション メンバ、Employee Name メンバの交差部分におけるセルが計算されています。また、THIS ステートメントによって処理されたセルは黄色で強調表示されます。ツール バー アイコンを使用すると、変更されたセルの強調表示を有効または無効にできます。既定値では、変更されたセルは強調表示されます。

  7. [Pivot Table] ペインで、チェック ボックスをオフにして、FY 2002FY 2003、および FY 2004 を列領域から削除します。

  8. データ領域の任意の場所を右クリックして [空のセルを表示] をクリックすると、このオプションの横のチェック マークがオフになり、空のセルがすべて非表示になります (このオプションは、[計算] タブのツール バーでも利用できます)。こうすれば、販売ノルマの値を割り当てられている従業員だけが表示され、見やすくなります。

  9. [Pivot Table] ペインで、列領域の FY 2005 を展開してみてください。

    FY 2005 は展開できません。これは、Sales Amount Quota メジャーと Employee Name 属性階層の交差部分における H1 FY 2005 メンバの値が計算されないためです (これらは現在のスコープに含まれません)。

  10. H1 FY 2005 メンバの値が空のセルを表示するには、[Pivot Table] ペインの任意の領域をクリックして [計算] タブのツール バーの [空のセルを表示] をクリックします。すると、空のセルがすべて表示されます。

  11. [デバッグ] メニューの [デバッグの停止] をクリックするか、キーボードの Shift キーを押しながら F5 キーを押します。

  12. 左余白の赤いドットをクリックして、計算スクリプト内のブレークポイントを削除します。

販売ノルマの 2005 会計年度の半期および四半期への割り当て

この作業では、Fiscal Year 2005 メンバの代わりに 2005 会計年度の半期メンバを含めるようスコープを変更した後、2005 会計年度の販売ノルマの値の半分を 2005 会計年度の各半期に割り当てます。さらに、Fiscal Year 2005 メンバの代わりに 2005 会計年度の四半期メンバを含めるようスコープを変更した後、2005 会計年度の販売ノルマの値の 1/4 を 2005 会計年度の各四半期に割り当てます。作業を完了するためには、これらの割り当てをテストします。

2005 会計年度の半期および四半期に販売額ノルマを割り当てるには

  1. [計算式] ペインのスクリプト ビューで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。

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

    この SCOPE ステートメントは入れ子になった SCOPE ステートメントです。直前の SCOPE ステートメントとこの SCOPE ステートメントの間に END SCOPE ステートメントが存在しないためです。入れ子にされた SCOPE ステートメントは、その SCOPE ステートメント内でスコープが再設定されない属性に関して、親のスコープを継承します。前の SCOPE ステートメントは Sales Amount Quota メジャー、Employees ユーザー定義階層、Fiscal Date ユーザー定義階層を直接変更しません。その代わり、Members 関数を使用して、Fiscal Semester 属性階層の各メンバをサブキューブ定義に追加します。詳細については、「Members (セット) (MDX)」を参照してください。入れ子にされた SCOPE ステートメントの結果として、2005 会計年度のいずれの半期でも、Employee メンバと Sales Amount Quota メジャーの交差部分のすべてのメンバがキューブ空間に含まれるようになります。現在のところ、キューブ内の Fiscal Year 2005 には半期が 1 つしかないことに注意してください。

  2. 計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。

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

    このステートメントは、定義されたキューブ空間内のそれぞれの会計半期に、計算された四半期の値を割り当てます。この 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 ステートメントです。直前の SCOPE ステートメントとこの SCOPE ステートメントの間に END SCOPE ステートメントが存在しないためです。前の SCOPE ステートメントは Sales Amount Quota メジャー、Employees ユーザー定義階層、Fiscal Date ユーザー定義階層を直接変更しません。その代わり、Members 関数を使用して、Fiscal Quarter 属性階層の各メンバをサブキューブ定義に追加します。その結果、2005 会計年度のいずれの四半期でも、Employee メンバと Sales Amount Quota メジャーの交差部分のすべてのメンバがキューブ空間に含まれるようになります。現在のところ、キューブ内の Fiscal Year 2005 には四半期が 1 つしかないことに注意してください。

  4. 計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。

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

    このステートメントは、定義されたキューブ空間内のそれぞれの会計四半期に、計算された四半期の値を割り当てます。この CurrentMember.Parent 関数は、親の値の 1/2 を各メンバに割り当てるために使用されています。

  5. 計算式ペインで、最後の SCOPE ステートメントの横にある余白をクリックしてブレークポイントを設定した後、キーボードの F5 キーを押します。

    ブレークポイントに到達するまで、計算スクリプトが実行されます。

  6. Pivot Table ペインのデータ領域の任意の場所をクリックし、[計算] タブのツール バーの [空のセルを表示] をクリックして空のセルを非表示にします。

    以下の図のように、デバッガ内の最後のパスで使用されたのと同じメジャーおよび階層が [データ] ペインに入り、H1 FY 2005 メンバの値が計算されます。値は親の値の半分になります。

    最後に、各 FY 2005 メンバの値が、そのメンバの集計 (この場合は会計年度の第 1 半期) に基づいて再計算されます。各スクリプトは別個のパスとして実行されるため、Fiscal Year 2005 メンバの値は Fiscal Semester 2005 メンバの計算によって影響を受けます。計算スクリプト内の後続のステートメントの影響を受けないように既存の値を固定するには、FREEZE ステートメントを使用します。詳細については、「FREEZE ステートメント (MDX)」を参照してください。

    FREEZE を使用して固定された既存の値

  7. 列領域で [H1 FY 2005] を展開します。

    Q1 FY 2005 メンバの値はまだ計算されていません。

  8. [Pivot Table] ペインのデータ領域の任意の場所をクリックし、[計算] タブのツール バーの [空のセルを表示] をクリックします。

  9. 列領域で [Q1 FY 2005] を展開します。

    2005 会計年度の第 1 四半期の 2 か月には値が割り当てられません。これらのメンバはスクリプトの最後の 2 つのステートメントが実行されるまで、現在のサブキューブのスコープ外にあるためです。Analysis Services Tutorial キューブ内の時間ディメンションには 2005 会計年度の最初の 2 か月しか含まれていません。したがって、Q2 FY 2005 メンバは存在しません。

  10. F10 キーを押して SCOPE ステートメントを実行します。次に F10 キーを再び押します。計算スクリプトの最後のステートメントが実行され、現在のサブキューブに計算が適用されます。

    次の図のように、Q1 FY 2005 メンバの値が計算され、H1 FY 2005 の値と FY2005 メンバの値が子メンバの集計として再計算されます。ただし、2005 会計年度のそれぞれの会計月 (2005 年 7 月と 8 月) の値は計算されません。次の手順で、各四半期に適切な値を割り当てます。

    Q1 FY 2005 メンバの計算値

  11. [デバッグ] メニューの [デバッグの停止] をクリックするか、キーボードの Shift キーを押しながら F5 キーを押します。

  12. 計算スクリプト内のブレークポイントを削除します。

各月への販売ノルマの割り当て

ここでは、すべての会計年度の会計月レベルを含めるようスコープを変更します (前のスコープ ステートメントでは、計算が 2005 会計年度だけに限定されていました)。その後、従業員ごとの販売ノルマに関する会計四半期の値の 1/3 をそれぞれの会計月に割り当てます。

販売ノルマを各月に割り当てるには

  1. 計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを追加します。

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

    この SCOPE ステートメントもまた、入れ子になっています。このスコープ ステートメントは、それぞれの会計四半期の値に基づいて販売ノルマをそれぞれの会計月に割り当てるために、MDX 式の対象となるキューブ空間を変更します。この SCOPE ステートメントは、前にある入れ子になった SCOPE ステートメントと似ていますが、この場合は Fiscal Date ユーザー定義階層自体のスコープが再設定されることに注目してください。したがって、2005 会計年度の会計月メンバだけでなく、Date ディメンションのすべての会計月メンバがキューブ空間のメンバに含まれるようになります。

    注意注意

    キューブ スコープのこの変更内容を、前の手順でのキューブ スコープの変更と比べて、2 つのスコープ変更ステートメントの違いを確認してください。

  2. 計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを追加します。

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

    このステートメントは、親 (四半期レベル) の値の 1/3 を、会計日階層の各月メンバに割り当てます。この計算は、キューブ内のすべての会計月に適用されます。

  3. 計算式ペインで、最後の THIS ステートメントの左側にある余白をクリックしてブレークポイントを設定した後、キーボードの F5 キーを押します。

  4. 2004 年 7 月と 2004 年 8 月の値を確認します。

    現時点では、2004 年 7 月と 2004 年 8 月の値はどちらも計算されていません。

  5. データ ペイン内を右クリックして [空のセルを表示] をクリックすると、値を持つセルだけが表示されます。

    これによって、計算スクリプトで最後のステートメントがどのように適用されるかを簡単に確認できます。

  6. F10 キーを押して最後のステートメントを実行します。

    各会計月における各従業員の販売ノルマの値は、親の値の 1/3 に相当します。

  7. 列領域で、[FY 2005] を削除して [Q4 FY 2004] を追加します。

  8. FY 2004、H2 FY 2004、Q4 FY 2004 の順に展開します。

    それぞれの会計月の値は会計四半期の合計値に等しくなります。

  9. [デバッグ] メニューの [デバッグの停止] をクリックします。

  10. 計算スクリプト内のブレークポイントを削除します。

  11. ツール バーの [すべてを保存] をクリックします。