如需在同一视图或信息中心内比较按多个时间段过滤的指标,您可以使用 过滤后的衡量标准。借助过滤后的测量,您可以直接将硬编码的过滤条件应用于测量,而不是将过滤条件应用于整个查询。
如果您只想比较少数时间范围,可以使用硬编码的时间范围过滤条件(例如“今年”和“去年”)定义一些指标,并在探索、数据洞见或信息中心中显示这些指标。您还可以更进一步,在过滤后的指标中使用 模板过滤条件,以便让时间范围比较变得动态(即指标会随用户在探索、数据分析或信息中心中指定的时间范围而变化)。
模式概览
概括来讲,此方法涉及三个组成部分:
-
为每个时间范围定义一个
type: date模板过滤条件,该过滤条件将在探索、探索分析或信息中心中显示为仅限过滤条件的字段。 -
创建一个
yesno类型的维度以与模板过滤条件相关联,以便当用户为仅限过滤条件的字段选择值时,yesno维度会针对符合过滤条件条件的记录返回“是”。 -
创建一个经过过滤的测量,该测量引用条件为
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"]
}
您可以使用此逻辑创建任意数量的时间范围比较。
使用动态时间范围过滤整个查询
过滤后的测量值不会将过滤条件应用于整个查询结果。如果您想限制指定时间范围内的总查询结果数,可以执行以下操作:
-
创建以下
yesno维度 - 在探索、数据分析或信息中心中,按“是”过滤维度值:
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 %} ;;
}
这样可以防止数据库扫描超出查询所需的数据,并可能有助于提升性能和降低查询费用。