本页引用了衡量中的
filters
参数。
filters
也可以用作原生派生表的一部分(如explore_source
参数文档页面中所述)。
filters
也可以用作信息中心的一部分,如信息中心参数文档页面中所述。
filters
也可以用作信息中心元素的一部分。如需了解使用情形的示例,请参阅柱形图元素文档页面。
用量
measure: field_name {
filters: [dimension_name: "filter 表达式", dimension_name: "filter 表达式", ... ]
}
}
层次结构
filters |
可能的字段类型
衡量接受
一组维度名称和相应的 Looker 过滤条件表达式 |
定义
filters
是应用于测量结果计算的可选过滤条件表达式列表。它只能与以下执行汇总的测量类型一起使用:
type: count
type: count_distinct
type: sum
type: average
过滤器的语法如下:
filters: [dimension_name_1: "Looker filter expression", dimension_name_2: "Looker filter expression", ...]
如需详细了解如何编写有效的过滤条件表达式,请参阅 Looker 的过滤条件表示法。将整个过滤条件表达式用引号括起来,如以下示例所示。
您还可以将 filters
与液体参数和模板化过滤条件搭配使用,以创建具有可基于信息中心或 Look 中的用户输入动态变化的过滤条件值的动态过滤措施。通过这种方法,用户可以选择仅适用于特定测量值的过滤条件值,而无需过滤全局 WHERE
子句中的整个查询。有关参考信息,请参阅本页后面的创建动态过滤的测量部分。
示例
您可以通过多种方式使用 filters
进行衡量。以下示例概述了一些适用于常见用例的解决方案:
过滤多个字段
在此示例中,衡量会统计过去 7 天创建且并非帐号被停用的用户创建的不同 ID。此示例还说明了如何为字段添加多个过滤条件。每个过滤条件表达式都需要有自己的完整 filters
参数:
measure: this_week_count {
type: count_distinct
sql: ${TABLE}.id ;;
filters: [created_date: "7 days", user.status: "-disabled"]
# Reference fields from other joined views with view_name.field_name syntax
# Minus sign means "not" in this case, but check notation docs for details
}
按 yesno
维度过滤
再举一个例子,假设数据中每个人各占一行,可以是正式员工,也可以是承包商。有一个类型为 yesno
的字段 is_contractor
,如果该用户是承包商,则该字段包含 yes
。此指标仅会对承包商进行统计:
measure: contractor_count {
type: count
filters: [is_contractor: "yes"]
}
添加多个过滤条件值
在下一个示例中,filters
表达式包含多个值。测量会统计与 state
字段中的四个值中的任意一个匹配的所有行:
measure: customers_by_state {
type: count
filters: [state: "California, Nevada, Washington, Oregon"]
}
添加数字过滤条件
在此示例中,为过滤器指定了数值。该衡量规则只会添加 price
大于 100 的订单:
measure: total_amt_large_orders {
type: sum
filters: [orders.price: ">100"]
sql: ${orders.price} ;;
}
使用高级过滤条件语法
在此示例中,为过滤器指定了一系列数值。该指标将统计 18-25 岁年龄段客户的订单总数:
measure: sales_18_to_25 {
type: sum
filters: [customers.age: ">=18 AND <=25"]
sql: ${orders.price} ;;
}
创建动态过滤的衡量
在此示例中,过滤器让用户可以在“查看”或“信息中心”过滤器中查看订单计数(按用户选择的状态过滤):
首先,创建一个仅限过滤器的字段,以便用户选择值:
filter: status_filter {
type: string
suggest_dimension: status
}
接下来,创建一个隐藏维度,利用模板化过滤条件来捕获用户在上一个仅过滤字段中所做的选择。只要在过滤条件字段中选择了值,此维度就会返回 yes:
dimension: status_satisfies_filter {
type: yesno
hidden: yes
sql: {% condition status_filter %} ${status} {% endcondition %} ;;
}
最后,创建一个根据 type: yesno
维度进行过滤的测量结果:
measure: count_dynamic_status {
type: count
filters: [status_satisfies_filter: "yes"]
}
如果用户选择不为过滤字段选择值,则 SQL 将默认采用 1=1,这不会影响测量值。
常见挑战
请勿将 filters
与 type: number
搭配使用
许多用户尝试使用 filters
来测量 type: number
,但这种方法无效:
# Will NOT work
measure: total_food_profit {
type: number
sql: ${total_revenue} - ${total_cost} ;;
filters: [segment: "food"]
}
measure: total_revenue {
type: sum
sql: ${revenue} ;;
}
measure: total_cost {
type: sum
sql: ${cost} ;;
}
而是应将 filters
参数应用于构成 type: number
的指标中的任何单个测量值,如下所示:
# Will work
measure: total_food_profit {
type: number
sql: ${total_food_revenue} - ${total_food_cost} ;;
}
measure: total_food_revenue {
type: sum
sql: ${revenue} ;;
filters: [segment: "food"]
}
measure: total_food_cost {
type: sum
sql: ${cost} ;;
filters: [segment: "food"]
}