用法
view: view_name {
filter: filter_name { ... }
}
|
层次结构
filter |
默认值
无
接受
用于命名过滤条件的 Looker 标识符
特殊规则
过滤条件名称不得与同一 view
中的任何其他过滤条件、dimension 或 measure 共享 |
定义
filter 参数用于声明仅限过滤条件的字段以及该过滤条件的名称。用户在探索时可以将仅限过滤条件的字段添加为过滤条件,但无法将其添加到结果集中。这些仅限过滤条件的字段通过使用 模板化过滤条件 变得有用,而模板化过滤条件是 LookML 的高级主题。您还可以参阅使用 filter 按隐藏字段进行过滤的示例。
过滤条件名称必须满足以下条件:
- 在任何给定视图中都是唯一的
- 由字符
a到z(无大写字母)、0到9或_组成 - 以字母开头
过滤条件字段有很多类型,如维度、过滤条件和参数类型文档页面中所述。
filter 的子参数
如需查看 LookML 字段可用的子参数列表,请参阅字段参数参考页面。
示例
以下是一些使用 filter 参数的示例。
创建用户指定的过滤条件
创建一个过滤条件,让用户指定 order_region:
filter: order_region {
type: string
}
使用模板化过滤条件定义动态派生表
如 模板化过滤条件和 Liquid 参数 文档页面所示,定义一个 派生表,以计算用户指定区域中客户的终生支出。此示例使用上一个示例中创建的 filter 作为模板化过滤条件的一部分。filter 输入在 WHERE 子句中与 Liquid 变量一起使用:
view: customer_facts {
derived_table: {
sql:
SELECT
customer_id,
SUM(sale_price) AS lifetime_spend
FROM
order
WHERE
{% condition order_region %} order.region {% endcondition %}
GROUP BY 1
;;
}
filter: order_region {
type: string
}
}
将 sql 参数与 filter 结合使用
您还可以将 sql 参数与 filter 结合使用,每当过滤条件有值时,该参数都会应用于 SQL WHERE 子句。这样,您就可以根据用户过滤条件输入使用动态 WHERE 子句。
以下示例创建了一个过滤条件,该过滤条件仅允许使用数据集中存在的用户名:
filter: user_enabled {
type: string
suggest_dimension: user_name
sql: EXISTS (SELECT user_id FROM users WHERE {% condition %} user_name {% endcondition %} and state = 'enabled') ;;
}
在前面的示例中,如果数据集中的完整用户名列表为“Zach”“Erin”和“Brett”,则过滤条件会生成以下 WHERE 子句:
WHERE EXISTS (SELECT user_id FROM users WHERE user_name in ('Zach', 'Erin', 'Brett') and state = 'enabled')
如需查看如何将 sql 参数与 filter 结合使用的示例,请参阅本页面的 使用 filter 按隐藏字段进行过滤 部分。
使用 filter 定义动态派生表和用户定义的过滤条件
使用之前定义具有动态区域值的派生表的示例,您可以将sql参数与模板化过滤条件结合使用,以动态构建适用于派生表和 Looker 生成的主查询的WHERE子句:
view: customer_facts {
derived_table: {
sql:
SELECT
customer_id,
SUM(sale_price) AS lifetime_spend
FROM
order
WHERE
{% condition order_region %} order.region {% endcondition %}
GROUP BY 1
;;
}
filter: order_region {
type: string
sql: {% condition order_region %} ${region} {% endcondition %} ;;
}
dimension: region {
type: string
sql: ${TABLE}.region ;;
}
在前面的示例中,用户向过滤条件 order_region 提供输入,而该过滤条件又向 region 维度提供值。然后,region 维度在派生表 SQL 中提供 WHERE 子句的值,并且由于 filter 定义中的 sql 参数,该维度还在 Looker 生成的查询中提供 WHERE 子句的值。
使用 filter 按隐藏字段进行过滤
您可以使用 filter 创建一个维度,用户可以根据该维度进行过滤,同时还可以阻止用户在查询中选择该维度。
首先,使用
hidden: yes隐藏相关维度。这意味着用户无法从探索字段选择器中选择该维度。dimension: field_to_hide { type: string hidden: yes sql: ${TABLE}.field_to_hide ;; }现在,创建一个
filter字段以链接到field_to_hide维度。filter: filter_on_field_to_hide { type: string sql: {% condition filter_on_field_to_hide %} ${field_to_hide} {% endcondition %} ;; }
如将 sql 参数与 filter 结合使用示例中所述,sql 字段的 filter 参数会将 SQL 直接应用于查询的 WHERE 子句。在本例中,sql 会采用 filter_on_field_to_hide 过滤条件中指定的过滤条件,并将其应用于 ${field_to_hide} 维度。
这样,用户就可以使用 filter_on_field_to_hide 过滤条件按 field_to_hide 过滤查询,而 field_to_hide 维度仍处于隐藏状态。