使用模板过滤条件进行的时间段分析与时间段分析

如需在同一视图或信息中心内比较按多个时间段过滤的指标,您可以使用 过滤后的衡量标准。借助过滤后的测量,您可以直接将硬编码的过滤条件应用于测量,而不是将过滤条件应用于整个查询。

如果您只想比较少数时间范围,可以使用硬编码的时间范围过滤条件(例如“今年”和“去年”)定义一些指标,并在探索、数据洞见或信息中心中显示这些指标。您还可以更进一步,在过滤后的指标中使用 模板过滤条件,以便让时间范围比较变得动态(即指标会随用户在探索数据分析信息中心中指定的时间范围而变化)。

模式概览

概括来讲,此方法涉及三个组成部分:

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

借助此逻辑,用户可以创建用于比较不同时间段内值的分析和可视化图表,例如以下探索:

用户可以更改时间范围 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 ;;
  }
  

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

  ## 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. 在探索、数据分析或信息中心中,按“是”过滤维度值:

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

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