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 のリレーションシップ ビューの詳細