コンテキスト フィルターでビューのパフォーマンスを改善する

既定では、Tableau で設定したすべてのフィルターは個別に計算されます。つまり、各フィルターは他のフィルターにかかわらず、データ ソース内のすべての行にアクセスします。ただし、ビューのコンテキスト フィルターとして 1 つまたは複数のカテゴリー フィルターを設定することができます。コンテキスト フィルターは、独立したフィルターと考えることができます。設定するその他のフィルターは、コンテキスト フィルターを通過するデータのみを処理するので、依存型フィルターとして定義されます。

コンテキスト フィルターは次の目的で作成できます。

  • パフォーマンスの向上 – 多数のフィルターを設定する場合や、データ ソースが大きい場合、クエリに時間がかかる場合があります。1 つまたは複数のコンテキスト フィルターを設定すると、パフォーマンスを向上させることができます。

  • 依存型数値フィルターまたは上位 N フィルターの作成 – 対象のデータのみを含めるコンテキスト フィルターを設定し、数値フィルターまたは上位 N フィルターを設定できます。

たとえば、大手食料品店チェーンの朝食製品を担当しているとします。タスクは、全店舗に関して収益性の面で上位 10 位の朝食用製品を見つけることです。データ ソースが非常に大きい場合、朝食用製品のみを含めるようにコンテキスト フィルターを設定します。その後、依存型フィルターとして収益面で上位 10 位のフィルターを作成すると、コンテキスト フィルターを通過するデータのみが処理されます。

: Tableau 9.0 の時点では、汎用 ODBC データ ソースやカスタマイズされたデータ ソースを除き、コンテキスト フィルターで一時表が作成されなくなりました。

コンテキスト フィルターの作成

コンテキスト フィルターを作成するには、既存のカテゴリー フィルターのコンテキスト メニューで [コンテキストに追加] を選択します。コンテキストが一度計算され、ビューが生成されます。その他のフィルターは、すべてそのコンテキストを基準として計算されます。コンテキスト フィルター:

  • [フィルター] シェルフの上部に表示されます。

  • [フィルター] シェルフ上の灰色のアイコンで示されます。

  • シェルフに再配置することはできません。

下のように、"Ship Mode (出荷モード)" ディメンションがビューのコンテキストとなるように設定されます。"Region (地域)" フィルターは、"Ship Mode (出荷モード)" を通過したデータのみを使用して計算されます。

コンテキスト フィルターは次の方法で変更できます。

  • [フィルター] シェルフからフィールドを削除する – シェルフに他のコンテキスト フィルターが残っている場合、新しいコンテキストが計算されます。

  • フィルターを編集する – コンテキスト フィルターを編集するたびに新しいコンテキストが計算されます。

  • [コンテキストから削除] を選択する – フィルターは標準のフィルターとしてシェルフに残ります。コンテキスト フィルターがシェルフに残っている場合、新しいコンテキストが計算されます。

コンテキスト フィルターの高速化

特に大きいデータ ソースでコンテキスト フィルターのパフォーマンスを向上させるには、次の一般的な規則に従います。

  • データ セットのサイズを大幅に削減できる 1 つのコンテキスト フィルターを使用する方が、多くのコンテキスト フィルターを適用するよりはるかに優れています。実際、フィルターを適用してもデータ セットのサイズが 1/10 以上削減できない場合、コンテキストにこのフィルターを追加すると、コンテキストの計算にパフォーマンス コストがかかるため、事態が悪化します。

  • データのモデル化をすべて完了してから、コンテキストを作成します。データ モデルの変更 (ディメンションからメジャーへの変換など) では、コンテキストの再計算が必要です。

  • コンテキストに必要なフィルターを設定し、コンテキストを作成してからフィールドを他のシェルフに追加します。この作業を最初に行うことにより、他のシェルフ上のフィールドを削除するときに実行されるクエリが非常に高速になります。

  • 日付に対してコンテキスト フィルターを設定する場合、連続する日付を使用することができます。ただし、不連続の日付に対して YEAR(date) のような日付ビンやコンテキスト フィルターを使用すると、非常に効果的です。

: データ セットが綿密にインデックス化されている場合、コンテキスト フィルターを使用してもパフォーマンスは向上せず、クエリのパフォーマンスが低下する可能性があります。

コンテキスト フィルターは、データ ソースの [データ] メニューで [参照整合性を想定] オプションを使用すると、クエリ パフォーマンスの向上に悪影響を及ぼす可能性があります。詳細については、結合の参照整合性を仮定するを参照してください。

例: コンテキスト フィルターの作成

この例では、コンテキスト フィルターを作成する方法を示します。まず、売上高が上位 10 位の製品を表示するようにビューをフィルターします。次に、上位 10 位の家具製品を表示できるように、製品カテゴリーでコンテキスト フィルターを作成します。

  1. "Sample - Superstore (サンプル - スーパーストア)" データ ソースを使用して、下のような初期ビューを作成します。このビューでは、売上高が最も高いものが一番上になるように、すべてのサブカテゴリーが並べ替えられています。

  2. 次に、上位 10 位フィルターを作成し、ベストセラー製品のみを表示します。このフィルターは、[フィルター] シェルフに "Sub-Category (サブカテゴリー)" フィールドをドラッグすることによって作成できます。[フィルター] ダイアログ ボックスで [上位] タブに切り替え、合計売上高が上位 10 位のフィルターを定義します。上位 N フィルターの定義の詳細については、ビューからのデータのフィルター(Link opens in a new window)を参照してください。

  3. [OK] をクリックすると、ビューがフィルターされ、売上高が上位 10 位の製品が表示されます。

  4. ここで、家具製品のみを表示する別のフィルターを追加しましよう。[フィルター] シェルフに "Category (カテゴリー)" フィールドをドラッグし、"Furniture (家具)" のみを選択します。終了したら、[OK] をクリックします。

    ビューはフィルターされますが、10 製品ではなく 3 製品のみが表示されます。これは、既定ではすべてのフィルターは個別に評価され、ビューには結果の交差点が表示されるためです。そのため、このビューは、全体の上位 10 位の製品の 3 つは家具製品であることを示しています。

  5. 上位 10 位の家具製品を確認するには、"Category (カテゴリー)" フィルターをコンテキスト フィルターにする必要があります。[フィルター] シェルフのフィールドを右クリックし、[コンテキストに追加] を選択します。

  6. コンテキスト フィルターとしてマークされたフィルターとビューが更新され、上位 4 位の家具製品が表示されます。なぜ上位 10 位ではないのでしょうか?なぜならば、サブカテゴリーのうち 4 つのみが家具を含んでいるからです。ただし、そのコンテキストの結果で上位 10 位フィルターが評価されていることがわかります。

ありがとうございます!