同じ 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 %} ;; }
これにより、データベースでクエリに必要なデータより多くのデータがスキャンされなくなり、パフォーマンスとクエリコストを抑えることができます。