インタラクティブ・モードでパラメータを使ったダッシュボードを作成していると、パラメータの数が増えたり、LOV(ドロップダウンの選択肢)の元になるデータが大きくなったりするにつれて、パラメータ変更時の反応が遅く感じられることがあります。
サーバー側でもパフォーマンス改善に継続的に取り組んでいますが、実はプロジェクトの「設計」を少し見直すだけで、製品のアップデートを待たずに、今日からすぐに効果を出せるポイントがあります。今回はその中でも効果が大きい2つのプラクティスをご紹介します。
1. パラメータを参照するステップは、できるだけ下流に置く
パラメータでフィルタする処理をパイプラインの早い段階(結合や集計の前)に置いてしまうと、パラメータを変更するたびに、その後ろ(下流)にある重い処理(テーブル結合、集計など)まで含めて再実行されてしまいます。
パラメータ参照ステップをできるだけ後段(下流)に移動させることで、パラメータ変更時に再実行される範囲を最小限に抑えられます。
- Before: 読み込み → パラメータでフィルタ → 結合 → 集計
(パラメータを変えるたびに、結合・集計までまるごと再実行される) - After: 読み込み → 結合 → 集計 → パラメータでフィルタ
(結合・集計はパラメータより上流にあるため再実行されず、結果がそのまま使い回される。パラメータ変更時に再実行されるのはフィルタ以降だけ)
重い処理をパラメータより上流に追い出しておくのがポイントです。結合や集計が重ければ重いほど、この効果は大きくなります。
2. LOV(ドロップダウンの選択肢)専用に、重複を取り除いた小さなデータフレームを用意する
パラメータのドロップダウンに表示する選択肢(LOV)は、多くの場合「ある列に含まれる値の一覧(重複なし)」です。これを毎回、生の大きなテーブルから計算していると、その列のスキャンにテーブルの行数に比例した時間がかかります。
あらかじめ対象列だけを取り出し、重複を取り除いた小さな専用データフレームを用意して、LOVの計算元としてそちらを参照するようにするだけで、スキャンにかかる時間は「行数」ではなく「値の種類の数」に依存するオーダーまで削減できます。
具体的な手順は次の通りです。
- 選択肢の元になるデータフレームから、ブランチを作成する
- 「列の選択」 で、選択肢にしたい列だけを残す
- 「フィルタ」 メニューから 「重複する行を除く」 を適用する(これで行数が「値の種類の数」まで減ります)
- パラメータの設定ダイアログを開き、選択肢の指定方法として 「データフレーム」 を選び、いま作ったデータフレームと列を指定する
例えば1,000万行のテーブルに含まれる「店舗名」が200種類しかない場合、この一手間で、ドロップダウンを開くたびのスキャン対象が1,000万行から200行になります。データが大きいプロジェクトほど効果は大きくなります。
なお、選択肢がほとんど変わらないもの(例: 都道府県名、部署名など)であれば、そもそもデータから計算せず、静的なリストとして直接入力してしまうのが最も高速です。
まとめ
| プラクティス | 効果が出やすい場面 |
|---|---|
| パラメータ参照を下流に | パラメータ変更のたびに重い結合・集計が走っている場合 |
| LOV専用の重複なしデータフレーム | ドロップダウンの元テーブルの行数が多い場合 |
これらはいずれも、プロジェクトの設計側の工夫だけで対応できるものです。既存のダッシュボードで「パラメータの反応が遅いな」と感じたら、まずはこの2点を見直してみてください。
サーバー側のパフォーマンス改善についても継続して取り組んでいますので、今後のアップデートもぜひお楽しみに。ご質問・フィードバックがあればコメントでお知らせください。