このページでは、指標の一部である
filtersパラメータについて説明します。
filtersは、explore_sourceパラメータのドキュメント ページで説明されているように、ネイティブ派生テーブルの一部としても使用できます。
filtersは、ダッシュボード パラメータのドキュメント ページで説明されているように、ダッシュボードの一部としても使用できます。
filtersは、ダッシュボード要素の一部としても使用できます。使用例については、縦棒グラフの要素のドキュメント ページをご覧ください。
用途
view: view_name {
measure: field_name {
filters: [dimension_name: "filter expression", dimension_name: "filter expression", ... ]
}
}
|
階層
filters |
使用可能なフィールドタイプ
測定
許可
ディメンション名と対応する Looker フィルタ式のセット
|
定義
filters は、メジャー計算に適用されるフィルタ式のオプションのリストです。集計を実行する次のメジャータイプでのみ機能します。
type: counttype: count_distincttype: sumtype: average
filtersの構文は次のとおりです。
filters: [dimension_name_1: "Looker filter expression", dimension_name_2: "Looker filter expression", ...]
有効なフィルタ式を記述する方法の詳細については、Looker のフィルタ表記を参照してください。以下の例で示されているように、Filter式全体を引用符で囲んでください。
また、filters を Liquid パラメータとテンプレート フィルタとともに使用して、ダッシュボードまたは Look でのユーザー入力に基づいて動的に変更できるフィルタ値を持つ動的なフィルタされたメジャーを作成することもできます。このアプローチにより、ユーザーは、グローバル WHERE 句でクエリ全体をフィルタリングすることなく、特定のメジャーにのみ適用されるフィルタ値を選択できます。参考のために、このページで後述する動的にフィルタされた Measure の作成のセクションを参照してください。
例
filters を指標に使用する方法は多数あります。以下の例は、一般的なユースケースのいくつかのソリューションの概要を示しています。
複数のフィールドでのフィルタリング
この例では、メジャーは、過去 7 日間に作成された個別の ID で、無効アカウントのユーザーのものではないものをカウントします。この例は、複数のフィルタをフィールドに追加する方法も示しています。各フィルタ式には、独自の完全な filters パラメータが必要です。
measure: this_week_count {
type: count_distinct
sql: ${TABLE}.id ;;
filters: [created_date: "7 days", user.status: "-disabled"]
# Reference fields from other joined views with view_name.field_name syntax
# Minus sign means "not" in this case, but check notation docs for details
}
yesno ディメンションでフィルタする
別の例として、各行に正規従業員または請負業者のいずれかである個人が含まれるデータについて考えます。yesno 型の is_contractor フィールドがあります。このフィールドには、その人物が請負業者の場合は yes が含まれます。このMeasureは、請負業者の行のみをカウントします。
measure: contractor_count {
type: count
filters: [is_contractor: "yes"]
}
複数のFilter値の追加
次の例では、filters 式に複数の値が含まれています。この Measure は、state フィールドの 4 つの値のいずれかに一致するすべての行をカウントします。
measure: customers_by_state {
type: count
filters: [state: "California, Nevada, Washington, Oregon"]
}
NULL 値のフィルタリング
この例では、Measure は、過去 7 日間に作成された個別の ID で、NULL 以外の値が user.email_address フィールドに含まれているものをカウントします。
measure: this_week_count_with_email {
type: count_distinct
sql: ${TABLE}.id ;;
filters: [created_date: "7 days", user.email_address: "-NULL"]
}
フィールド user.email_address は string 型であるため、"-NULL" 構文が使用されます。詳細については、Looker のフィルタ式のドキュメント ページをご覧ください。
数値Filter条件の追加
この例では、Filter に数値が指定されています。この Measure は、price が 100 を超える注文のみを追加します。
measure: total_amt_large_orders {
type: sum
filters: [orders.price: ">100"]
sql: ${orders.price} ;;
}
AND を使用して条件を組み合わせる
この例では、Measure は AND 演算子を含むフィルタ式を使用して、18 ~ 25 歳のグループのお客様からの注文の合計を計算します。
measure: sales_18_to_25 {
type: sum
filters: [customers.age: ">=18 AND <=25"]
sql: ${orders.price} ;;
}
カンマを使用して条件を組み合わせる
この例では、25 歳未満または 65 歳以上の顧客からの注文の合計を計算するために、, 演算子を含むフィルタ式を使用しています。
measure: sales_less_25_or_greater_65 {
type: sum
filters: [customers.age: "<25, >65"]
sql: ${orders.price} ;;
}
動的にフィルターされたMeasureの作成
この例では、フィルタにより、Look またはダッシュボードのフィルタで、ユーザーが選択したステータスでフィルタされた注文数を表示するオプションがユーザーに提供されます。
まず、ユーザーが値を選択するためのフィルタ専用フィールドを作成します。
filter: status_filter {
type: string
suggest_dimension: status
}
次に、テンプレート化されたフィルタを利用して、前のフィルタ専用フィールドからユーザーの選択を取得する非表示ディメンションを作成します。このディメンションは、フィルタ フィールドで値が選択されるたびに yes を返します。
dimension: status_satisfies_filter {
type: yesno
hidden: yes
sql: {% condition status_filter %} ${status} {% endcondition %} ;;
}
最後に、type: yesno ディメンションでフィルタリングするメジャーを作成します。
measure: count_dynamic_status {
type: count
filters: [status_satisfies_filter: "yes"]
}
ユーザーがフィルタのみのフィールドで値を選択しなかった場合、SQL はデフォルトで 1=1 に設定されます。これは指標値には影響しません。
一般的な課題
type: number のメジャーで filters を使用しない
多くのユーザーが type: number の指標で filters を使用しようとしていますが、これは機能しません。
# Will NOT work
measure: total_food_profit {
type: number
sql: ${total_revenue} - ${total_cost} ;;
filters: [segment: "food"]
}
measure: total_revenue {
type: sum
sql: ${revenue} ;;
}
measure: total_cost {
type: sum
sql: ${cost} ;;
}
代わりに、次のように、type: number のメジャーを構成する個々のメジャーのいずれかに filters パラメータを適用します。
# Will work
measure: total_food_profit {
type: number
sql: ${total_food_revenue} - ${total_food_cost} ;;
}
measure: total_food_revenue {
type: sum
sql: ${revenue} ;;
filters: [segment: "food"]
}
measure: total_food_cost {
type: sum
sql: ${cost} ;;
filters: [segment: "food"]
}