Tableauでテキスト検索の速度を上げる(パフォーマンス検証)


はじめに

Tableauに大量データを取り込んだ際、フィルターの処理速度が落ちてしまうため、
下記3パターンのテキストボックス検索で、どの方法が最も早いかパフォーマンス検証を行う。

1.通常のテキストフィルター(フィルターモード:ワイルドカード一致)
2.CONTAINS関数を利用したフィルター
3.REGEXP_MATCH関数を利用したフィルター

環境・データ量

  • Tableauバージョン :Tableau 2018.1
  • サンプルデータ件数:15,000,000件

準備

パラメーターと関数の作成

1.テキストフィルター(ワイルドカード一致)
Tableauの通常フィルターのため設定不要。

2.CONTAINS関数を利用したフィルター
 2-1.CONTAINS関数に渡す条件入力用のパラメータを作成する。データ型は文字列。
 2-2.CONTAINS関数をフィルターとして使用するための計算フィールドを作成する。

IF [CONTAINSの条件入力用パラメーター名] != "" THEN
    CONTAINS([検索対象のディメンション名],[CONTAINSの条件入力用パラメーター名])
ELSE
    TRUE
END

3.REGEXP_MATCH関数を利用したフィルター
 3-1.REGEXP_MATCH関数に渡す条件入力用のパラメータを作成する。データ型は文字列。
 3-2.REGEXP_MATCH関数をフィルターとして使用するための計算フィールドを作成する。

※正規表現を利用するための関数であるため、用途は広いが利用者によっては予期せぬ
 結果が表示されることがある。

IF [REGEXP_MATCHの条件入力用パラメーター名] != "" THEN
    REGEXP_MATCH([検索対象のディメンション名],[REGEXP_MATCHの条件入力用パラメーター名])
ELSE
    TRUE
END

※上記式はパラメーターに条件が指定されない際に全データを表示をするよう、
 条件指定時及び指定されない場合のどちらも真が返るよう定義している。

ワークシートに上記で作成した計算フィールドを設定する

1.テキストフィルター(ワイルドカード一致)
関数不要のため検索対象のディメンションをワークシートのフィルターに入れておく。

2.CONTAINS関数を利用したフィルター
上記のCONTAINS関数を使用した計算フィールドをワークシートのフィルターに設定する。
フィルター条件は「真」を指定。

3.REGEXP_MATCH関数を利用したフィルター
上記のREGEXP_MATCH関数を使用した計算フィールドをワークシートのフィルターに設定する。
フィルター条件は「真」を指定する。

※NULLを指定する理由は上述した通り、パラメーターに条件を指定しない際、
 全データが表示されるようにするため。

パフォーマンス検証

参考:ワークブック パフォーマンスの記録と分析

1.テキストフィルター(ワイルドカード一致)
ExecutingQuery:0.44
設定が楽。リスト、ドロップダウンなど検索パターンが多いなど利点が大きい。

2.CONTAINS関数を利用したフィルター
ExecutingQuery:0.16
若干の手間がかかる。テキストボックスの検索だけなら通常のフィルターより早い。

3.REGEXP_MATCH関数を利用したフィルター
ExecutingQuery:0.28
若干の手間がかかる。テキストボックスの検索だけなら通常のフィルターより早い。
利用者が正規表現を使えるなら用途の広い条件指定が可能。

データ量が多ければ多いほど違いが出てくると思いますので、用途に応じて使い分けることで、
パフォーマンスに違いが出てくると思います。

おわりに

データ量が多い際にパフォーマンスが落ちてしまうのは当然のことなので、
どんなデータを可視化し、利用者に何を伝えたいのかをきちんと設計することで、

・不要なデータは取り込まない
・ダッシュボードに不要なワークシートを表示しない
・ワークシート上の表示件数を制限する など

目的にあった見せ方を意識した設計を行いたいですね。