Nutzung
conditionally_filter: {
Filter: [field_name: "filter expression", field_name: "filter expression", ...]
außer: [field_name,
}
Hierarchie
conditionally_filter |
Standardwert
KeineAkzeptiert
Eine oder mehrere Filterspezifikationen für einen Feldnamen und einen 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 von Ihnen definierten Liste anwenden.
Dieser Parameter wird normalerweise verwendet, um zu verhindern, dass Nutzer versehentlich sehr große Abfragen erstellen, die für die Ausführung in Ihrer Datenbank möglicherweise zu teuer sind. So kann es z. B. passieren, dass ein Nutzer seine Anfrage auf die vorherige Woche beschränkt, wenn er nicht ausdrücklich einen längeren Zeitraum angefordert hat.
Filter, die in conditionally_filter
angewendet werden, werden dem Nutzer angezeigt, nachdem er seine Abfrage ausgeführt hat. Nutzer können zwar den standardmäßigen value
ändern, aber sie können den Filter erst vollständig entfernen, wenn sie mindestens einen der Filter anwenden, die Sie im Unterparameter unless
angeben.
Die von Ihnen verwendeten Feldnamen können die Namen von 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 eines Teils von „Erkunden“ 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 Tab „Entdecken“ 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 Benutzeroberfläche von „Erkunden“ kein Bestelldatum festlegt. Dieses Beispiel zeigt auch, dass Sie mehrere Filter anfordern können.
Für den Standardwert, den Sie angeben, sind diese Ausdruckstypen zulässig.
Sie können auch erzwingen, dass der Nutzer einen Bestell-ID-Filter mit dem Standardwert „123“ verwendet, den er ändern kann, sofern er keinen Filter für Bestelldatum anwendet:
explore: order {
conditionally_filter: {
filters: [id: "123"]
unless: [date]
}
}
Alternativ können Sie den Nutzer dazu zwingen, einen Bestell-ID-Filter mit dem Standardwert „123“ oder „234“ zu verwenden, den er nur ändern kann, wenn er keinen Filter für Bestelldatum oder Bestellzeit anwendet:
explore: order {
conditionally_filter: {
filters: [id: "123,234"]
unless: [date, time]
}
}
Oder zwingen Sie den Nutzer, einen Filter für die Bestell-ID (Standardwert „123“) und einen Filter für Kundenstadt (Standardeinstellung „Chicago“) zu verwenden, es sei denn, er wendet einen Filter für Bestelldatum oder Kundendatum an:
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
Es gibt keine Möglichkeit, eine Abfrage ohne keine Filter auszuführen, wenn conditionally_filter
verwendet wird. Ein Nutzer muss die von Ihnen angegebenen bedingten Filter oder seine eigenen Filter aus der Liste unless
verwenden.
conditionally_filter
mit der Dimension type: time
in einer Gruppe fügt die anderen Dimensionen der Gruppe in den unless
Unterparameter ein
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 einem unless
-Unterparameter für diesen bedingten Filter unterliegen – auch wenn Sie keinen unless
-Unterparameter einschließen.
Die beiden folgenden Blöcke von LookML werden gleich interpretiert. Hier wird conditionally_filter
auf eine zeitbasierte Dimension event_date
angewendet, die Teil der Dimensionsgruppe event
ist. Es sind keine unless
-Bedingungen angegeben. Looker behandelt die anderen Dimensionen in der Gruppe event
jedoch 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 der zweite LookML-Block den Unterparameter unless
explizit auf die anderen Dimensionen der Gruppe event
anwendet.
Wichtige Informationen
Es gibt eine Methode, um conditionally_filter
auf eine Untergruppe von Nutzern anzuwenden
Sie können Modellberechtigungen verwenden, um einen bedingten Filter auf bestimmte Nutzer anzuwenden. Sie müssen zwei Modelle erstellen: eines, in dem conditionally_filter
verwendet wird, und eines, in dem es nicht verwendet wird. Sie können dann nutzerspezifisch Zugriff auf die richtigen Modelle gewähren.
Wenn Sie conditionally_filter
ohne unless
verwenden möchten, verwenden Sie stattdessen always_filter
Wenn Sie erzwingen möchten, dass Nutzer eine bestimmte Reihe von Filtern verwenden, was auch immer sie tun, aber sie den Standardwert ändern sollen, verwenden Sie stattdessen always_filter
.
Wenn Sie Filter benötigen, die sich überhaupt nicht ändern lassen, sollten Sie sql_always_where
in Betracht ziehen
Wenn Sie möchten, dass Filter für einen Filter für alle Nutzer gleich sind und Sie es nicht zulassen, dass Nutzer den Filterwert ändern, verwenden Sie sql_always_where
.
Wenn Sie benutzerdefinierte Filter verwenden möchten, die nicht geändert werden können, sollten Sie access_filter
in Betracht ziehen.
Wenn Sie möchten, dass ein Filter für jeden Nutzer spezifisch ist, aber nicht entfernt oder geändert werden kann, verwenden Sie access_filter
.