データ モデルのテーブル間のリレーションシップ

お使いのブラウザーではビデオがサポートされていません。 Microsoft Silverlight、Adobe Flash Player、Internet Explorer 9 のいずれかをインストールしてください。
ビデオ: Power View と PowerPivot のリレーションシップ

テーブル間にリレーションシップを作成することによって、よりパワフルなデータ分析を実現しましょう。リレーションシップは、各テーブル内から 1 つずつ取り出した列に基づいて行われる 2 つのテーブルのデータの間の接続です。リレーションシップの便利な点を示す例として、ここでは仕事での顧客からの注文のデータを追跡しているものとします。次のような構造を持つ単一のテーブルにすべてのデータを入れて追跡することも可能です。

CustomerID

Name

EMail

DiscountRate

OrderID

OrderDate

Product

Quantity

1

Ashton

chris.ashton@contoso.com

.05

256

2010-01-07

Compact Digital

11

1

Ashton

chris.ashton@contoso.com

.05

255

2010-01-03

SLR Camera

15

2

Jaworski

michal.jaworski@contoso.com

.10

254

2010-01-03

Budget Movie-Maker

27

この方法も使えますが、これでは同じデータを何度も保存することになってしまいます。たとえば、注文が発生するたびに顧客のメール アドレスも保存しなければなりません。ストレージは安価ですが、もしメール アドレスに変更が生じたとすると、その顧客のすべての行を更新しなければなりません。この問題に対する 1 つの解決策が、データを複数のテーブルに分割して、そのテーブル間のリレーションシップを定義することです。これは、SQL Server などのリレーショナル データベースで使われているアプローチです。たとえば、皆さんがインポートするデータベースでは、注文データが関連する 3 つのテーブルを使って次のように 表されていたりします。

Customers

[CustomerID]

Name

Email

1

Ashton

chris.ashton@contoso.com

2

Jaworski

michal.jaworski@contoso.com

CustomerDiscounts

[CustomerID]

DiscountRate

1

.05

2

.10

Orders

[CustomerID]

OrderID

OrderDate

Product

Quantity

1

256

2010-01-07

Compact Digital

11

1

255

2010-01-03

SLR Camera

15

2

254

2010-01-03

Budget Movie-Maker

27

リレーションシップは、明示的に作成したデータ モデル、または Excel で複数のテーブルを同時にインポートした場合に作成されるデータ モデルに存在します。モデルの作成や管理は、PowerPivot アドインを使って行うこともできます。詳しくは、「Excel でのデータ モデルの作成」をご覧ください。

PowerPivot アドインを使ってテーブルを同じデータベースからインポートした場合、PowerPivot ではテーブル間のリレーションシップを角かっこ ([ ]) で囲んで示した列に基づいて検出し、自動的に作成されるデータ モデルでこれらのリレーションシップを再現できます。詳しくは、この記事の「リレーションシップの自動検出と自動推定」をご覧ください。複数のソースからテーブルをインポートした場合、「2 つのテーブル間のリレーションシップの作成」の説明に従って、リレーションシップを手動で作成できます。

ページの先頭へ

この記事の内容

列およびキー

リレーションシップの種類

リレーションシップとパフォーマンス

テーブル間の複数のリレーションシップ

テーブルのリレーションシップの要件

テーブルのリレーションシップの制限事項

複合キーとルックアップ列

多対多リレーションシップ

自己結合とループ

Power Pivot でのリレーションシップの自動検出と自動推定

名前付きセットの自動検出

リレーションシップの推定

列およびキー

リレーションシップは、各テーブル内にある同じデータを含む列に基づいて作成されるものです。たとえば、Customers テーブルと Orders テーブルは、両方とも CustomerID の入った列を持っているため、リレーションシップで互いに関係付けることができます。この例では列名が同じですが、列名が同じことは必須条件ではありません。Orders テーブル内のすべての行に Customers テーブルにも保存されている ID が入ってさえいれば、片方が CustomerID で他方が CustomerNumber でもかまいません。

リレーショナル データベースには、さまざまな種類のキーが存在します。通常は、特殊な性質を持つ列だけがキーになります。各キーの目的を理解しておくと、ピボットテーブル、ピボットグラフ、または Power View レポートにデータを提供するための複数のテーブルを持つデータ モデルを管理する上で役立ちます。

最もよく使用するキーは次のとおりです。

  • 主キー: Customers テーブル内の CustomerID など、テーブル内の行を一意に識別します。

  • 代替キー (候補キー): 主キー以外の一意の列。たとえば、Employees テーブルには、従業員 ID と社会保障番号が入っていることもあるでしょう。これは、両方とも一意です。

  • 外部キー: Customers テーブルの CustomerID を参照する Orders テーブルの CustomerID のように、別のテーブル内にある一意の列を参照する列。

データ モデルでは、主キーや代替キーは関係列と呼ばれます。1 つのテーブルが主キーと代替キーの両方を持っている場合は、そのどちらか 1 つをテーブル リレーションシップの基として使用できます。 外部キーは、 ソース列または単に列と呼ばれます。 ここに示した例では、Orders テーブルの CustomerID (列) と Customers テーブルの CustomerID (ルックアップ列) の間にリレーションシップが定義されます。Excel でリレーショナル データベースからデータをインポートすると、既定では、 1 つのテーブルの外部キーと別のテーブルの対応する主キーが選択されます。 とはいえ、一意の値を持つ列であれば、どの列でもルックアップ列に使用できます。

リレーションシップの種類

Customers と Orders の間のリレーションシップは、一対多リレーションシップです。どの顧客も複数の注文を持つことができますが、1 つの注文が複数の顧客を持つことはできません。リレーションシップの種類には、この他に一対一と多対多があります。各顧客に 1 つの割引率を定義する CustomerDiscounts テーブルは、Customers テーブルと一対一リレーションシップを持ちます。

次の表は、3 つのテーブル間のリレーションシップを示しています。

リレーションシップ

種類

ルックアップ列

Customers-CustomerDiscounts

一対一

Customers.CustomerID

CustomerDiscounts.CustomerID

Customers-Orders

一対多

Customers.CustomerID

Orders.CustomerID

注:  データ モデルでは、多対多リレーションシップはサポートされていません。多対多リレーションシップの例としては、製品と顧客の間の直接関係が挙げられます。一人の顧客が多数の製品を購入することも、同じ製品が多数の顧客に購入されることも、普通に発生します。

リレーションシップとパフォーマンス

リレーションシップが作成されると、 通常は、新しく作成されたリレーションシップに含まれるテーブルの列を使用する式がすべて Excel によって再計算されます。この処理には、データの量とリレーションシップの複雑さに応じて、ある程度の時間がかかります。詳しくは、「PowerPivot の数式の再計算」をご覧ください。

テーブル間の複数のリレーションシップ

データ モデルでは、2 つのテーブル間に複数のリレーションシップを持たせることができます。Excel による計算を正確にするために、1 つのテーブルから次のテーブルへのパスは単一である必要があります。このため、テーブルの各組み合わせ間で同時にアクティブになるリレーションシップは常に 1 つです。その他のリレーションシップは非アクティブになりますが、非アクティブなリレーションシップも数式やクエリの中では指定できます。ダイアグラム ビューでは、アクティブなリレーションシップは実線で表示され、非アクティブなリレーションシップは破線で表示されます。たとえば、AdventureWorksDW2012 では、DimDate テーブルに DateKey という 1 つの列が含まれており、それが FactInternetSales テーブル内の 3 つの列 OrderDate、DueDate、および ShipDate と関連を持ちます。DateKey と OrderDate の間のリレーションシップがアクティブである場合、数式では、それがリレーションシップを指定しなかった場合の既定のリレーションシップになります。

ページの先頭へ

テーブルのリレーションシップの要件

リレーションシップの作成時の要件を次に示します。

抽出条件

説明

テーブルごとに一意の識別子

各テーブルが、テーブル内の各行を一意に識別する列を 1 つ持っている必要があります。この列は、通常、主キーと呼ばれます。

一意の参照列

ルックアップ列のデータ値は固有であることが必要です。言い換えると、列内に重複データを含めることはできません。データ モデルでは、null 値と空の文字列は、個別のデータ値である空白と同等に扱われます。つまり、ルックアップ列に複数の null 値を指定することはできません。

互換性のあるデータ型

ソース列とルックアップ列のデータ型は互換性がとれている必要があります。データ型について詳しくは、「データ モデルのデータ型」をご覧ください。

テーブルのリレーションシップの制限事項

データ モデルでは、キーが複合キーの場合は、テーブル リレーションシップを作成することはできません。また、作成できるリレーションシップは一対一と一対多のリレーションシップに限られています。その他の種類のリレーションシップはサポートされていません。

複合キーとルックアップ列

複合キーは、複数の列で構成されます。データ モデルでは複合キーを使用できません。テーブルの各行を一意に識別する列は常に 1 つである必要があります。複合キーに基づく既存のリレーションシップを持つテーブルをインポートする場合、モデルにこのリレーションシップを作成できないため、PowerPivot のテーブルのインポート ウィザードではこのリレーションシップが無視されます。

主キーと外部キーを定義する複数の列がある 2 つのテーブル間にリレーションシップを作成するには、リレーションシップを作成する前に、それらの列の値を組み合わせて単一キー列を作成する必要があります。この操作は、データをインポートする前に行うことができます。また、PowerPivot アドインを使ってデータ モデルで計算列を作成することによっても行うことができます。

多対多リレーションシップ

データ モデルに多対多リレーションシップを持たせることはできません。モデルに交差テーブル を追加することすらできません。とはいえ、DAX 関数を使って多対多リレーションシップをモデル化することは可能です。

自己結合とループ

自己結合は、データ モデルでは許可されていません。自己結合とは、テーブルとそのテーブル自身との間の再帰的なリレーションシップです。自己結合は、親子階層構造を定義するのによく使われます。たとえば、 Employees テーブルをそのテーブル自体と結合して、ビジネスでのマネジメント チェーンを表す階層構造を作ったりできます。

Excel では、ブック内のリレーションシップ間のループの作成は 許されていません。つまり、次のような一連のリレーションシップは禁止されています。

  • テーブル 1 の列 a から テーブル 2 の列 f    

  • テーブル 2 の列 f から テーブル 3 の列 n    

  • テーブル 3 の列 n から テーブル 1 の列 a    

結果的にループが作成されるリレーションシップを作成しようとすると、エラーが生成されます。

ページの先頭へ

PowerPivot でのリレーションシップの自動検出と自動推定

データのインポートに PowerPivot アドインを使う利点の 1 つは、PowerPivot でリレーションシップが検出され、Excel で作成するデータ モデルに新しいリレーションシップを作成できることです。

複数のテーブルをインポートする場合、PowerPivot によってテーブル間の既存のリレーションシップが自動的にすべて検出されます。また、ピボットテーブルを作成すると、PowerPivot  によってテーブル内のデータが分析されます。これにより 、定義されていない潜在的なリレーションシップが検出され、そのリレーションシップに含める適切な列が提示されます。

検出アルゴリズムでは、列の値およびメタデータに関する統計データを使用して、リレーションシップの確率を推定します。

  • データ型は、関連するすべての列の間で互換性がなくてはなりません。自動検出でサポートされている型は、整数とテキスト データだけです。データ型について詳しくは、「データ モデルのデータ型」をご覧ください。

  • リレーションシップがうまく検出されるには、ルックアップ列内の一意のキーの数が、多側のテーブル内の値より多くなくてはなりません。つまり、リレーションシップの多側のキー列に、ルックアップ テーブルのキー列には含まれていない値が含まれていてはなりません。たとえば、製品をその ID でリストするテーブル (ルックアップ テーブル) と各製品の販売をリストする Sales テーブル (リレーションシップの多側) があったとします。どれかの販売レコードに、Products テーブル内に対応する ID が入っていない製品の ID が含まれていたとすると、このリレーションシップは自動的には作成されませんが、手動で作成することは可能です。Excel でこのリレーションシップが検出されるようにするには、まず Product ルックアップ テーブルを更新して、見つからない製品の ID を含めておく必要があります。

  • 多側のキー列の名前は、ルックアップ テーブル内のキー列の名前とよく似たものにしてください。名前が厳密に同じである必要はありません。たとえば、ビジネスの現場では、本質的には同じデータを含む列であっても、Emp ID、EmployeeID、Employee ID、EMP_ID などのように名前がばらついている場合が多々あります。検出アルゴリズムは、よく似た名前を検出して、よく似た名前やまったく同じ名前を持つ列に、より高い可能性を割り当てます。このため、インポートするデータの列の名前を既存のテーブル内の列とよく似たものに変更すれば、リレーションシップが自動的に作成される可能性を高めることができます。リレーションシップの候補が複数見つかった場合、Excel は、リレーションシップを作成しません。

この情報は、一部のリレーションシップが検出されない理由や、フィールド名、データ型などのメタデータを変更することでリレーションシップの自動検出結果がどのように改善されるかを理解するうえで役立ちます。詳しくは、「テーブルのリレーションシップのトラブルシューティング」をご覧ください。

名前付きセットの自動検出

ピボットテーブル内の名前付きセットと関連フィールドの間のリレーションシップは、自動的には検出されません。こういったリレーションシップは、手動で作成できます。自動リレーションシップ検出を使いたい場合は、各名前付きセットを削除し、名前付きセットに入っていた個々のフィールドをピボットテーブルに直接追加してください。

リレーションシップの推定

テーブル間のリレーションシップは、自動的に連鎖化される場合もあります。たとえば、次に示す最初の 2 セットのテーブルの間にリレーションシップを作成すると、他の 2 つのテーブルとの間にリレーションシップが存在すると推定され、自動的にリレーションシップが確立されます。

  • Products と Category: 手動で作成

  • Category と SubCategory: 手動で作成

  • Products と SubCategory: リレーションシップの推定

リレーションシップが自動的に連鎖化されるようにするには、上に示すように、一連のリレーションシップが一方向になっている必要があります。たとえば、最初のリレーションシップが Sales と Products の間、および Sales と Customers の間にあると、リレーションシップは推定されません。これは、Products と Customers の間のリレーションシップが多対多リレーションシップになるからです。

ページの先頭へ

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×