filter

用途

view: view_name {
  filter: filter_name { ... }
}
階層
filter
デフォルト値
なし

許可
フィルタに名前を付ける Looker 識別子

特別なルール
フィルタ名は、同じ view 内の他のフィルタ、dimensionmeasure と共有できません。

定義

filter パラメータは、フィルタ限定のフィールドとそのフィルタの名前を宣言します。ユーザーは、Explore 時にフィルタ限定のフィールドをフィルタとして追加できますが、結果セットに追加することはできません。これらのフィルタ限定のフィールドは、テンプレート フィルタ(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
  }
}

filtersql パラメータを使用する

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 の使用 の例については、このページの filtersql パラメータを使用する方法をご覧ください。

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 を使用して、問題のディメンションを非表示にします。つまり、ユーザーは Explore フィールド ピッカーからディメンションを選択できません。

      dimension: field_to_hide {
        type: string
        hidden: yes
        sql: ${TABLE}.field_to_hide ;;
      }
    
  2. 次に、field_to_hide ディメンションにリンクする filter フィールドを作成します。

    filter: filter_on_field_to_hide {
      type: string
      sql: {% condition filter_on_field_to_hide %} ${field_to_hide} {% endcondition %} ;;
    }
    

filtersql パラメータを使用する例で説明したように、filter フィールドの sql パラメータは、クエリの WHERE 句に SQL を直接適用します。この場合、sqlfilter_on_field_to_hide フィルタで指定されたフィルタ条件を取得し、${field_to_hide} ディメンションに適用します。

これにより、ユーザーは filter_on_field_to_hide フィルタを使用して field_to_hide でクエリをフィルタできますが、field_to_hide ディメンションは非表示のままになります。