
Omni のテンプレートフィルターを使ってタイムフレームの切り替えを行う
こんにちは、ikumiです。
Omni の 分析画面 でグラフを作っていると、「日次・週次・月次をフィルター1つで切り替えたい」という場面があります。こういったケースで利用できる、 テンプレートフィルター(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 コントロール、分析画面 でも動作させたい・日付以外の動的切り替えも必要な場合はテンプレートフィルターという使い分けが一つの判断基準になります。
コントロールの使用に関する関連記事は以下を参考にしてください。
試してみた
事前準備
既存の View ファイルにフィルター専用フィールドと動的ディメンションを追加します。今回は brand_ana__tran ビューの order_date を題材に実装します。
1. フィルター専用フィールドを定義する
tran.view.yaml に filters: セクションを追加し、タイムフレームの選択肢を定義します。
filters:
timeframe_selector:
type: string
suggestion_list:
- value: Daily
- value: Weekly
- value: Monthly
| プロパティ | 設定値 | 説明 |
|---|---|---|
type |
string |
フィルターの型 |
suggestion_list |
Daily / Weekly / Monthly | Explore に表示する選択肢 |
suggestion_list に値を設定しておくと、Explore 上でドロップダウン形式で選択できます。

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 Dynamic と Sales Sum を選択してクエリを実行します。

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

週次に粒度が変わった状態で集計されていれば問題ありません。
4. ダッシュボードで使ってみる
分析画面で作成したグラフをダッシュボードに追加します。timeframe_selector フィルターをダッシュボードフィルターとして設定することで、複数のタイルを一括で切り替えられます。


フィルターを Monthly に切り替えたとき、ダッシュボード上の全タイルの日付粒度が一括で月次に変われば完了です。
最後に
Omni のテンプレートフィルターを使って、日次・週次・月次を切り替えられるタイムフレームスイッチャーを実装してみました。
実装のポイントは2つで、フィルター専用フィールド(filters:)で選択肢を定義し、動的ディメンション(dimensions:)の CASE 文の中でテンプレート構文を使って粒度を切り替えるだけです。
グラフを複数並べる必要がなくなり、ダッシュボードがすっきりするのは嬉しいですね。suggestion_list の値を変えれば Quarter や Year への対応も簡単に追加できます。
ダッシュボード上だけで完結するなら GUI で設定できる UI コントロールのほうが手軽ですが、Explore でも同じ切り替えを使いたい場合や、日付以外の動的切り替え(テーブル切り替え・WHERE 条件の注入など)にも応用したい場合はテンプレートフィルターが活躍します。用途に応じて使い分けてみてください。








