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

注:  最新のヘルプ コンテンツをできるだけ早く、お客様がお使いの言語で提供したいと考えております。 このページは、自動翻訳によって翻訳されているため、文章校正のエラーや不正確な情報が含まれている可能性があります。私たちの目的は、このコンテンツがお客様の役に立つようにすることです。お客様にとって役立つ情報であったかどうかを、このページの下部でお知らせください。 簡単に参照できるように、こちらに 英語の記事 があります。

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

ビデオ: Power View と PowerPivot のリレーションシップ

ビデオ: Power View と PowerPivot のリレーションシップ

ビデオ: Power View と Powerpivot のリレーションシップ

Amogn 別のテーブルのリレーションシップを作成して、データ分析に機能を追加します。リレーションシップは、データが含まれる 2 つのテーブル間の接続: リレーションシップの基礎となる各テーブルに 1 つの列。リレーションシップが便利な理由を表示するには、ビジネスでの顧客の注文データを追跡することを考えてみましょう。次のような構造を 1 つのテーブルのすべてのデータを追跡する可能性があります。

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 つのテーブル間のリレーションシップの作成」の説明に従って、リレーションシップを手動で作成できます。

同じデータが含まれる各テーブルの列をに基づいてリレーションシップが作成されます。たとえば、各受注]テーブルで、[得意先] テーブルには、顧客 IDを格納する列が含まれているを関連付けることができます。例では、列の名前、同じですが、これは必須ではありません。いずれかの場合があります CustomerID と別の CustomerNumber では、[得意先] テーブルでも保存されている ID を含むすべての受注] テーブルで行とします。

リレーショナル データベースでは、キーのいくつかの種類があります。キーは、通常の特別なプロパティ列です。各キーの目的を理解すると、ピボット テーブル、ピボット グラフ、または Power View レポートにデータを提供する複数のテーブルのデータ モデルを管理することができます。

さまざまな種類のキーは、最も重要なここでは次のとおり

  • 主キー: [得意先] テーブルのCustomerIDのように、テーブル内の行を一意に識別します。

  • 代替キー (または候補キー):一意である主キー以外の列。たとえば、従業員 ID、社会保障番号、どちらも一意社員] テーブルが格納されます可能性があります。

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

データ モデル] で、主キーまたは代替のキーと呼ばれる関連する列。テーブルのプライマリおよび代替キーの両方の場合はのいずれかの基本としてテーブルのリレーションシップを使用できます。外部キーは、ソース列だけで列と呼ばれます。例では、(列) の [受注] テーブルのCustomerIDと (ルックアップ列) の [得意先] テーブルのCustomerIDのリレーションシップを定義するとします。リレーショナル データベースからデータをインポートする場合は、既定では Excel 選択 1 つのテーブルから外部キーと対応する主キー、他のテーブルします。ただし、ルックアップ列の一意の値を持つ任意の列を使用することができます。

顧客との間の関係は、1 対多関係です。すべてのお客様は、複数の注文を持つことができますが、複数の顧客注文ことはできません。別の重要なテーブルのリレーションシップは 1 対 1 です。この例では、顧客ごとに 1 つの割引率を定義するCustomerDiscountsの表は、[得意先] テーブルと一対一リレーションシップがあります。

次の表は、(顧客、CustomerDiscounts、および注文) の 3 つのテーブル間のリレーションシップを示しています。

リレーションシップ

種類

ルックアップ列

Customers-CustomerDiscounts

一対一

Customers.CustomerID

CustomerDiscounts.CustomerID

Customers-Orders

一対多

Customers.CustomerID

Orders.CustomerID

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

すべてのリレーションシップを作成すると後、Excel を新しく作成したリレーションシップのテーブルの列を使用する任意の数式を再計算通常する必要があります。処理は、データの量とのリレーションシップの複雑さによって、時間がかかることができます。詳細については、数式の再計算を参照してください。

データ モデルには、2 つのテーブル間の複数のリレーションシップを持つことができます。正確な計算を作成するには、Excel には、次の 1 つのテーブルから単一のパスが必要があります。このため、テーブルのペアごとの間のリレーションシップを 1 つだけが一度にアクティブです。作業中の他のユーザーが数式とクエリで非アクティブなリレーションシップを指定できます。

ダイアグラム ビューでは、[アクティブなリレーションシップは実線、破線は無効になっています。などに、AdventureWorksDW2012、 DimDateテーブルが含まれる列、 DateKeyFactInternetSalesの表に 3 つの列に関連する: [受注日]、[式] と出荷日。アクティブなリレーションシップは、DateKey と受注日の間を指定しない限りは数式での既定のリレーションシップがあります。

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

条件

説明

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

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

一意の参照列

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

互換性のあるデータ型

元の列と参照列内のデータ型を互換性のあることがあります。データの種類の詳細については、データ モデルでサポートされているデータ型を参照してください。

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

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

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

主キーと外部キーを定義する複数の列がある 2 つのテーブル間のリレーションシップを作成するには、リレーションシップを作成する前に、1 つのキー列を作成するのには、値を結合しています。これは、またはする前に、データのインポート Power Pivot を使用して、データ モデルで計算列を作成してアドインを行うことができます。

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

データ モデルには、多対多のリレーションシップを持つことはできません。モデルの結合テーブルを追加することはできませんだけです。ただし、多対多リレーションシップをモデル化 DAX 関数を使用することができます。

自己結合し、ループ

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

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

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

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

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

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

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

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

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

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

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

  • 多側キー列の名前をルックアップ テーブルにキー列の名前に似ていますが確認します。名前は、まったく同じである必要はありません。たとえば、ビジネスの設定] で多くの場合があるバリエーション基本的に同じデータを含む列の名前に: Emp ID、社員、従業員 ID、EMP_ID、します。アルゴリズムでは、同様の名前を検出し、類似した、または正確に一致する名前が付いているこれらの列に可能性が高くを割り当てます。このため、リレーションシップの作成の確率を上げるためには、列のように、既存のテーブルにインポートするデータの列名の変更を試すできます。Excel には、複数の利用可能なリレーションシップが検出されると、そのはいないリレーションシップを作成します。

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

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

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

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

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

Products と Category: 手動で作成

Category と SubCategory: 手動で作成

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

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

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

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

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

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

×