表形式モデルの双方向のクロス フィルター

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

表形式モデルの双方向クロス フィルターを使用すると、テーブル リレーションシップ間でフィルター コンテキストを伝達するための手動で作成された DAX 回避策が不要になります。

この概念を構成要素に分解して説明します。 クロス フィルタリング は、関連テーブルの値に基づいてテーブルのフィルター コンテキストを設定する機能です。 双方向 は、テーブル リレーションシップのもう一方の側の 2 つ目の関連テーブルにフィルター コンテキストを伝達することを意味します。 名前が示すように、一方向ではなく、双方向のリレーションシップでスライスすることができます。 内部的には、双方向のフィルタリングではフィルター コンテキストが展開され、データのスーパーセットが照会されます。

[フィルターの方向] セクションが強調表示されている [リレーションシップの編集] ダイヤルボ ボックスのスクリーンショット。

クロス フィルターには、一方向フィルターと双方向フィルターの 2 種類があります。 一方向は、そのリレーションシップにおけるファクト テーブルとディメンション テーブル間の従来の多対一のフィルターです。 双方向は、1 つのリレーションシップのフィルター コンテキストを別のテーブル リレーションシップのフィルター コンテキストとして使用できるようにするクロスフィルターであり、1 つのテーブルは両方のリレーションシップに共通です。

FactOnlineSales との外部キー リレーションシップを持つ DimDateDimProductがある場合、双方向のクロス フィルターは、 FactOnlineSales-to-DimDateFactOnlineSales-to-DimProduct を同時に使用することに相当します。

双方向クロス フィルターは、過去に表形式と Power Pivot の開発者に課題を抱えた多対多クエリ設計の問題を簡単に解決できます。 表形式または Power Pivot モデルの多対多リレーションシップに対して DAX 回避策を使用した場合は、双方向フィルターを適用して、期待される結果が生成されるかどうかを確認できます。

双方向のクロス フィルターを作成するときには、次の点に注意してください。

  • 双方向のフィルターを有効にする前によく考えます。

    双方向のフィルターをすべての場所で有効にすると、予想外の方法でデータが過剰にフィルター処理される可能性があります。 考えられる複数のクエリ パスを作成することで、あいまいさが生じる可能性もあります。 両方の問題を回避するには、一方向フィルターと双方向フィルターの組み合わせを使用することを計画します。

  • 増分テストを実行して、各フィルターの変更がモデルに与える影響を確認します。Visual Studio の Excel で分析機能は、インクリメンタル テストに適しています。 ベスト プラクティスとして、後で予想外のことが起こらないように、他のレポート作成クライアントを使用したテストで定期的に追跡します。

注意

Visual Studio の表形式モデル デザイナーには、双方向クロス フィルターが自動的に試行されるかどうかを決定する既定値が含まれています。 既定で双方向フィルターを有効にすると、モデルがテーブル リレーションシップのチェーンを介して 1 つのクエリ パスを明確に示す場合にのみ、双方向フィルター処理が有効になります。

既定値の設定

一方向のフィルターが既定値です。 デザイナーで作成されるすべての新しいプロジェクトの既定値を変更できます。また、プロジェクトが既に存在する場合は、モデル自体で既定値を変更できます。

設定は、プロジェクトの作成時にプロジェクト レベルで評価されるので、既定値を双方向に変更した場合、次のプロジェクトの作成時にその効果を確認できます。

  1. Visual Studio で、[ツール>] [オプション] [Analysis Services] [表形式デザイナー] [新しいプロジェクト設定] > の>順に選択します。

  2. [既定のフィルターの方向][一方向] または [双方向]に設定します。

既定値はモデルで変更することもできます。

  1. ソリューション エクスプローラーで、[Model.bim Properties]\(Model.bim>プロパティ\) を選択します。

  2. [既定のフィルターの方向][一方向] または [双方向]に設定します。

次の点に留意してください

双方向のクロス フィルターをいつどのように使用するかの理解は、実際のシナリオでそのしくみを確認する試行錯誤の問題と言えます。 場合によっては、組み込みの動作では十分ではなく、ジョブを完了するために DAX 計算にフォールバックする必要があります。 [ 関連項目] セクションには、このテーマに関するその他のリソースへのリンクがいくつかあります。

実際には、クロス フィルタリングにより、通常は多対多構造によってのみ実現されるデータ探索の方法を実現できます。 とはいえ、双方向のクロスフィルター処理は多対多構造ではないことを認識することが重要です。 このリリースの表形式モデルのデザイナーでは、実際の多対多テーブル構成は引き続きサポートされていません。

こちらもご覧ください

Power BI Desktop でのリレーションシップの作成と管理
Power Pivot と表形式モデルで単純な多対学リレーションシップを処理する方法の実用的な例
Resolving Many-to-Many relationships leveraging DAX Cross Table Filtering (DAX のテーブル間フィルタリングを利用した多対多リレーションシップの解決)
Many-to-Many Revolution (SQLBI ブログ)