Power BI Desktop で [参照整合性を想定] 設定を適用する
DirectQuery を使用してデータ ソースに接続する場合は、[参照整合性を想定] の選択を使用して、データ ソースに対してより効率的なクエリを実行できるようにします。 この機能には基礎となるデータに関していくつかの要件があり、DirectQuery の利用時にのみ利用できます。
[参照整合性を想定] を設定すると、データ ソースに対するクエリで OUTER JOIN ステートメントではなく INNER JOIN ステートメントを使用できるようになり、クエリの効率性が上がります。
[参照整合性を想定] を使用するための要件
この設定は高度な設定であり、DirectQuery を利用してデータに接続するときにのみ有効になります。 [参照整合性を想定] を正しく動作させるには、次の要件を満たす必要があります。
- リレーションシップの [From] (参照元) 列のデータを Null または 空 にしない
- [From] (参照元) 列のデータにはそれぞれ [To] (参照先) 列に対応する値があります。
このコンテキストでは、[From] (参照元) 列は "一対多" 関係の "多" になります。または、"一対多" 関係の最初の表の列になります。
[参照整合性を想定] の使用例
次の例は、データ接続で [参照整合性を想定] を使用した場合の動作を示しています。 この例では、Orders、Products、Depots テーブルを含むデータ ソースに接続しています。
次の画像では、Orders テーブルと Products テーブルを確認できます。Orders[ProductID] と Products[ProductID] の間に参照整合性が存在します。 Orders テーブルの [ProductID] 列が Null になることはありません。すべての値は Products テーブルにも表示されます。 そのため、[参照整合性を想定] を設定して、より効率的なクエリを取得する必要があります。 この設定を使っても、視覚エフェクトに表示される値は変わりません。
次の画像では、Orders[DepotID] と Depots[DepotID] の間に参照整合性がないことに注意してください。一部の Orders に関して、DepotID が Null になっているためです。 そのため、[参照整合性を想定] を設定しないでください。
最後に、次のテーブルの Orders[CustomerID] と Customers[CustID] の間に参照整合性は存在しません。 CustomerID には、Customers テーブル内に存在しない値 CustX が含まれています。 そのため、[参照整合性を想定] を設定しないでください。
[参照整合性を想定] を設定する
この機能を有効にするには、次の画像の中で示したように [参照整合性を想定] を選択します。
選択すると、Null や一致しない行がないことが確認する目的でデータに対して設定が検証されます。 ただし、値の数が非常に多い場合、検証しても、参照整合性問題がないことは保証されません。
また、検証は関係を追加したときに行われ、追加後のデータ変更は 反映されません 。
[参照整合性を想定] を間違えて設定した場合
データ内に参照整合性の問題がある際に [参照整合性を想定] を設定した場合、その設定ではエラーは起こりません。 ただし、明らかなデータの不整合が確認できます。 たとえば、ここで説明した Depots テーブルの関係の場合、次のような現象が起こります。
- 合計 Order Qty を表示する視覚エフェクトの値が 40 と表示されます。
- 合計 Order Qty by Depot City を表示する視覚エフェクトの合計値がわずか 30 と表示されるのは、DepotID が Null の Order ID 1 が含まれていないためです。
関連するコンテンツ
- 詳細については、DirectQuery に関する記事を参照してください。
- 詳細については、Power BI のリレーションシップに関する記事を参照してください。
- 詳細については、Power BI Desktop のモデル ビューを参照してください。