リレーションシップとカーディナリティを操作する

完了

他のデータベース管理システムとは異なり、Power BI には、リレーションシップに対する "方向性" の概念があります。 この方向性は、複数のテーブル間でデータをフィルター処理する際に重要な役割を果たします。 データを読み込むと、Power BI によって列名が照合されることにより、データ内に存在するリレーションシップが自動的に検索されます。 また、[リレーションシップの管理] を使用して、これらのオプションを手動で編集することもできます。

たとえば、Sales データベースから多数のテーブルを取得したとして、セマンティック モデルの例は次の図のようになります。 Power BI によって複数のリレーションシップが自動検出されましたが、それらが何を意味するのかがわかりません。 それらのリレーションシップに、データ内に存在するリレーションシップが正確に反映されていることを確認する必要があります。

例のセマンティック モデルのスクリーンショット

リレーションシップ

Power BI に表示されるさまざまな種類のリレーションシップを次に示します。

多対一 (*:1) または一対多 (1: *) のリレーションシップ

  • 1 つの列に値の多数のインスタンスが存在し、それらが、別の列にある対応した 1 つの一意のインスタンスだけに関連するリレーションシップを表します。

  • ファクトとディメンション テーブル間の方向性を表します。

  • 最も一般的な方向性の種類であり、リレーションシップを自動的に作成する場合は Power BI での既定値です。

一対多リレーションシップの例として、テーブル CountryName と Territory では、1 つの一意の国に関連付けられた多数の地域が存在することができます。

多対一リレーションシップのスクリーンショット。

一対一 (1:1) リレーションシップ:

  • 2 つのテーブル間で共通する値のインスタンスが 1 つだけであるリレーションシップを表します。

  • 両方のテーブルに一意の値が必要です。

  • このリレーションシップには冗長な情報が格納され、モデルが正しく設計されていないことを示唆しているため、お勧めしません。 テーブルを結合することをお勧めします。

一対一リレーションシップの例として、2 つの異なるテーブルに製品と製品 ID が含まれている場合が挙げられます。 一対一リレーションシップの作成は冗長であり、これら 2 つのテーブルを結合する必要があります。

一対一リレーションシップのスクリーンショット。

多対多 (.) リレーションシップ:

  • 2 つのテーブル間で多数の値が共通するリレーションシップを表します。

  • リレーションシップのどちらのテーブルにも一意の値は必要ありません。

  • お勧めしません。一意の値がないとあいまいさが生じ、ユーザーはどの値列が何を参照しているかわからない可能性があります。

たとえば次の図は、テーブル Sales と Order との間の、OrderDate 列の多対多リレーションシップを示しています。これは、複数の販売に複数の注文を関連付けることができるためです。 両方のテーブルに同じ注文日が含まれる可能性があるため、あいまいさが生じます。

多対多リレーションシップのスクリーンショット。

クロスフィルターの方向

データは、リレーションシップの一方または両方の側でフィルター処理できます。

クロスフィルターの方向が単一の場合:

  • データをフィルター処理するために使用できるのは、リレーションシップの一方のテーブルだけです。 たとえば、テーブル 1 をテーブル 2 でフィルター処理することはできても、テーブル 2 をテーブル 1 でフィルター処理することはできません。

    ヒント

    テーブル間のリレーションシップの矢印の方向に従って、フィルターがどの方向に向かっているかを把握します。 通常は、これらの矢印がファクト テーブルを指すようにします。

  • 一対多または多対一のリレーションシップの場合、クロスフィルターの方向は "一" の側からになります。つまり、多くの値を含むテーブルにフィルターが適用されます。

クロスフィルターの方向が両方または双方向のクロスフィルターの場合:

  • リレーションシップの一方のテーブルを使用して、もう一方のテーブルをフィルター処理できます。 たとえば、ファクト テーブルを使用してディメンション テーブルをフィルター処理でき、ディメンション テーブルを使用してファクト テーブルをフィルター処理できます。

  • 多対多リレーションシップで双方向のクロスフィルターを使用すると、パフォーマンスが低下する可能性があります。

双方向のクロスフィルターに関する注意事項: そうすることの影響を十分に理解していない限り、双方向のクロスフィルター リレーションシップを有効にしないでください。 有効にすると、あいまいさ、オーバーサンプリング、予期しない結果、パフォーマンスの低下を招く可能性があります。

カーディナリティとクロスフィルターの方向

一対一リレーションシップの場合、使用できるオプションは双方向のクロスフィルターだけです。 このリレーションシップのどちら側でもデータをフィルター処理して、明確であいまいさのない 1 つの値にすることができます。 たとえば、1 つの製品 ID に対するフィルター処理によって単一の製品を返すことができます。また、製品をフィルター処理して単一の製品 ID を返すことができます。

多対多リレーションシップの場合は、双方向のクロスフィルターを使用して、一方向または両方向でのフィルター処理を選択できます。 双方向のクロスフィルターに関連したあいまいさは、多対多リレーションシップで増幅されます。異なるテーブル間に複数のパスが存在するためです。 メジャー、計算、またはフィルターを作成すると、データがフィルター処理されるときに意図しない結果が生じる可能性があります。また、フィルターの適用時に Power BI エンジンで選択されるリレーションシップによっては、最終的な結果が異なる場合があります。 この状況は、双方向のリレーションシップにも当てはまり、それらを使用する際に注意が必要な理由になっています。

このため、多対多リレーションシップまたは双方向のリレーションシップ (あるいはその両方) は複雑になります。 集計したときにデータがどのようになるかが明確な場合を除き、複数のフィルター処理方向を持つオープンエンドのリレーションシップでは、データを通じて複数のパスが取り込まれる可能性があります。

多対多リレーションシップを作成する

顧客とアカウントの予算を調べるビジュアルを作成する作業に取り組むというシナリオを考えてみましょう。 同じアカウントに複数の顧客が存在する場合や、同じ顧客に複数のアカウントが存在する場合があるため、多対多リレーションシップを作成する必要があることがわかっています。

多対多リレーションシップのスクリーンショット。

このリレーションシップを作成するには、[リレーションシップの管理]>[新規] に移動します。 表示されたウィンドウで、CustomerTable と AccountTable の CustomerID 列の間にリレーションシップを作成します。 リレーションシップは多対多に設定され、フィルターの種類は両方向に設定されます。 予期しない値が返される可能性があるため、この種類のリレーションシップはどちらの列にも一意の値がないと予想される場合にのみ使用する必要がある、という警告が表示されます。 両方の方向でフィルター処理を行おうとしているため、双方向のクロスフィルターを選択します。

[OK] を選択します。 これで、多対多リレーションシップが正常に作成されました。

[リレーションシップの管理] の多対多リレーションシップのスクリーンショット。

詳細については、Power BI での多対多リレーションシップに関するページを参照してください。