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