conditionally_filter

使用状況

Explore: explore_name {
conditionally_filter: [
filters: [field_name: "filter expression", field_name: "filter expression", ...]
例外: [field_name,field_name,field_name,field_name,field_name
階層
conditionally_filter
デフォルト値
なし

許可
フィールド名と Looker のフィルタ式の 1 つ以上のフィルタ指定に加えて、unless セクション内の 1 つ以上のフィールド名のリスト。

定義

conditionally_filter パラメータを使用すると、定義したデフォルトのフィルタのセットを定義できます。このフィルタは、定義した 2 つ目のリストから少なくとも 1 つのフィルタを適用する場合に、ユーザーがオーバーライドできます。

このパラメータは通常、ユーザーがデータベースで実行するにはコストがかかりすぎる非常に大きなクエリを誤って作成することを防止するために使用されます。たとえば、もっと長い期間を明示的に求めない限り、ユーザーに前週に限定してクエリを実行させることができます。

conditionally_filter で適用されているフィルタは、ユーザーがクエリを実行した後に表示されます。管理者が設定したデフォルトの value は変更できますが、ユーザーが unless サブパラメータで指定したフィルタを少なくとも 1 つ適用しない限り、このフィルタを完全に削除することはできません。

使用するフィールド名には、dimension または measure の名前を指定できます。

この Explore の一部ではなく、結合されたビューの一部であるディメンションまたはメジャーを参照するには、view_name.field_name を使用します。

次に例を示します。

explore: order {
  conditionally_filter: {
    filters: [id: "123", customer.id: "678,789"]
    unless: [date]
  }

  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

この場合、id フィルタは order という Explore の id フィールドを参照します。customer.id フィルタは、customer というビューの id フィールドを参照します。ユーザーが Explore UI で注文日を設定しない限り、両方のフィルタが適用されます。また、この例は、複数のフィルタが必要となる場合があることも示しています。

指定したデフォルト値では、これらの種類の式を使用できます。

[注文日] フィルタを適用していない限り、ユーザーに [注文 ID] フィルタ(デフォルト値の「123」で変更可能)を使用するよう強制することもできます。

explore: order {
  conditionally_filter: {
    filters: [id: "123"]
    unless: [date]
  }
}

または、[注文 ID] フィルタまたは [注文日時] フィルタを適用していない限り、ユーザーに [注文 ID] フィルタ(デフォルト値の「123」または「234」を変更可能)を使用するよう強制します。

explore: order {
  conditionally_filter: {
    filters: [id: "123,234"]
    unless: [date, time]
  }
}

または、[注文 ID] フィルタ(デフォルト値: 123)と [お客様の市区町村] フィルタ(デフォルトは [シカゴ])を使用するようユーザーに強制します。ただし、[注文日] または [顧客の日付] のフィルタを適用した場合は除きます。

explore: order {
  conditionally_filter: {
    filters: [id: "123", customer.city: "Chicago"]
    unless: [date, customer.date]
  }

  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

一般的な課題

conditionally_filter を使用している場合、ユーザーはすべてのフィルタを削除できません

conditionally_filter を使用している場合、フィルタなしでクエリを実行することはできません。ユーザーは、指定した条件付きフィルタ、または unless リストの独自のフィルタを使用する必要があります。

conditionally_filter(グループのディメンションが type: time の場合)は、グループの他のディメンションを unless サブパラメータに配置します。

conditionally_filter 内で指定する field が、ディメンション グループの一部である時間ベースのディメンションである場合、Looker は、そのグループの他のディメンションすべてを、その条件フィルタに対して unless サブパラメータが適用されたものとして扱います(unless サブパラメータが含まれていない場合)。

LookML の次の 2 つのブロックは、まったく同じ解釈です。ここで、conditionally_filter は、event ディメンション グループの一部である時間ベースのディメンション event_date に適用されます。unless 条件は指定されていませんが、Looker は、event グループの他のディメンションが unless サブパラメータで指定された場合と同様に扱われます。

LookML ブロック 1:

explore: logs {
  # Make sure there is always a filter on event_date, event_week, event_month or event_year
  # Default to the last complete day of data
  conditionally_filter: {
    filters: [logs.event_date: "1 days ago for 1 day"]
  }

view: logs {
  # Combine the partition date filters and the time filters into a single field group.
  dimension_group: event {
    type: time
    timeframes: [date,week,month,year]
    sql: _PARTITIONTIME ;;
  }
}

LookML ブロック 2:

explore: logs {
  # Make sure there is always a filter on event_date, event_week, event_month or event_year
  # Default to the last complete day of data
  conditionally_filter: {
    filters: [logs.event_date: "1 days ago for 1 day"]
    unless: [event_week, event_month, event_year]
  }

view: logs {
  # Combine the partition date filters and the time filters into a single field group.
  dimension_group: event {
    type: time
    timeframes: [date,week,month,year]
    sql: _PARTITIONTIME ;;
  }
}

2 つ目の LookML ブロックのみが event グループの他のディメンションに unless サブパラメータを明示的に適用する場合でも、Looker は 2 つの LookML ブロックを同じ方法で解釈します。

知っておくべきこと

conditionally_filter をユーザーのサブセットに適用する方法がある

一部のユーザーにのみ条件付きフィルタを適用する場合は、一部のユーザーにのみフィルタを適用します。モデルの権限を使用できます。2 つのモデルを作成する必要があります。1 つは conditionally_filter を使用し、もう 1 つは使用しないモデルです。その後、ユーザー固有のベースで適切なモデルにアクセス権を付与できます。

unless を使用せずに conditionally_filter を使用する場合は、代わりに always_filter を使用してください。

ユーザーに特定のフィルタセットの使用を強制しても、デフォルト値を変更できるようにするには、代わりに always_filter を使用します。

まったく変更できないフィルタが必要な場合は、sql_always_where を検討してください。

Explore にすべてのユーザーに対して同じフィルタを設定し、フィルタ値の変更をユーザーに許可しない場合は、sql_always_where を使用します。

変更できないユーザー固有のフィルタが必要な場合は、access_filter を検討してください。

各ユーザーに固有の(ただし削除や変更はできない)フィルタを Explore で使用するには、access_filter を使用します。