过滤条件

用法

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

接受
用于命名过滤条件的 Looker 标识符

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

定义

filter 参数用于声明仅限过滤条件的字段以及相应过滤条件的名称。用户可以在探索时将仅限过滤条件的字段添加为过滤条件,但无法将其添加到结果集中。这些仅限过滤条件的字段可通过模板化过滤条件(一种高级 LookML 主题)发挥作用。您还可以参考使用 filter 按隐藏字段过滤示例。

过滤条件名称必须:

  • 在任何给定视图中都是唯一的
  • 包含字符 az(无大写字母)、09_
  • 以字母开头

过滤条件字段有很多类型,如维度、过滤条件和参数类型文档页面中所述。

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 创建一个可供用户过滤的维度,同时防止用户在查询中选择该维度。

  1. 首先,使用 hidden: yes 隐藏相关维度。这意味着,用户无法从探索字段选择器中选择相应维度。

      dimension: field_to_hide {
        type: string
        hidden: yes
        sql: ${TABLE}.field_to_hide ;;
      }
    
  2. 现在,创建一个 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 维度保持隐藏状态。