Omni のテンプレートフィルターを使ってタイムフレームの切り替えを行う

Omni のテンプレートフィルターを使ってタイムフレームの切り替えを行う

2026.05.20

こんにちは、ikumiです。

Omni の 分析画面 でグラフを作っていると、「日次・週次・月次をフィルター1つで切り替えたい」という場面があります。こういったケースで利用できる、 テンプレートフィルター(Templated Filters)とう機能を使ってタイムフレームスイッチャーを実装する方法を試してみました。

https://docs.omni.co/modeling/templated-filters

機能概要

テンプレートフィルターは、Mustache テンプレート構文({{# }}〜{{/ }})を使って、View や Field の SQL 定義にユーザーの入力値を動的に注入できる機能です。

通常の dimension は SQL が固定ですが、テンプレートフィルターを組み合わせることで、ユーザーが 分析画面 上で選択した値に応じて SQL の中身を直接書き変えることができます。

タイムフレームスイッチャーは、この機能の代表的なユースケースです。Daily / Weekly / Monthly などの選択肢をフィルターで提示し、選択値に応じて日付の粒度(date / week / month)を CASE 文で切り替えます。

ダッシュボード UI コントロールとの違い

Omni にはモデルを触らずに設定できる Time Frame Switcher コントロール(ダッシュボードの Add > Control > Time frame switcher)があります。用途に応じてどちらを使うか判断する際の参考として、違いをまとめます。

UI コントロール テンプレートフィルター
設定場所 ダッシュボード GUI モデル(YAML)
モデル変更 不要 必要
使える場所 ダッシュボードのみ 分析画面・ダッシュボード両方
対象フィールド 日付フィールドのみ 日付以外にも応用可

モデル変更なしでダッシュボード上だけで使いたい場合は UI コントロール分析画面 でも動作させたい・日付以外の動的切り替えも必要な場合はテンプレートフィルターという使い分けが一つの判断基準になります。

コントロールの使用に関する関連記事は以下を参考にしてください。
https://docs.omni.co/visualize-present/dashboards/controls#time-frame-switcher
https://dev.classmethod.jp/articles/omni-dynamic-displaying-control/#time-frame-switcher

試してみた

事前準備

既存の View ファイルにフィルター専用フィールドと動的ディメンションを追加します。今回は brand_ana__tran ビューの order_date を題材に実装します。

1. フィルター専用フィールドを定義する

tran.view.yamlfilters: セクションを追加し、タイムフレームの選択肢を定義します。

filters:
  timeframe_selector:
    type: string
    suggestion_list:
      - value: Daily
      - value: Weekly
      - value: Monthly
プロパティ 設定値 説明
type string フィルターの型
suggestion_list Daily / Weekly / Monthly Explore に表示する選択肢

suggestion_list に値を設定しておくと、Explore 上でドロップダウン形式で選択できます。

omni-templated-filters-time-frame-switcher-no1

2. 動的ディメンションを定義する

続けて dimensions: に CASE 文で粒度を切り替える動的ディメンションを追加します。

dimensions:
  order_date_dynamic:
    sql: |-
      CASE
        WHEN {{# brand_ana__tran.timeframe_selector.filter }} 'Daily'   {{/ brand_ana__tran.timeframe_selector.filter }} THEN ${brand_ana__tran.order_date[date]}
        WHEN {{# brand_ana__tran.timeframe_selector.filter }} 'Weekly'  {{/ brand_ana__tran.timeframe_selector.filter }} THEN ${brand_ana__tran.order_date[week]}
        WHEN {{# brand_ana__tran.timeframe_selector.filter }} 'Monthly' {{/ brand_ana__tran.timeframe_selector.filter }} THEN ${brand_ana__tran.order_date[month]}
      END
    label: Dynamic Date
    timeframes: [Date]

3. 分析画面で動作確認する

フィールドピッカーに Order Date Dynamic が追加されていることを確認します。

timeframe_selector フィルターで Daily を選択した状態で Order Date DynamicSales Sum を選択してクエリを実行します。

omni-templated-filters-time-frame-switcher-no2

日次の日付で売上が集計されていれば問題ありません。続けて Weekly に切り替えて実行します。

omni-templated-filters-time-frame-switcher-no3

週次に粒度が変わった状態で集計されていれば問題ありません。

4. ダッシュボードで使ってみる

分析画面で作成したグラフをダッシュボードに追加します。timeframe_selector フィルターをダッシュボードフィルターとして設定することで、複数のタイルを一括で切り替えられます。

omni-templated-filters-time-frame-switcher-no4
omni-templated-filters-time-frame-switcher-no5

フィルターを Monthly に切り替えたとき、ダッシュボード上の全タイルの日付粒度が一括で月次に変われば完了です。

最後に

Omni のテンプレートフィルターを使って、日次・週次・月次を切り替えられるタイムフレームスイッチャーを実装してみました。

実装のポイントは2つで、フィルター専用フィールド(filters:)で選択肢を定義し、動的ディメンション(dimensions:)の CASE 文の中でテンプレート構文を使って粒度を切り替えるだけです。

グラフを複数並べる必要がなくなり、ダッシュボードがすっきりするのは嬉しいですね。suggestion_list の値を変えれば Quarter や Year への対応も簡単に追加できます。

ダッシュボード上だけで完結するなら GUI で設定できる UI コントロールのほうが手軽ですが、Explore でも同じ切り替えを使いたい場合や、日付以外の動的切り替え(テーブル切り替え・WHERE 条件の注入など)にも応用したい場合はテンプレートフィルターが活躍します。用途に応じて使い分けてみてください。

この記事をシェアする

関連記事