如需在同一 Look 或信息中心内比较按多个时间范围过滤的指标,您可以使用 被滤除的测量结果。通过过滤的测量,您可以将硬编码的过滤器直接应用于测量,而不是将过滤器应用于整个查询。
如果您想比较的时间范围有限,则可以使用硬编码的时间范围过滤条件定义一些衡量标准(例如“今年”和“去年”),并将它们显示在“探索”“Look”或信息中心内。您还可以更进一步,在过滤的测量中使用 模板化过滤条件,使时间范围比较或随用户在探索、Look 或信息中心中指定的时间范围而变化的衡量指标。
模式概览
概括来讲,此方法涉及三个组件:
-
为每个时间范围定义一个
type: date
模板化过滤条件,这些过滤条件将在“探索”“Look”或信息中心内显示为仅限过滤条件的字段。 -
创建一个
yesno
类型维度以与模板化过滤条件相关联,这样一来,当用户为仅包含过滤条件的字段选择值时,yesno
维度会针对满足过滤条件条件的记录返回“是”。 -
创建引用
yesno
维度且条件为value = "yes"
的过滤测量。这可确保该测量仅汇总符合第 1 步中定义的过滤器中指定的时间范围条件的记录。
借助此逻辑,用户可以创建分析和可视化效果,以比较不同时间范围内的值,例如以下“探索”:
![](https://cloud.google.com/static/looker/docs/images/hc-timeframe-vs-timeframe-analysis-2210.png?hl=zh-cn)
用户可以更改时间范围 A 和时间范围 B 过滤条件中的值,而只会影响订单数 A 和订单数 B 的值。订单数 A 和订单数 B 是采用过滤条件的衡量指标,这些过滤条件会参考时间范围过滤条件中的时间范围条件。时间范围 A 会影响订单数量 A 的值,时间范围 B 会影响订单数量 B。
以下部分提供了此示例的 LookML。
LookML
以下 LookML 假定您有一个维度组,该维度组具有名为 created_raw
的 raw
时间范围:
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"] }
您可以使用此逻辑根据需要创建任意数量的时间范围比较。
使用动态时间范围过滤整个查询
过滤的测量不会将过滤条件应用于整体查询结果。如果要限制指定时间范围内的总体查询结果,您可以:
-
创建以下
yesno
维度 - 在探索、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 %} ;; }
这可以防止数据库扫描的数据量超出查询所需的数据量,并且有助于提高性能和降低查询费用。