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

完了

他のデータベース管理システムとは異なり、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 の Customer ID 列の間にリレーションシップを作成します。 リレーションシップは多対多に設定され、フィルターの種類は双方向に設定されます。 予期しない値が返される可能性があるため、この種類のリレーションシップはどちらの列にも一意の値がないと予想される場合にのみ使用する必要がある、という警告が表示されます。 両方の方向でフィルター処理を行おうとしているため、双方向のクロスフィルターを選択します。

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

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