次の方法で共有


Power BI Desktop で [参照整合性を想定] 設定を適用する

DirectQuery を使用してデータ ソースに接続する場合は、[参照整合性を想定] の選択を使用して、データ ソースに対してより効率的なクエリを実行できるようにします。 この機能には基礎となるデータに関していくつかの要件があり、DirectQuery の利用時にのみ利用できます。

[参照整合性を想定] を設定すると、データ ソースに対するクエリで OUTER JOIN ステートメントではなく INNER JOIN ステートメントを使用できるようになり、クエリの効率性が上がります。

[参照整合性を想定] を選ぶ [リレーションシップの編集] ダイアログのスクリーンショット。

[参照整合性を想定] を使用するための要件

この設定は高度な設定であり、DirectQuery を利用してデータに接続するときにのみ有効になります。 [参照整合性を想定] を正しく動作させるには、次の要件を満たす必要があります。

  • リレーションシップの [From] (参照元) 列のデータを Null または にしない
  • [From] (参照元) 列のデータにはそれぞれ [To] (参照先) 列に対応する値があります。

このコンテキストでは、[From] (参照元) 列は "一対多" 関係の "多" になります。または、"一対多" 関係の最初の表の列になります。

[参照整合性を想定] の使用例

次の例は、データ接続で [参照整合性を想定] を使用した場合の動作を示しています。 この例では、OrdersProductsDepots テーブルを含むデータ ソースに接続しています。

  • 次の画像では、Orders テーブルと Products テーブルを確認できます。Orders[ProductID]Products[ProductID] の間に参照整合性が存在します。 Orders テーブルの [ProductID] 列が Null になることはありません。すべての値は Products テーブルにも表示されます。 そのため、[参照整合性を想定] を設定して、より効率的なクエリを取得する必要があります。 この設定を使っても、視覚エフェクトに表示される値は変わりません。

    Orders テーブルと Products テーブルのスクリーンショット。

  • 次の画像では、Orders[DepotID]Depots[DepotID] の間に参照整合性がないことに注意してください。一部の Orders に関して、DepotIDNull になっているためです。 そのため、[参照整合性を想定] を設定しないでください。

    Orders テーブルと Depots テーブルのスクリーンショット。

  • 最後に、次のテーブルの Orders[CustomerID]Customers[CustID] の間に参照整合性は存在しません。 CustomerID には、Customers テーブル内に存在しない値 CustX が含まれています。 そのため、[参照整合性を想定] を設定しないでください。

    Orders テーブルと Customers テーブルのスクリーンショット。

[参照整合性を想定] を設定する

この機能を有効にするには、次の画像の中で示したように [参照整合性を想定] を選択します。

[参照整合性を想定] を選択できる [リレーションシップの編集] ダイアログのスクリーンショット。

選択すると、Null や一致しない行がないことが確認する目的でデータに対して設定が検証されます。 ただし、値の数が非常に多い場合、検証しても、参照整合性問題がないことは保証されません。

また、検証は関係を追加したときに行われ、追加後のデータ変更は 反映されません

[参照整合性を想定] を間違えて設定した場合

データ内に参照整合性の問題がある際に [参照整合性を想定] を設定した場合、その設定ではエラーは起こりません。 ただし、明らかなデータの不整合が確認できます。 たとえば、ここで説明した Depots テーブルの関係の場合、次のような現象が起こります。

  • 合計 Order Qty を表示する視覚エフェクトの値が 40 と表示されます。
  • 合計 Order Qty by Depot City を表示する視覚エフェクトの合計値がわずか 30 と表示されるのは、DepotIDNull の Order ID 1 が含まれていないためです。