Utilizzo
conditionally_filter: {
filter: [field_name: "filterexpression", field_name: "filterexpression", ...]
a meno che: [field_name,
_field_name
Gerarchia
conditionally_filter |
Valore predefinito
NessunaAccetta
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
.