Utilizzo
explore: explore_name {
conditionally_filter: {
filters: [field_name: "filter expression", field_name: "filter expression", ...]
unless: [field_name, field_name, ...]
}
}
|
Gerarchia
conditionally_filter |
Valore predefinito
Nessuno
Accetta
Una o più specifiche di filtro di un nome campo e un'espressione di filtro di Looker, oltre a un elenco di uno o più nomi campo nella sezione unless
|
Definizione
Il parametro conditionally_filter consente di definire un insieme di filtri predefiniti che gli utenti possono ignorare se applicano almeno un filtro da un secondo elenco che definisci.
Questo parametro viene in genere utilizzato per impedire agli utenti di creare accidentalmente query molto grandi che potrebbero essere troppo costose da eseguire sul tuo database. Ad esempio, potresti forzare un utente a limitare la 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 l'esecuzione della query. Sebbene gli utenti possano modificare il valore predefinito di value che hai impostato, non possono rimuovere completamente il filtro a meno che non applichino almeno uno dei filtri specificati nel parametro secondario unless.
I nomi dei campi che utilizzi possono essere il nome di un dimension o di un measure.
Per fare riferimento a una dimensione o a una misura che fa parte di una visualizzazione 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 denominato order. Il filtro customer.id fa riferimento al campo id della visualizzazione denominata 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 puoi richiedere più filtri.
Il valore predefinito che specifichi può accettare questi tipi di espressioni.
Puoi anche forzare l'utente a utilizzare un filtro ID ordine (con un valore predefinito di "123" che può modificare) 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 un valore predefinito di "123" o "234" che può modificare) a meno che non applichi un filtro Data ordine o Ora ordine:
explore: order {
conditionally_filter: {
filters: [id: "123,234"]
unless: [date, time]
}
}
In alternativa, forza l'utente a utilizzare un filtro ID ordine (valore predefinito "123") e un filtro Città cliente (con valore predefinito "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 alcun filtro quando viene utilizzato conditionally_filter. Un utente deve utilizzare i filtri condizionali specificati o i propri filtri dall'elenco unless.
conditionally_filter con una dimensione di type: time in un gruppo inserisce le altre dimensioni del gruppo nel sottoparametro unless
Se il field specificato in conditionally_filter è una dimensione basata sul tempo che fa parte di un gruppo di dimensioni, Looker tratterà tutte le altre dimensioni del gruppo come se fossero soggette a un parametro secondario unless per quel filtro condizionale, anche se non includi un parametro secondario unless.
I due blocchi di LookML seguenti 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 sono specificate condizioni unless, ma Looker tratterà le altre dimensioni del gruppo event come se fossero state specificate con il parametro secondario 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 2 di LookML:
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 allo stesso modo, anche se solo il secondo applica esplicitamente il parametro secondario unless alle altre dimensioni del gruppo event.
Cose da sapere
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 viene utilizzato. Puoi quindi concedere l'accesso ai modelli appropriati in base all'utente.
Se vuoi utilizzare conditionally_filter senza unless, usa always_filter
Per forzare gli utenti a utilizzare un insieme specifico di filtri, ma consentire loro di modificare il valore predefinito, utilizza always_filter.
Se vuoi filtri che non possono essere modificati, valuta la possibilità di utilizzare sql_always_where
Se vuoi che un'esplorazione abbia filtri uguali per tutti e non consenti agli utenti di modificare il valore del filtro, utilizza sql_always_where.
Se vuoi filtri specifici per utente che non possono essere modificati, valuta la possibilità di utilizzare access_filter
Se vuoi che un'esplorazione abbia filtri specifici per ogni utente, ma che non possano essere rimossi o modificati, utilizza access_filter.