bedingter_Filter

Nutzung

Explore: Explore_Name {
conditionally_filter: {
Filter: [field_name: "filter expression", field_name: "filter expression", ...]
außer: [field_name,
}
Hierarchie
conditionally_filter
Standardwert
Keine

Akzeptiert
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.