同じ Look やダッシュボードで複数の期間でフィルタリングした指標を比較するには、フィルタされたメジャーを使用します。フィルタされたメジャーを使用すると、クエリ全体にフィルタを適用するのではなく、ハードコードされたフィルタをメジャーに直接適用できます。
比較する期間が限られている場合は、ハードコードされた期間フィルタ(「今年」、「前年」など)を使用していくつかのメジャーを定義し、Explore、Look、またはダッシュボードで表示できます。さらに別の方法として、期間の比較を動的にする、または、フィルタされたメジャー内でテンプレート化されたフィルタを使用することで、Explore、Look、またはダッシュボード内でユーザーが指定した期間で変更するメジャーを動的にすることができます。
パターンの概要
このアプローチには、大まかに次の 3 つのコンポーネントがあります。
-
Explore や Look またはダッシュボードのフィルタ専用フィールドとして表示される期間ごとに、
type: dateのテンプレート フィルタを定義します。 -
yesno型のディメンションを作成してテンプレート化されたフィルタに関連付け、ユーザーがフィルタ専用フィールドの値を選択したときに、yesnoディメンションがフィルタの条件を満たすレコードに対して「yes」を返すようにします。 -
value = "yes"の条件でyesnoディメンションを参照するフィルタされたメジャーを作成します。これにより、このメジャーでは、手順 1 で定義されたフィルタで指定された期間条件を満たすレコードのみが集計されます。
このロジックにより、次のような Explore など、異なる期間の値を比較する分析とビジュアリゼーションを作成することができます。
ユーザーは期間 A と期間 B フィルタ内の値を変更でき、注文数 A と注文数 B の値にのみ影響を与えます。注文数 A と注文数 B は、期間フィルタの期間条件を参照するフィルタを含むメジャーです。期間 Aは注文数 A の値に影響を与え、期間 B は注文数 B の値に影響を与えます。
次のセクションでは、この例の LookML を示します。
LookML
次の LookML では、raw 期間を持つ created_raw という名前のディメンション グループがあるとします。
dimension_group: created {
type: time
timeframes: [
raw,
time,
date,
]
sql: ${TABLE}.created_at ;;
}
カウント数を比較する LookML のメジャー - 注文数 A と注文数 B - 2 つの動的期間によってフィルタされる - 期間 A と期間 B - 次のような created_raw に基づきます。
## filter determining time range for all "A" measures
filter: timeframe_a {
type: date_time
}
## flag for "A" measures to only include appropriate time range
dimension: group_a_yesno {
hidden: yes
type: yesno
sql: {% condition timeframe_a %} ${created_raw} {% endcondition %} ;;
}
## filtered measure A
measure: count_a {
type: count
filters: [group_a_yesno: "yes"]
}
## filter determining time range for all "B" measures
filter: timeframe_b {
type: date_time
}
## flag for "B" measures to only include appropriate time range
dimension: group_b_yesno {
hidden: yes
type: yesno
sql: {% condition timeframe_b %} ${created_raw} {% endcondition %} ;;
}
measure: count_b {
type: count
filters: [group_b_yesno: "yes"]
}
このロジックを使用すると、必要なだけ期間比較を作成できます。
動的期間を使用してクエリ全体をフィルタリングする
フィルタされたメジャーでは、全体的なクエリ結果にフィルタ条件が適用されません。指定した期間内にクエリ結果全体を制限するには、次の操作を行います。
-
次の
yesnoディメンションを作成します。 - Explore、Look、ダッシュボードでディメンション値を「yes」でフィルタします。
dimension: is_in_time_a_or_b {
group_label: "Time Comparison Filters"
type: yesno
sql:
{% condition timeframe_a %} ${created_raw} {% endcondition %} OR
{% condition timeframe_b %} ${created_raw} {% endcondition %} ;;
}
これにより、データベースがクエリに必要な量を超えるデータをスキャンするのを防ぐことができ、パフォーマンスの向上とクエリのコスト削減効果が期待できます。