filtro_condizionale

Utilizzo

Explore: Explore_name {
conditionally_filter: {
filter: [field_name: "filterexpression", field_name: "filterexpression", ...]
a meno che: [field_name,
_field_name
Gerarchia
conditionally_filter
Valore predefinito
Nessuna

Accetta
Una o più specifiche di filtro per un nome di campo e un'espressione di filtro di Looker, oltre a un elenco di uno o più nomi di campo nella sezione unless

Definizione

Il parametro conditionally_filter consente di definire un insieme di filtri predefiniti che gli utenti possono sostituire se applicano almeno un filtro di un secondo elenco definito da te.

Questo parametro viene in genere utilizzato per impedire agli utenti di creare accidentalmente query di dimensioni molto grandi che potrebbero essere troppo costose da eseguire nel tuo database. Ad esempio, puoi forzare un utente a limitare la sua query alla settimana precedente, a meno che non abbia richiesto esplicitamente un intervallo di date più ampio.

I filtri applicati in conditionally_filter vengono visualizzati dall'utente dopo che ha eseguito la query. Anche se gli utenti possono modificare il value predefinito che imposti, non possono rimuovere completamente il filtro a meno che non applichino almeno uno dei filtri specificati nel sottoparametro unless.

I nomi dei campi che utilizzi possono essere i nomi di dimension o measure.

Per fare riferimento a una dimensione o a una misurazione che fa parte di una vista unita anziché di questa esplorazione, utilizza view_name.field_name.

Esempi

Considera l'esempio seguente:

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

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

In questo caso, il filtro id si riferisce al campo id dell'esplorazione chiamata order. Il filtro customer.id si riferisce al campo id dalla vista chiamata customer. Entrambi i filtri verranno applicati, a meno che l'utente non imposti una data dell'ordine nell'interfaccia utente di Esplora. Questo esempio mostra anche che è possibile richiedere più filtri.

Il valore predefinito specificato può accettare questi tipi di espressioni.

Puoi anche obbligare l'utente a utilizzare un filtro ID ordine (con valore predefinito "123" modificabile) a meno che non applichi un filtro Data ordine:

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

In alternativa, forza l'utente a utilizzare un filtro ID ordine (con valore predefinito "123" o "234" modificabile), a meno che non applichi un filtro Data ordine o Ora ordine:

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

Oppure obbliga l'utente a utilizzare un filtro ID ordine (valore predefinito "123") e un filtro Città cliente (con l'impostazione predefinita "Chicago"), a meno che non applichi un filtro Data ordine o Data cliente:

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

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

Sfide comuni

Un utente non può rimuovere tutti i filtri quando viene utilizzato conditionally_filter

Non è possibile eseguire una query senza nessun filtro quando viene utilizzato conditionally_filter. Un utente deve utilizzare i filtri condizionali specificati da te o i propri filtri dall'elenco unless.

conditionally_filter con una dimensione type: time in un gruppo inserisce le altre dimensioni del gruppo nel sottoparametro unless

Se il field specificato all'interno di conditionally_filter è una dimensione basata sul tempo che fa parte di un gruppo di dimensioni, Looker considera tutte le altre dimensioni del gruppo come se fossero soggette a un sottoparametro unless per quel filtro condizionale, anche se non includi un sottoparametro unless.

I due blocchi seguenti di LookML vengono interpretati in modo identico. In questo caso, conditionally_filter viene applicato a una dimensione basata sul tempo event_date che fa parte del gruppo di dimensioni event. Non è specificata nessuna condizione unless, ma Looker tratterà le altre dimensioni del gruppo event come se fossero state specificate con il sottoparametro unless.

Blocco 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 ;;
  }
}

Blocco 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 ;;
  }
}

Looker interpreta i due blocchi LookML nello stesso modo, anche se solo il secondo blocco LookML applica esplicitamente il sottoparametro unless alle altre dimensioni del gruppo event.

Aspetti da tenere presenti

Esiste un metodo per applicare conditionally_filter a un sottoinsieme di utenti

Per applicare un filtro condizionale ad alcuni utenti ma non ad altri, puoi utilizzare le autorizzazioni del modello. Devi creare due modelli: uno in cui viene utilizzato conditionally_filter e uno in cui non lo è. Successivamente, potrai concedere l'accesso ai modelli appropriati in base agli utenti.

Se vuoi utilizzare conditionally_filter senza unless, utilizza always_filter

Per fare in modo che gli utenti utilizzino un insieme specifico di filtri, ma devono modificare il valore predefinito, utilizza always_filter.

Se non vuoi modificare i filtri, prendi in considerazione sql_always_where

Se vuoi che un filtro Esplora abbia filtri uguali per tutti e non consenti agli utenti di modificare il valore del filtro, utilizza sql_always_where.

Se non vuoi modificare i filtri specifici degli utenti, considera access_filter

Se vuoi che un filtro Esplora abbia filtri specifici per ogni utente, ma che non può essere rimosso o modificato, utilizza access_filter.