Nutzung
explore: explore_name {
conditionally_filter: {
filters: [field_name: "filter expression", field_name: "filter expression", ...]
unless: [field_name, field_name, ...]
}
}
|
Hierarchie
conditionally_filter |
Standardwert
Keine
Akzeptiert
Eine oder mehrere Filterspezifikationen mit einem Feldnamen und einem Looker-Filterausdruck sowie eine Liste mit einem oder mehreren Feldnamen im Abschnitt unless
|
Definition
Mit dem Parameter conditionally_filter können Sie eine Reihe von Standardfiltern definieren, die Nutzer überschreiben können, wenn sie mindestens einen Filter aus einer zweiten von Ihnen definierten Liste anwenden.
Dieser Parameter wird in der Regel verwendet, um zu verhindern, dass Nutzer versehentlich sehr große Abfragen erstellen, die ggf. zuviele Datenbankressourcen beanspruchen. Sie können einen Nutzer beispielsweise zwingen, seine Anfrage auf die letzte Woche zu beschränken, es sei denn, er hat explizit einen größeren Zeitraum angefordert.
Filter, die in conditionally_filter angewendet werden, werden dem Nutzer angezeigt, nachdem er seine Anfrage ausgeführt hat. Nutzer können zwar den von Ihnen festgelegten Standardwert für value ändern, den Filter jedoch nicht vollständig entfernen, wenn sie nicht mindestens einen der Filter anwenden, die Sie im Unterparameter unless angegeben haben.
Die verwendeten Feldnamen können der Name einer dimension oder measure sein.
Wenn Sie auf eine Dimension oder einen Messwert verweisen möchten, die bzw. der Teil einer verknüpften Ansicht und nicht Teil dieses Explores ist, verwenden Sie view_name.field_name.
Beispiele
Dazu ein Beispiel:
explore: order {
conditionally_filter: {
filters: [id: "123", customer.id: "678,789"]
unless: [date]
}
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
In diesem Fall bezieht sich der Filter id auf das Feld id aus dem Explore mit dem Namen order. Der Filter customer.id bezieht sich auf das Feld id aus der Ansicht customer. Beide Filter werden angewendet, sofern der Nutzer in der Explore-Benutzeroberfläche kein Bestelldatum festlegt. Dieses Beispiel zeigt auch, dass Sie mehrere Filter angeben können.
Für den von Ihnen angegebenen Standardwert können diese Arten von Ausdrücken verwendet werden.
Sie können den Nutzer auch dazu zwingen, einen Bestell-ID-Filter zu verwenden (mit dem Standardwert „123“, den er ändern kann), es sei denn, er wendet einen Bestelldatum-Filter an:
explore: order {
conditionally_filter: {
filters: [id: "123"]
unless: [date]
}
}
Alternativ können Sie den Nutzer zwingen, einen Filter für Bestell-ID zu verwenden (mit dem Standardwert „123“ oder „234“, den er ändern kann), es sei denn, er wendet einen Filter für Bestelldatum oder Bestellzeit an:
explore: order {
conditionally_filter: {
filters: [id: "123,234"]
unless: [date, time]
}
}
Oder Sie zwingen den Nutzer, einen Filter für Bestell-ID (Standardwert „123“) und einen Filter für Kundenstadt (Standardwert „Chicago“) zu verwenden, sofern er keinen Filter für Bestelldatum oder Kundendatum anwendet:
explore: order {
conditionally_filter: {
filters: [id: "123", customer.city: "Chicago"]
unless: [date, customer.date]
}
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Häufige Herausforderungen
Ein Nutzer kann nicht alle Filter entfernen, wenn conditionally_filter verwendet wird
Wenn conditionally_filter verwendet wird, ist es nicht möglich, eine Abfrage ohne jegliche Filter auszuführen. Ein Nutzer muss die von Ihnen angegebenen bedingten Filter oder eigene Filter aus der Liste unless verwenden.
Wenn Sie conditionally_filter mit der Dimension type: time in einer Gruppe verwenden, werden die anderen Dimensionen der Gruppe im Unterparameter unless platziert.
Wenn die field, die Sie in conditionally_filter angeben, eine zeitbasierte Dimension ist, die Teil einer Dimensionsgruppe ist, behandelt Looker alle anderen Dimensionen dieser Gruppe so, als ob sie dem Unterparameter unless für diesen bedingten Filter unterliegen – auch wenn Sie keinen unless-Unterparameter angeben.
Die folgenden beiden LookML-Blöcke werden identisch interpretiert. Hier wird conditionally_filter auf eine zeitbasierte Dimension event_date angewendet, die Teil der Dimensionsgruppe event ist. Es sind keine unless-Bedingungen angegeben, aber Looker behandelt die anderen Dimensionen in der Gruppe event so, als wären sie mit dem Unterparameter unless angegeben worden.
LookML-Block 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-Block 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 ;;
}
}
Looker interpretiert die beiden LookML-Blöcke auf dieselbe Weise, obwohl nur im zweiten LookML-Block der Unterparameter unless explizit auf die anderen Dimensionen der Gruppe event angewendet wird.
Wichtige Punkte
Es gibt eine Methode, um conditionally_filter auf eine Teilmenge von Nutzern anzuwenden.
Wenn Sie einen bedingten Filter für einige Nutzer, aber nicht für andere anwenden möchten, können Sie Modellberechtigungen verwenden. Sie müssen zwei Modelle erstellen: eines, in dem conditionally_filter verwendet wird, und eines, in dem es nicht verwendet wird. Anschließend können Sie den Zugriff auf die entsprechenden Modelle nutzerspezifisch gewähren.
Wenn Sie conditionally_filter ohne unless verwenden möchten, verwenden Sie einfach always_filter.
Wenn Sie Nutzer zwingen möchten, unabhängig davon, was sie tun, eine bestimmte Gruppe von Filtern zu verwenden, ihnen aber erlauben möchten, den Standardwert zu ändern, verwenden Sie stattdessen always_filter.
Wenn Sie Filter verwenden möchten, die überhaupt nicht geändert werden können, sollten Sie sql_always_where in Betracht ziehen.
Wenn Sie möchten, dass ein Explore Filter enthält, die für alle gleich sind, und die Nutzer den Filterwert nicht ändern können, verwenden Sie sql_always_where.
Wenn Sie benutzerspezifische Filter verwenden möchten, die nicht geändert werden können, sollten Sie access_filter in Betracht ziehen.
Wenn Sie möchten, dass ein Explore Filter enthält, die für jeden Nutzer spezifisch sind, aber nicht entfernt oder geändert werden können, verwenden Sie access_filter.