用法
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 参数和模板化过滤条件来动态构建 WHERE 子句,该子句同时适用于派生表和 Looker 生成的主查询:
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 提供输入,而过滤条件 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 搭配使用示例中所述,filter 字段的 sql 参数会将 SQL 直接应用于查询的 WHERE 子句。在本例中,sql 会获取 filter_on_field_to_hide 过滤条件中指定的过滤条件,并将其应用于 ${field_to_hide} 维度。
这样一来,用户可以使用 filter_on_field_to_hide 过滤条件按 field_to_hide 过滤查询,同时 field_to_hide 维度保持隐藏状态。