インタラクティブ・モードを高速化する設計テクニック

インタラクティブ・モードでパラメータを使ったダッシュボードを作成していると、パラメータの数が増えたり、LOV(ドロップダウンの選択肢)の元になるデータが大きくなったりするにつれて、パラメータ変更時の反応が遅く感じられることがあります。

サーバー側でもパフォーマンス改善に継続的に取り組んでいますが、実はプロジェクトの「設計」を少し見直すだけで、製品のアップデートを待たずに、今日からすぐに効果を出せるポイントがあります。今回はその中でも効果が大きい2つのプラクティスをご紹介します。

1. パラメータを参照するステップは、できるだけ下流に置く

パラメータでフィルタする処理をパイプラインの早い段階(結合や集計の前)に置いてしまうと、パラメータを変更するたびに、その後ろ(下流)にある重い処理(テーブル結合、集計など)まで含めて再実行されてしまいます。

パラメータ参照ステップをできるだけ後段(下流)に移動させることで、パラメータ変更時に再実行される範囲を最小限に抑えられます。

  • Before: 読み込み → パラメータでフィルタ → 結合 → 集計
    (パラメータを変えるたびに、結合・集計までまるごと再実行される)
  • After: 読み込み → 結合 → 集計 → パラメータでフィルタ
    (結合・集計はパラメータより上流にあるため再実行されず、結果がそのまま使い回される。パラメータ変更時に再実行されるのはフィルタ以降だけ)

重い処理をパラメータより上流に追い出しておくのがポイントです。結合や集計が重ければ重いほど、この効果は大きくなります。

2. LOV(ドロップダウンの選択肢)専用に、重複を取り除いた小さなデータフレームを用意する

パラメータのドロップダウンに表示する選択肢(LOV)は、多くの場合「ある列に含まれる値の一覧(重複なし)」です。これを毎回、生の大きなテーブルから計算していると、その列のスキャンにテーブルの行数に比例した時間がかかります。

あらかじめ対象列だけを取り出し、重複を取り除いた小さな専用データフレームを用意して、LOVの計算元としてそちらを参照するようにするだけで、スキャンにかかる時間は「行数」ではなく「値の種類の数」に依存するオーダーまで削減できます。

具体的な手順は次の通りです。

  1. 選択肢の元になるデータフレームから、ブランチを作成する
  2. 「列の選択」 で、選択肢にしたい列だけを残す
  3. 「フィルタ」 メニューから 「重複する行を除く」 を適用する(これで行数が「値の種類の数」まで減ります)
  4. パラメータの設定ダイアログを開き、選択肢の指定方法として 「データフレーム」 を選び、いま作ったデータフレームと列を指定する

例えば1,000万行のテーブルに含まれる「店舗名」が200種類しかない場合、この一手間で、ドロップダウンを開くたびのスキャン対象が1,000万行から200行になります。データが大きいプロジェクトほど効果は大きくなります。

なお、選択肢がほとんど変わらないもの(例: 都道府県名、部署名など)であれば、そもそもデータから計算せず、静的なリストとして直接入力してしまうのが最も高速です。

まとめ

プラクティス 効果が出やすい場面
パラメータ参照を下流に パラメータ変更のたびに重い結合・集計が走っている場合
LOV専用の重複なしデータフレーム ドロップダウンの元テーブルの行数が多い場合

これらはいずれも、プロジェクトの設計側の工夫だけで対応できるものです。既存のダッシュボードで「パラメータの反応が遅いな」と感じたら、まずはこの2点を見直してみてください。

サーバー側のパフォーマンス改善についても継続して取り組んでいますので、今後のアップデートもぜひお楽しみに。ご質問・フィードバックがあればコメントでお知らせください。