次の方法で共有


多対多関係の定義

通常、ディメンションを定義する場合、1 つのディメンション メンバは多数のファクトに結合できますが、各ファクトを結合できるのは 1 つのディメンションのみです。たとえば、各顧客は多数の商品を注文できますが、それぞれの注文は 1 人の顧客に所属します。リレーショナル データベース用語では、これを 一対多のリレーションシップと呼びます。しかし、1 つのファクトが複数のディメンション メンバに結合する場合があります。リレーショナル データベース用語では、これを多対多のリレーションシップと呼びます。たとえば、1 回の購入には複数の購入動機があることが考えられ、また、1 つの購入動機が複数の購入に結び付く (関連付けられる) ことがあります。結合テーブルは、各購入に関連する購入動機の定義に使用されます。このようなリレーションシップから作成された Sales Reason ディメンションには、1 回の販売取り引きに関連付けられるメンバが複数存在します。多対多のディメンションは、従来のスター スキーマ以上にディメンション モデルを展開し、ディメンションが直接ファクト テーブルに関連付けられていなくても複雑な分析を可能にします。

Microsoft SQL Server 2005 Analysis Services (SSAS) では、ディメンションとメジャー グループの間に多対多のリレーションシップを定義します。この定義は、ディメンション テーブルに関連付けられる中間ファクト テーブルを指定することにより行われます。その後、中間ファクト テーブルは、ファクト テーブルを関連付ける中間ディメンション テーブルに関連付けられます。中間ファクトとリレーションシップ内のディメンション テーブル、および中間ファクトと中間ディメンション間の多対多のリレーションシップにより、そのリレーションシップに指定されている主ディメンションのメンバおよびメジャー グループ内のグループとの間に多対多のリレーションシップが作成されます。中間メジャー グループを通じてディメンションとメジャー グループ間の多対多のリレーションシップを定義するには、中間メジャー グループは 1 つ以上のディメンションを元のメジャー グループと共有する必要があります。

多対多のディメンションでは値は個別に集計され、すべてのメンバに対して 2 回以上集計されることはありません。

ms170463.note(ja-jp,SQL.90).gifメモ :
多対多のディメンション リレーションシップに対応させるには、関連するすべてのテーブルを結合する主キーと外部キーを、データ ソース ビューに定義します。このようにしないと、キューブ デザイナの [ディメンションの使用法] タブでリレーションシップを確立するときに正しいメジャー グループを選択できません。

詳細については、「ディメンション リレーションシップ」および「多対多リレーションシップと多対多リレーションシップのプロパティの定義」を参照してください。

このトピックの実習では、まず、Sales Reasons ディメンションと Sales Reasons メジャー グループを作成します。次に、Sales Reasons メジャー グループを介して、Sales Reasons ディメンションと Internet Sales メジャー グループの間に多対多のリレーションシップを定義します。

データ ソース ビューへの必要なテーブルの追加

必要なテーブルをデータ ソース ビューに追加するには

  1. Adventure Works DW データ ソース ビューのデータ ソース ビュー デザイナを開きます。

  2. [ダイアグラム オーガナイザ] ペイン内を右クリックし、[新しいダイアグラム] をクリックします。新しいダイアグラムの名前として、「Internet Sales Order Reasons」と入力します。詳細については、「データ ソース ビューでのダイアグラムの操作 (Analysis Services)」を参照してください。

    テーブルのない新しいダイアグラムが作成され、[ダイアグラム] ペインに表示されます。

  3. [テーブル] ペインの [InternetSales (dbo.FactInternetSales)] テーブルを、[ダイアグラム] ペインにドラッグします。

  4. ダイアグラム ペイン内を右クリックし、[テーブルの追加と削除] をクリックします。

  5. [テーブルの追加と削除] ダイアログ ボックスで、[含まれているオブジェクト] ボックスの一覧に DimSalesReason テーブルと FactInternetSalesReason テーブルを追加し、[OK] をクリックします。

    関連するテーブル間に、主キーと外部キーのリレーションシップが自動的に確立されます。これらのリレーションシップは、基になるリレーショナル データベースに定義されているためです。これらのリレーションシップが基のリレーショナル データベースに定義されていない場合は、データ ソース ビューで定義する必要があります。

  6. [書式] メニューの [自動レイアウト] をポイントし、[ダイアグラム] をクリックします。

  7. [プロパティ] ウィンドウで、DimSalesReason テーブルの FriendlyName プロパティを SalesReason に変更します。次に、InternetSalesReason テーブルの FriendlyName プロパティを SalesReason に変更します。

  8. [テーブル] ペインで [InternetSalesReason (dbo.FactInternetSalesReason)] を展開し、[SalesOrderNumber] をクリックします。次に、[プロパティ] ウィンドウで、このデータ列の DataType プロパティを確認します。

    [SalesOrderNumber] 列のデータ型は文字列になっています。

  9. FactInternetSalesReason テーブルのその他の列のデータ型を確認します。

    このテーブルでは、他の 2 つの列のデータ型が数値型になっています。

  10. [テーブル] ペインで [InternetSalesReason (dbo.FactInternetSalesReason)] を右クリックし、[データの探索] をクリックします。

    次の図のように、各並び順の行番号では、その行の商品の購入動機がキー値により識別されます。

    商品の購入動機を識別するためのキー値

中間メジャー グループの定義

中間メジャー グループを定義するには

  1. Analysis Services Tutorial キューブのキューブ デザイナに切り替え、[キューブ構造] タブをクリックします。

  2. [メジャー] ペイン内を右クリックし、[新しいメジャー グループ] をクリックします。詳細については、「メジャー グループの定義と構成」を参照してください。

  3. [新しいメジャー グループ] ダイアログ ボックスで、[データ ソース ビューからテーブルを選択] ボックスの一覧から [InternetSalesReason] を選択し、[OK] をクリックします。

    Internet Sales Reason メジャー グループが [メジャー] ペインに表示されます。

  4. Internet Sales Reason メジャー グループを展開します。

    この新しいメジャー グループには、メジャー (Internet Sales Reason Count メジャー) が 1 つだけ定義されています。

  5. [Internet Sales Reason Count] を選択し、[プロパティ] ウィンドウでこのメジャーのプロパティを確認します。

    このメジャーの AggregateFunction プロパティは、Sum ではなく、Sum として定義されていることがわかります。このプロパティが Count になっているのは、基のデータ型が文字列型であったためです。基のファクト テーブルの他の 2 つの列は、メジャーとしては選択されていません。これらは実際のメジャーではなく、数値キーであることを Analysis Services が検出したためです。詳細については、「準加法の動作の定義」を参照してください。

  6. [プロパティ] ウィンドウで、Internet Sales Reason Count メジャーの Visible プロパティを False に変更します。

    このメジャーは、Internet Sales ディメンションの隣に定義する Sales Reason ディメンションを結合するためにのみ使用されます。ユーザーがこのメジャーを直接表示することはありません。

    次の図は、Internet Sales Reason Count メジャーのプロパティを示しています。

    Internet Sales Reason Count メジャーのプロパティ

多対多ディメンションの定義

多対多ディメンションを定義するには

  1. Analysis Services Tutorial キューブのキューブ デザイナで [キューブ構造] タブをクリックします。次に、[ディメンション] ペイン内を右クリックし、[キューブ ディメンションの追加] をクリックします。

  2. [キューブ ディメンションの追加] ダイアログ ボックスで、[新しいディメンション] をクリックします。

    ディメンション ウィザードが開きます。

  3. [ディメンション ウィザードへようこそ] ページで [次へ] をクリックします。

  4. [データ ソース ビューの選択] ページが表示されます。Adventure Works DW データ ソース ビューのディメンションのデータを使用するので、既定値のままで [次へ] をクリックします。

  5. [ディメンションの種類の選択] ページが表示されます。新しいディメンションを標準ディメンションとして作成するので、既定値のままで [次へ] をクリックします。

  6. [メイン ディメンション テーブルの選択] ページで、[メイン テーブル] ボックスの一覧から [dbo.DimSalesReason] を選択します。[メンバ名を含んでいる列 (省略可能)] ボックスの一覧から [SalesReasonName] を選択します。[次へ] をクリックします。

  7. [ディメンション属性の選択] ページで、Sales Reason Alternate Key 属性のチェック ボックスをオフにします。次に、Sales Reason Reason Type 属性の名前を Sales Reason Type に変更し、[完了] をクリックします。

  8. [ウィザードの完了] ページで [完了] をクリックすると、Sales Reason ディメンションが作成されます。さらに [OK] をクリックすると、新しく作成したデータベース ディメンションが Analysis Services Tutorial キューブにキューブ ディメンションとして追加されます。

  9. Sales Reason ディメンションのディメンション デザイナを開きます。

  10. [階層とレベル] ペインで、Sales Reasons という名前の階層を作成します。この階層の下に Sales Reason Type レベルを配置し、さらにその下に Sales Reason レベルを配置します。

  11. [プロパティ] ウィンドウで、Sales Reasons 階層の AllMemberName プロパティをクリックし、「All Sales Reasons」と入力します。

  12. Sales Reason ディメンションの AttributeAllMemberName プロパティのセルをクリックし、値として「All Sales Reasons」と入力します。

多対多リレーションシップの定義

多対多リレーションシップを定義するには

  1. Analysis Services Tutorial キューブのキューブ デザイナに切り替え、[ディメンションの使用法] タブをクリックします。

    Sales Reason ディメンションには、Internet Sales Reason メジャー グループで定義されている標準のリレーションシップがあります。しかし、Internet Sales メジャー グループおよび Reseller Sales メジャー グループで定義されたリレーションシップはありません。また、Internet Sales Order Details ディメンションには Internet Sales Reason ディメンションで定義されている標準のリレーションシップがあり、Internet Sales メジャー グループとのファクト リレーションシップがあります。このディメンションが存在しなかった場合 (または Internet Sales Reason メジャー グループおよび Internet Sales メジャー グループとのリレーションシップを持つ別のディメンションが存在しなかった場合)、多対多のリレーションシップを定義することはできません。

  2. Internet Sales メジャー グループと Sales Reason ディメンションが交差するセルで、参照ボタン ([...]) をクリックします。

  3. [リレーションシップの定義] ダイアログ ボックスで、[リレーションシップの種類の選択] ボックスの一覧から [多対多] を選択します。

    Sales Reason ディメンションを Internet Sales メジャー グループに接続する中間メジャー グループを定義する必要があります。

  4. [中間メジャー グループ] ボックスの一覧で [Internet Sales Reason] を選択します。

    次の図は、[リレーションシップの定義] ダイアログ ボックスでの操作を示しています。

    [リレーションシップの定義] ダイアログ ボックス

  5. [OK] をクリックします。

    次の図のように、多対多アイコンにより、Sales Reason ディメンションと Internet Sales メジャー グループの間のリレーションシップが表されます。

    ディメンションとメジャー グループの間のリレーションシップ

キューブおよび多対多ディメンションの表示

キューブおよび多対多ディメンションの表示

  1. [ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。

  2. 配置が正常に完了したら、Analysis Services Tutorial キューブのキューブ デザイナで [ブラウザ] タブに切り替え、[再接続] をクリックします。

  3. [データ] ペインの行領域から Internet Sales Orders ユーザー階層の各レベルを削除し、Sales Reason ディメンションの Sales Reason ユーザー階層に置き換えます。

  4. Internet Sales-Sales Amount メジャーが、[データ] ペインのデータ領域にまだ表示されていること、および Customer ディメンションの Adam Powell メンバが [フィルタ] ペインに表示されていることを確認します。表示されない場合は、Internet Sales-Sales Amount メジャーをデータ領域に追加し、Customer Geography ユーザー定義階層の Adam Powell メンバをサブキューブ領域 (Australia-Queensland-Brisbane-4000) に追加します。

  5. デザイン領域中央の一番上にある [フィルタ] ペインで、[フィルタ式] の値を [Queensland] に変更します。[フィルタ式] の一覧の [Adam Powell] チェック ボックスをオフにし、[Queensland] チェック ボックスをオンにします。

  6. Sales Reason Type レベルの各メンバを展開し、クイーンズランドの顧客がインターネット経由で Adventure Works 製品を購入した理由と、その売上金額を確認します。

    購入理由に関連付けられている売上金額をすべて加算すると、総売上額を上回ります。これは、製品の購入理由を複数選択した顧客がいたためです。

    次の図は、キューブ デザイナの [フィルタ] ペインと [データ] ペインです。

    キューブ デザイナの [フィルタ] ペインと [データ] ペイン

このレッスンの次の作業

メジャー グループでのディメンション粒度の定義

参照

その他の技術情報

ディメンション リレーションシップ
多対多リレーションシップと多対多リレーションシップのプロパティの定義

ヘルプおよび情報

SQL Server 2005 の参考資料の入手