過濾器

用量

view: view_name {
  filter: filter_name { ... }
}
階層
filter
預設值

接受
用來命名篩選器的 Looker ID

特別規則
篩選條件名稱不得與同一 view 內的任何其他篩選條件、dimensionmeasure 共用

定義

filter 參數會宣告篩選器限定欄位和該篩選器的名稱。使用者在探索時可以將篩選器限定欄位新增為篩選器,但無法將這些欄位新增至結果集。這些僅限篩選的欄位可透過範本化篩選器發揮作用,這是進階的 LookML 主題。您也可以參閱「使用 filter 依隱藏欄位篩選」範例。

篩選器名稱必須符合下列規定:

  • 在任何檢視中不得重複
  • 由字元 az (不含大寫字母)、09_ 組成
  • 以英文字母開頭

篩選器欄位類型有很多種,詳情請參閱「維度、篩選器和參數類型」說明文件頁面。

filter 的子參數

如需 LookML 欄位可用的子參數清單,請參閱「欄位參數」參考頁面。

範例

以下列舉幾個使用 filter 參數的範例。

建立使用者指定的篩選器

建立篩選器,讓使用者指定 order_region

filter: order_region {
  type: string
}

使用範本化篩選器定義動態衍生資料表

如「範本化篩選器和 Liquid 參數」說明文件頁面所示,定義衍生資料表,計算使用者指定區域的顧客終生消費金額。這個範例會使用上一個範例中建立的 filter,做為範本篩選器的一部分。filter 輸入內容會與 Liquid 變數搭配使用於 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
  }
}

搭配 filter 使用 sql 參數

您也可以搭配 filter 使用 sql 參數,只要篩選器有值,就會套用至 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 建立可供使用者篩選的維度,同時禁止使用者在查詢中選取該維度。

  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 %} ;;
    }
    

如「搭配 filter 使用 sql 參數」範例所述,filter 欄位的 sql 參數會直接將 SQL 套用至查詢的 WHERE 子句。在本例中,sql 會採用 filter_on_field_to_hide 篩選器中指定的篩選條件,並套用至 ${field_to_hide} 維度。

這樣一來,使用者就能透過 filter_on_field_to_hide 篩選器篩選查詢,但 field_to_hide 維度仍會保持隱藏狀態。field_to_hide