双方向のリレーションシップのガイダンス
この記事では、Power BI Desktop を使用するデータ モデリング担当者を対象にしています。 双方向のモデル リレーションシップを作成する条件についてのガイダンスを提供します。 双方向のリレーションシップとは、"両方向" にフィルター処理を行うリレーションシップです。
注意
この記事には、モデル リレーションシップの概要は含まれません。 リレーションシップやそのプロパティ、あるいはその構成方法に完全には慣れていない場合は、まず、Power BI Desktop でのモデル リレーションシップに関する記事をお読みになることをお勧めします。
スター スキーマの設計について理解していることも重要です。 詳細については、「スター スキーマと Power BI での重要性を理解する」を参照してください。
一般に、双方向リレーションシップの使用は最小限にすることをお勧めします。 これは、モデル クエリのパフォーマンスに悪影響を及ぼす可能性があり、レポート ユーザーにとって混乱を招く可能性があるためです。
ただし、双方向フィルター処理で特定の要件を解決できるシナリオは 3 つあります。
特殊なモデル リレーションシップ
双方向のリレーションシップは、次の 2 つの特殊なモデル リレーションシップの種類を作成するときに重要な役割を果たします。
- 一対一:すべての一対一のリレーションシップは双方向である必要があります。それ以外に構成することはできません。 一般に、この種類のリレーションシップを作成することはお勧めしません。 完全なディスカッションと代替設計パターンについては、一対一リレーションシップのガイダンス
参照してください。 - 多対多: 2 つの ディメンション テーブルを関連付ける場合は、ブリッジ テーブル が必要です。 フィルターがブリッジング テーブルを越えて伝達されるようにするには、双方向のフィルターが必要です。 詳細については、多対多リレーションシップ ガイダンスを参照してください。
スライサー オプション「データ付き」
双方向リレーションシップは、データが存在する場所にオプションを制限するスライサーを提供できます。 (Excel のピボットテーブルとスライサーに慣れている場合は、Power BI セマンティック モデルまたは Analysis Services モデルからデータをソーシングする場合の既定の動作です)。それが何を意味するのかを説明するために、まず次のモデル図を検討してください。
最初のテーブルは Customer
という名前で、Country-Region
、Customer
、および CustomerCode
の 3 つの列が含まれています。 2 番目のテーブルは Product
という名前で、Color
、Product
、および SKU
の 3 つの列が含まれています。 3 番目のテーブルは Sales
という名前で、CustomerCode
、OrderDate
、Quantity
、および SKU
の 4 つの列が含まれています。 Customer
テーブルと Product
テーブルはディメンション テーブルであり、それぞれに Sales
テーブルとの一対多リレーションシップがあります。 各リレーションシップでは、一方向にフィルター処理されます。
双方向のリレーションシップの動作のしくみを説明するのに役立つように、モデル図が変更されてテーブル行が表示されています。 この記事に含まれるすべての例は、このデータに基づいています。
3 つのテーブルの行の詳細については、次の箇条書きで説明します。
Customer
テーブルには、次の 2 つの行があります。CustomerCode
CUST-01,Customer
Customer-1,Country-Region
米国CustomerCode
CUST-02、Customer
Customer-2、 オーストラリアCountry-Region
Product
テーブルには、次の 3 つの行があります。SKU
CL-01、Product
Tシャツ、Color
グリーンSKU
CL-02、Product
ジーンズ、Color
ブルーSKU
AC-01、Product
帽子、Color
青
Sales
テーブルには、次の 3 つの行があります。OrderDate
2019 年 1 月 1 日,CustomerCode
CUST-01,SKU
CL-01,Quantity
10OrderDate
2019 年 2 月 2 日,CustomerCode
CUST-01,SKU
CL-02,Quantity
20OrderDate
2019 年 3 月 3 日,CustomerCode
CUST-02,SKU
CL-01,Quantity
30
ここで、次のレポート ページについて考えてみましょう。
このページは、2 つのスライサーとカード ビジュアルで構成されています。 最初のスライサーは Country-Region
フィールドに基づいており、オーストラリアと米国の 2 つのオプションがあります。 現在は、オーストラリアでスライスされています。 2 番目のスライサーは Product
フィールドに基づいており、ハット、ジーンズ、T シャツの 3 つのオプションがあります。 項目は選択されていません (つまり、フィルター処理されている "製品はありません")。 カード ビジュアルには、30 という数量が表示されています。
レポートユーザーがオーストラリアでスライスする際、製品スライサーを制限し、データ がオーストラリアの売上に関連する選択肢を表示するようにすることができます。 これは、スライサー オプションを "データと共に" 表示することで意味します。 この動作を達成するには、Product
テーブルと Sales
テーブルの間にリレーションシップを設定して、を双方向にフィルターする必要があります。
製品スライサーに、T シャツという 1 つのオプションが一覧表示されるようになりました。 このオプションは、オーストラリアのお客様に販売された唯一の製品を表します。
最初に、このデザインがレポート ユーザーに対して機能するかどうかを慎重に検討することをお勧めします。 一部のレポート ユーザーは、スライサー オプションが他のスライサーと対話するときに動的に表示または非表示になる理由を理解していないため、エクスペリエンスが混乱を招きます。
"データあり" のスライサー オプションを表示する場合は、双方向リレーションシップを設定しないことをお勧めします。 双方向リレーションシップでは処理が増える必要があるため、特にモデル内の双方向リレーションシップの数が増えるにつれて、クエリのパフォーマンスに悪影響を与える可能性があります。
同じ結果を得るより優れた方法があります。双方向フィルターを使用する代わりに、製品スライサー自体にビジュアル レベルのフィルターを適用できます。
次に、Product
テーブルと Sales
テーブル間のリレーションシップが双方向でフィルタリングされなくなったことを考えてみましょう。 また、次のメジャー定義が Sales
テーブルに追加されています。
Total Quantity = SUM(Sales[Quantity])
"データあり" の製品スライサー オプションを表示するには、"is not blank" 条件を使用して、Total Quantity
メジャーでフィルター処理するだけです。
ディメンション間の分析
双方向リレーションシップを含む別のシナリオでは、ファクト テーブルブリッジ テーブルのように扱われます。 これにより、異なるディメンション テーブルのフィルター コンテキスト内のディメンション テーブル データの分析がサポートされます。
この記事に含まれているモデルの例を使って、次の質問に答える方法を考えてみましょう。
- オーストラリアの顧客に販売された色の数はいくつですか?
- ジーンズを購入した国/地域の数はいくつですか?
どちらの質問も、ブリッジファクト テーブルにデータを要約 することなく、
ファクト テーブルはブリッジ テーブルのように動作するため、多対多リレーションシップガイダンスを適用して、2 つのディメンション テーブルを関連付けることができます。 双方向でフィルター処理するには、少なくとも 1 つのリレーションシップを設定する必要があります。 詳細については、多対多リレーションシップ ガイダンスを参照してください。
ただし、この記事で既に説明したように、この設計はパフォーマンスに悪影響を及ぼす可能性があり、スライサーオプション "with data"
Sales
テーブルに追加された次のメジャー定義について考えてみましょう。 この例では、Customer
テーブルと Sales
テーブルの間のモデル リレーションシップが、の一方向でフィルター処理するように設定されています。
Different Countries Sold =
CALCULATE(
DISTINCTCOUNT(Customer[Country-Region]),
CROSSFILTER(
Customer[CustomerCode],
Sales[CustomerCode],
BOTH
)
)
Different Countries Sold
メジャーの評価中に、Customer
テーブルと Sales
テーブルの関係は双方向でフィルター処理されます。
次のテーブル ビジュアルは、販売された各製品の統計情報を表示しています。 Quantity
列は、単に数量値の合計です。 Different Countries Sold
列は、製品を購入したすべての顧客の国と地域の値の個別の数を表します。
関連するコンテンツ
この記事に関する詳細については、次のリソースを参照してください。
- Power BI Desktop でのモデル リレーションシップ
- Power BI のスター スキーマおよび重要性について
- 一対一のリレーションシップのガイダンス
- 多対多のリレーションシップのガイダンス
- リレーションシップのトラブルシューティング ガイダンス
- わからないことがある場合は、 Fabric コミュニティに問い合わせてみる
- Power BI チームへのご提案は、 Fabric の を向上させるためにアイデアを投稿する