スクリプト コマンドによるスコープが指定された割り当ての定義
このレッスンの前の 2 つの作業では、計算されるメンバおよび名前付きセットの計算をキューブの計算スクリプトに追加する方法について学習しました。これら 2 種類の多次元式 (MDX) 計算に加えて、新しいスクリプト コマンドを使用すれば、MDX がサポートするキューブ内でほとんどの操作を実行できます。
Microsoft SQL Server 2005 Analysis Services (SSAS) では、MDX スクリプト実行時の特定の時点で、キューブ全体またはキューブの特定のセクションにスクリプトを適用することができます。既定のスコープに基づいて集計データをキューブ内のセルに入れる既定のスクリプト コマンド、つまり CALCULATE ステートメントについては、既に学習したとおりです。
既定のスコープはキューブ全体ですが、前のトピックで説明したように、SCOPE ステートメントを使用してサブキューブという限定されたスコープを定義し、その特定のキューブ空間だけに MDX スクリプトを適用することができます。SCOPE ステートメントは、計算スクリプト内の後続のすべての MDX 式およびステートメントのスコープを定義します。その定義は、現在のスコープが終了または再設定されるまで有効です。その後、MDX 式を現在のスコープに適用するために THIS ステートメントを使用します。デバッグを容易にするために、BACK_COLOR ステートメントを使用して現在のスコープのセルに対して背景セル色を指定することができます。
このトピックの作業では、2005 会計年度における会計四半期ごとの販売ノルマを定義するために SCOPE および THIS ステートメントを使用します。その後、キューブ内のすべての会計年度を対象として販売ノルマを月レベルに割り当てます。さらに、計算スクリプトのデバッグに役立つブレークポイントの使用法についても学習します。
時間および従業員別の販売ノルマの割り当ての確認
時間および従業員別の販売ノルマの割り当てを確認するには
Analysis Services Tutorial キューブのキューブ デザイナを開いて、[ブラウザ] タブをクリックします。
データ ペインからすべての階層とメジャーを削除して、フィルタ ペインからすべてのディメンション メンバを削除します。
Sales Quotas メジャー グループの Sales Amount Quota メジャーを [データ] ペインのデータ領域に追加します。
Fiscal Time ユーザー定義階層を列に追加します。
Employee Name 属性階層を行領域に追加します。
2005 会計年度の販売量の値は定義されていません。
列領域で、[FY 2002] および [FY 2003] を削除します。
列領域で、[FY2004]、[H1 FY 2004]、[Q3 FY 2004] の順に展開します。
会計四半期内のそれぞれの会計月の販売ノルマが、会計四半期の販売ノルマと等しいことに注目してください。これは、レッスン 5 で説明したように、Sales Quota メジャー グループの時間ディメンションの粒度が四半期レベルであるためです。
次の図は、2004 会計年度第 4 四半期の 3 か月間について、各従業員に割り当てられている販売ノルマを示しています。
2005 会計年度の販売ノルマ計算のスコープの定義
この作業では、現在のスコープを確認し、スコープを変更します。その後、2004 会計年度の値に基づいて、2005 会計年度の販売ノルマの値を決定する計算を定義します。
2005 会計年度の販売ノルマ計算のスコープを定義するには
[計算] タブをクリックして、ツール バーの [フォーム ビュー] をクリックします。
[スクリプト オーガナイザ] ペインで [Large Resellers] をクリックし、[計算] タブのツール バーの [新しいスクリプト コマンド] をクリックします。
計算式ペインに空のスクリプトが表示され、[スクリプト オーガナイザ] ペインにこのスクリプト コマンドがタイトルなしで表示されます。
計算式ペインに、以下のステートメントを入力します。
/* Changing Scope to All or Default Member */ SCOPE (ROOT())
この SCOPE ステートメントは、キューブ内のすべての属性に関して、キューブ スコープを All メンバ (既定) に変更します。
[計算] タブのツール バーで [新しいスクリプト コマンド] をクリックし、以下のステートメントを 計算式ペインに入力します。
/* Defining the cube scope for the sales amount quotas for FY2005 */ SCOPE ()
最後のかっこの下に赤い波線が表示されます。これは、SCOPE ステートメントのかっこ内にメンバ セットを定義する必要があることを示します。まず Sales Amount Quota メジャーをスコープに含めるために、このメジャーを SCOPE ステートメントに追加します。
[計算ツール] ペインの [メタデータ] タブで、[Measures]、[Sales Quotas] の順に展開します。次に、[Sales Amount Quota] メジャーを、[計算式] ペイン内の SCOPE ステートメントのかっこ内にドラッグします。
赤い波線が消えます。次に、FY 2005 ディメンション メンバを現在のスコープに追加するために、この時間ディメンションを SCOPE ステートメントに追加します。
[計算ツール] ペインの [メタデータ] タブで、[Date]、[Fiscal]、[Fiscal Time]、[Fiscal Year] の順に展開します。次に、[FY 2005] メンバを、[計算式] ペインの SCOPE ステートメント内にドラッグします。ドラッグ先は、定義対象のセットの [Sales Amount Quota] メンバの直後です。
このセットに新しく追加したメンバの [Date] の部分の下に、赤い波線が表示されます。この波線は、このディメンション メンバの直前に構文エラーが存在することを示しています。ここでは、SCOPE ステートメント内のセットの各メンバ間にコンマが必要です。
Date ディメンションの FY 2005 メンバの [Date] の部分の前に、必要なコンマを追加します。
元の赤い波線が消えます。次に、Employee ディメンション内の Employees ユーザー定義階層のメンバを現在のスコープに追加するために、これらのメンバを SCOPE ステートメントに追加します。
[計算ツール] ペインの [メタデータ] タブで、[Employee] を展開します。次に、[Employees] ユーザー定義階層を、[計算式] ペインの SCOPE ステートメント内にドラッグします。ドラッグ先は、定義対象のセットの [Date].[Fiscal Time].[Fiscal Year].&[2005] メンバの直後です。
このセットに新しく追加したメンバの [Employee] の部分の下に赤い波線が表示されます。これは、SCOPE ステートメント内のセットの各メンバ間にコンマが必要であることを示しています。
新しいメンバの [Employee] の部分の前にコンマを追加します。
元の赤い波線が消えます。
SCOPE ステートメント内のこのセットの [Employee].[Employees] メンバの末尾に次の句を追加すれば、セットの 3 番目のメンバの定義が完了します。
.Members
この句は、Employee ディメンション内の Employees 階層のすべてのメンバを現在のキューブ スコープに含めることを指定します。
完成した SCOPE ステートメントが次のようになっていることを確認してください。
SCOPE ([Measures].[Sales Amount Quota],[Date].[Fiscal Time].[Fiscal Year].&[2005], [Employee].[Employees].Members)
これで、2005 会計年度の販売ノルマを計算する MDX 式の対象となるサブキューブを定義するスコープ定義が完了しました。
[計算] タブのツール バーで [スクリプト ビュー] をクリックして、新しく追加されたスクリプト コマンドの内容を確認します。
それぞれのスクリプト コマンドは計算式ペインに入力したとおりに表示されますが、各スクリプト コマンドの末尾にセミコロンが追加されていることに注目してください。また、次の図のように、各スクリプト コマンドの前にあるコメントは、それぞれのコマンドを理解するうえで役立ちます。
2005 会計年度の新しい販売ノルマ計算の定義とテスト
ここでは、Employee ディメンションのすべてのメンバの 2005 会計年度における販売ノルマを計算する計算スクリプトに、新しいスクリプト コマンドを追加します。ただし、スクリプト コマンドをフォーム ビューで追加するのではなく、スクリプト ビューで直接追加します。スクリプト ビューでは、各スクリプト コマンドの間に必ず手動でセミコロンを追加する必要があります。
2005 会計年度の新しい販売ノルマ計算を定義してテストするには
スクリプト ビューで、計算スクリプトの末尾の新しい行に以下のステートメントを入力します。
/* Applying a calculation to the subcube */ THIS = [Date].[Fiscal Time].[Fiscal Year].&[2004] * 1.25;
THIS ステートメントは、サブキューブの Employee メンバと FY 2005 メンバの交差部分で、Sales Amount Quota メジャーに新しい値を割り当てます。新しい値は、Employee メンバと、Fiscal Year 2004 の Sales Amount Quota メジャーとの交差部分にある値に基づき、それを 1.25 倍したものです。
[計算式] ペインで、THIS ステートメントの左余白をクリックしてブレークポイントを設定します。
次の図のように、余白に赤いドットが表示され、ステートメントが赤く強調表示されます。このプロジェクトをデバッグ モードで実行すると、プロジェクトの変更内容が Analysis Services インスタンスに配置され、キューブが処理されて、ブレークポイントに到達するまで計算スクリプトが実行されます。その後は、残りのスクリプトを 1 つずつ段階的に実行できます。ブレークポイントを設定せずにプロジェクトをデバッグ モードで実行した場合、最初の計算スクリプトである CALCULATE ステートメントで計算スクリプトが中断します。
[デバッグ] メニューの [デバッグ開始] をクリックします (またはキーボードの F5 キーを押します)。
プロジェクトが配置および処理され、ブレークポイントに到達するまで計算スクリプトが実行されます。
すべてのドッキング ウィンドウを非表示にし、[計算] タブの下部に表示される [Pivot Table] ペインを表示する領域を増やします。
次の図のように表示された [Pivot Table] ペインはデバッグに役立ちます。
[Pivot Table] ペインで、Sales Amount Quota メジャーをデータ領域に、Date.Fiscal Time ユーザー定義階層を列領域に、Employee ディメンションの Employee Name 属性階層を行領域にそれぞれ追加します。
次の図のように、従業員ごとの Sales Amount Quota メジャーの Fiscal Year レベルの FY 2005 メンバには、Sales Quota Amount メジャーに対応する値がないので、値がデータ領域に表示されません。既定では、デバッグ モードでは空のセルが [Pivot Table] ペインに表示されます。
F10 キーを押します。THIS ステートメントが実行され、2005 会計年度の販売ノルマが計算されます。
この時点で、[Pivot Table] ペインでは、Sales Amount Quota メジャー、FY 2005 ディメンション メンバ、Employee Name メンバの交差部分におけるセルが計算されています。また、THIS ステートメントによって処理されたセルは黄色で強調表示されます。ツール バー アイコンを使用すると、変更されたセルの強調表示を有効または無効にできます。既定値では、変更されたセルは強調表示されます。
[Pivot Table] ペインで、FY 2002、FY 2003、および FY 2004 を列領域から削除します。
データ領域の任意の場所を右クリックして [空のセルを表示] をクリックすると、このオプションの横のチェック マークがオフになり、空のセルがすべて非表示になります (このオプションは、[計算] タブのツール バーでも利用できます)。こうすれば、次の図のように、販売ノルマの値を割り当てられている従業員だけが表示され、見やすくなります。
[Pivot Table] ペインで、列領域の FY 2005 を展開してみてください。
FY 2005 は展開できません。これは、Sales Amount Quota メジャーと Employee Name 属性階層の交差部分における H1 FY 2005 メンバの値が計算されないためです (これらは現在のスコープに含まれません)。
H1 FY 2005 メンバの値が空のセルを表示するには、[Pivot Table] ペインの任意の領域をクリックして [計算] タブのツール バーの [空のセルを表示] をクリックします。すると、次の図のように空のセルがすべて表示されます。
[デバッグ] メニューの [デバッグの停止] をクリックします (またはキーボードの Shift + F5 キーを押します)。
左余白のブレークポイントをクリックして、計算スクリプト内のブレークポイントを削除します。
販売ノルマの 2005 会計年度の半期および四半期への割り当て
ここでは、Fiscal Year 2005 メンバの代わりに 2005 会計年度の半期メンバを含めるようスコープを変更した後、2005 会計年度の販売ノルマの値の半分を 2005 会計年度の各半期に割り当てます。さらに、Fiscal Year 2005 メンバの代わりに 2005 会計年度の四半期メンバを含めるようスコープを変更した後、2005 会計年度の販売ノルマの値の 1/4 を 2005 会計年度の各四半期に割り当てます。最後に、これらの割り当てをテストします。
2005 会計年度の半期および四半期に販売額ノルマを割り当てるには
[計算式] ペインのスクリプト ビューで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。
/* 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 Time ユーザー定義階層を直接変更しません。その代わり、Fiscal Semester 属性階層の各メンバをサブキューブ定義に追加します (Members 関数を使用します)。詳細については、「Members (セット) (MDX)」を参照してください。入れ子にされた SCOPE ステートメントの結果として、2005 会計年度のいずれの半期でも、Employee メンバと Sales Amount Quota メジャーの交差部分のすべてのメンバがキューブ空間に含まれるようになります (現在のところ、キューブ内の Fiscal Year 2005 には半期が 1 つしかありません)。
計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。
THIS = [Date].[Fiscal Time].CurrentMember.Parent / 2;
このステートメントは、定義されたキューブ空間内のそれぞれの会計半期に、計算された四半期の値を割り当てます。この CurrentMember.Parent 関数は、親の値の 1/4 を各メンバに割り当てるために使用されています。詳細については、「CurrentMember (MDX)」および「Parent (MDX)」を参照してください。
計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。
/* 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 Time ユーザー定義階層を直接変更しません。その代わり、Fiscal Quarter 属性階層の各メンバをサブキューブ定義に追加します (Members 関数を使用します)。その結果、2005 会計年度のいずれの四半期でも、Employee メンバと Sales Amount Quota メジャーの交差部分のすべてのメンバがキューブ空間に含まれるようになります (現在のところ、キューブ内の Fiscal Year 2005 には四半期が 1 つしかありません)。
計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを入力します。
THIS = [Date].[Fiscal Time].CurrentMember.Parent / 2;
このステートメントは、定義されたキューブ空間内のそれぞれの会計四半期に、計算された四半期の値を割り当てます。この CurrentMember.Parent 関数は、親の値の 1/2 を各メンバに割り当てるために使用されています。
計算式ペインで、最後の SCOPE ステートメントの横にある余白をクリックしてブレークポイントを設定した後、キーボードの F5 キーを押します。
ブレークポイントに到達するまで、計算スクリプトが実行されます。
Pivot Table ペインのデータ領域の任意の場所をクリックし、[計算] タブのツール バーの [空のセルを表示] をクリックして空のセルを非表示にします。
以下の図のように、デバッガ内の最後のパスで使用されたのと同じメジャーおよび階層が [データ] ペインに入り、H1 FY 2005 メンバの値が計算されます。値は親の値の半分になります。
最後に、各 FY 2005 メンバの値が、そのメンバの集計 (この場合は会計年度の第 1 半期) に基づいて再計算されます。各スクリプトは別個のパスとして実行されるため、Fiscal Year 2005 メンバの値は Fiscal Semester 2005 メンバの計算によって影響を受けます。計算スクリプト内の後続のステートメントの影響を受けないように既存の値を固定するには、FREEZE ステートメントを使用します。詳細については、「FREEZE ステートメント (MDX)」を参照してください。
列領域で [H1 FY 2005] を展開します。
Q1 FY 2005 メンバの値はまだ計算されていません。
[Pivot Table] ペインのデータ領域の任意の場所をクリックし、[計算] タブのツール バーの [空のセルを表示] をクリックします。
列領域で [Q1 FY 2005] を展開します。
2005 会計年度の第 1 四半期の 2 か月には値が割り当てられません。これらのメンバはスクリプトの最後の 2 つのステートメントが実行されるまで、現在のサブキューブのスコープ外にあるためです。Analysis Services Tutorial キューブ内の時間ディメンションには 2005 会計年度の最初の 2 か月しか含まれていません。したがって、Q2 FY 2005 メンバは存在しません。
F10 キーを押して SCOPE ステートメントを実行します。次に F10 キーを再び押します。計算スクリプトの最後のステートメントが実行され、現在のサブキューブに計算が適用されます。
次の図のように、Q1 FY 2005 メンバの値が計算され、H1 FY 2005 の値と FY2005 メンバの値が子メンバの集計として再計算されます。ただし、2005 会計年度のそれぞれの会計月 (2005 年 7 月と 8 月) の値は計算されません。次の手順で、各四半期に適切な値を割り当てます。
[デバッグ] メニューの [デバッグの停止] をクリックします (またはキーボードの Shift + F5 キーを押します)。
計算スクリプト内のブレークポイントを削除します。
各月への販売ノルマの割り当て
ここでは、すべての会計年度の会計月レベルを含めるようスコープを変更します (前のスコープ ステートメントでは、計算が 2005 会計年度だけに限定されていました)。その後、従業員ごとの販売ノルマに関する会計四半期の値の 1/3 をそれぞれの会計月に割り当てます。
販売ノルマを各月に割り当てるには
計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを追加します。
/* Allocate Quotas to Months */ SCOPE ( [Date].[Fiscal Time].[Fiscal Month].Members );
この SCOPE ステートメントもまた、入れ子になっています。このスコープ ステートメントは、それぞれの会計四半期の値に基づいて販売ノルマをそれぞれの会計月に割り当てるために、MDX 式の対象となるキューブ空間を変更します。この SCOPE ステートメントは、前にある入れ子になった SCOPE ステートメントと似ていますが、この場合は Fiscal Time ユーザー定義階層自体のスコープが再設定されることに注目してください。したがって、2005 会計年度の会計月メンバだけでなく、Date ディメンションのすべての会計月メンバがキューブ空間のメンバに含まれるようになります。
メモ : キューブ スコープのこの変更内容を、前の手順でのキューブ スコープの変更と比べて、2 つのスコープ変更ステートメントの違いを確認してください。 計算式ペインで、計算スクリプト末尾の新しい行に以下のステートメントを追加します。
THIS = [Date].[Fiscal Time].CurrentMember.Parent / 3;
このステートメントは、親 (四半期レベル) の値の 1/3 を会計期間階層の各月メンバに割り当てます。この計算は、キューブ内のすべての会計月に適用されます。
計算式ペインで、最後の THIS ステートメントの左側にある余白をクリックしてブレークポイントを設定した後、キーボードの F5 キーを押します。
2004 年 7 月と 2004 年 8 月の値を確認します。
現時点では、2004 年 7 月と 2004 年 8 月の値はどちらも計算されていません。
データ ペイン内を右クリックして [空のセルを表示] をクリックすると、値を持つセルだけが表示されます。
これによって、計算スクリプトで最後のステートメントがどのように適用されるかを簡単に確認できます。
F10 キーを押して最後のステートメントを実行します。
次の図のように、各会計月における各従業員の販売ノルマの値は、親の値の 1/3 に等しい値に計算されます。
列領域で、[FY 2005] を削除して [Q4 FY 2004] を追加します。
FY 2004、H2 FY 2004、Q4 FY 2004 の順に展開します。
次の図のように、それぞれの会計月の値は会計四半期の合計値に等しくなります。
[デバッグ] メニューの [デバッグの停止] をクリックします。
計算スクリプト内のブレークポイントを削除します。
ツール バーの [すべてを保存] をクリックします。
メモ : |
---|
レッスン 6 までの操作内容が反映されたプロジェクトを使用する場合は、サンプルの最新版をダウンロードしてインストールしてください。詳細については、「サンプルのインストール」の「サンプルの最新版の入手」を参照してください。 |
次のレッスン
参照
その他の技術情報
MDX スクリプトの作成および編集
SCOPE ステートメント (MDX)
FORE_COLOR および BACK_COLOR の内容 (MDX)
This (MDX)
FREEZE ステートメント (MDX)
CurrentMember (MDX)
Parent (MDX)
Members (セット) (MDX)