使用状況
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
を使用します。