使用模板化过滤器进行时间范围与时间范围分析

如需在同一 Look 或信息中心内比较按多个时间范围过滤的指标,您可以使用 被滤除的测量结果。通过过滤的测量,您可以将硬编码的过滤器直接应用于测量,而不是将过滤器应用于整个查询。

如果您想比较的时间范围有限,则可以使用硬编码的时间范围过滤条件定义一些衡量标准(例如“今年”和“去年”),并将它们显示在“探索”“Look”或信息中心内。您还可以更进一步,在过滤的测量中使用 模板化过滤条件,使时间范围比较或随用户在探索Look信息中心中指定的时间范围而变化的衡量指标。

模式概览

概括来讲,此方法涉及三个组件:

  1. 为每个时间范围定义一个 type: date 模板化过滤条件,这些过滤条件将在“探索”“Look”或信息中心内显示为仅限过滤条件的字段
  2. 创建一个 yesno 类型维度以与模板化过滤条件相关联,这样一来,当用户为仅包含过滤条件的字段选择值时,yesno 维度会针对满足过滤条件条件的记录返回“是”。
  3. 创建引用 yesno 维度且条件为 value = "yes" 的过滤测量。这可确保该测量仅汇总符合第 1 步中定义的过滤器中指定的时间范围条件的记录。

借助此逻辑,用户可以创建分析和可视化效果,以比较不同时间范围内的值,例如以下“探索”:

用户可以更改时间范围 A时间范围 B 过滤条件中的值,而只会影响订单数 A订单数 B 的值。订单数 A订单数 B 是采用过滤条件的衡量指标,这些过滤条件会参考时间范围过滤条件中的时间范围条件。时间范围 A 会影响订单数量 A 的值,时间范围 B 会影响订单数量 B。

以下部分提供了此示例的 LookML。

LookML

以下 LookML 假定您有一个维度组,该维度组具有名为 created_rawraw 时间范围:

  dimension_group: created {
    type: time
    timeframes: [
      raw,
      time,
      date,
    ]
    sql: ${TABLE}.created_at ;;
  }
  

用于比较计数衡量的 LookML 基于 created_raw,按两个动态时间范围(时间范围 A 和时间范围 B)过滤,即“订单数 A”和“订单数 B”,如下所示:

  ## 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"] }

您可以使用此逻辑根据需要创建任意数量的时间范围比较。

使用动态时间范围过滤整个查询

过滤的测量不会将过滤条件应用于整体查询结果。如果要限制指定时间范围内的总体查询结果,您可以:

  1. 创建以下 yesno 维度
  2. 在探索、Look 或信息中心内按“是”过滤维度值:

  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 %} ;;
  }

这可以防止数据库扫描的数据量超出查询所需的数据量,并且有助于提高性能和降低查询费用。