使用模板化过滤条件

用量

视图:view_name {
filter: filter_name { ... }
}
层次结构
filter
默认值


接受
用于为过滤器命名的 Looker 标识符

特殊规则
过滤条件名称不能与同一 view 中的任何其他过滤条件、dimensionmeasure 共用

定义

filter 参数声明仅供过滤条件使用的字段以及该过滤条件的名称。用户在探索时可以将仅包含过滤条件的字段添加为过滤条件,但无法将其添加到结果集中。这些仅供过滤条件的字段可通过模板化过滤条件(高级的 LookML 主题)加以使用。您还可以参阅使用 filter 按隐藏字段进行过滤示例。

过滤条件名称必须:

  • 在所有给定的视图中具有唯一性
  • 由字符 az(不包括大写字母)、09_ 组成
  • 以字母开头

过滤器字段有许多种类型,请参阅维度、过滤器和参数类型文档页面。

示例

以下是使用 filter 参数的一些示例。

创建用户指定的过滤条件

创建一个允许用户指定 order_region 的过滤器:

filter: order_region {
  type: string
}

使用模板化过滤条件定义动态派生表

模板化过滤器和液体参数文档页面中所示,定义派生表以计算用户所指定区域中客户的生命周期支出。此示例使用在上一个示例中创建的 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')

请参阅本页面中的使用 filter 按隐藏字段过滤部分,查看有关如何将 sql 参数与 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 创建用户可过滤的维度,同时还可以阻止用户选择查询中的维度。

  1. 首先,请使用 hidden: yes 隐藏相关维度。这意味着,该维度将不会供用户从“探索”字段选择器中选择。
  dimension: field_to_hide {
  type: string
  hidden: yes
  sql: ${TABLE}.field_to_hide ;;
  }
  1. 现在,创建一个 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 维度保持隐藏状态。