Uso
conditionally_filter: {
filter: [field_name: "filter expression", field_name: "filter expression", ...]
a menos que: [field_name, ,
Hierarquia
conditionally_filter |
Valor padrão
NenhumaAceita
Uma ou mais especificações de filtro de um nome de campo e uma expressão de filtro do Looker, além de uma lista de um ou mais nomes de campo na seção unless
|
Definição
O parâmetro conditionally_filter
permite definir um conjunto de filtros padrão que os usuários podem modificar se eles aplicarem pelo menos um filtro de uma segunda lista definida.
Esse parâmetro geralmente é usado para evitar que os usuários criem acidentalmente consultas muito grandes que podem ser caras demais para serem executadas no banco de dados. Por exemplo, é possível forçar um usuário a limitar a consulta à semana anterior, a menos que ele tenha solicitado explicitamente um período maior.
Os filtros aplicados em conditionally_filter
aparecem para o usuário após a execução da consulta. Embora os usuários possam mudar o value
padrão que você definiu, eles não podem remover completamente o filtro, a menos que apliquem pelo menos um dos filtros especificados no subparâmetro unless
.
Os nomes dos campos podem ser os de um dimension
ou measure
.
Para fazer referência a uma dimensão ou medida que faz parte de uma visualização mesclada em vez de "Explorar", use view_name.field_name
.
Examples
Veja o exemplo a seguir.
explore: order {
conditionally_filter: {
filters: [id: "123", customer.id: "678,789"]
unless: [date]
}
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Nesse caso, o filtro id
se refere ao campo id
do Explorar chamado order
. O filtro customer.id
refere-se ao campo id
da visualização chamada customer
. Os dois filtros serão aplicados, a menos que o usuário defina uma data de pedido na IU de exploração. Esse exemplo também demonstra que é possível exigir vários filtros.
O valor padrão que você especificar pode aceitar estes tipos de expressões.
Também é possível forçar o usuário a usar um filtro de ID do pedido (com um valor padrão "123" que pode ser alterado), a menos que ele aplique um filtro de Data do pedido:
explore: order {
conditionally_filter: {
filters: [id: "123"]
unless: [date]
}
}
Força o usuário a usar um filtro Código do pedido (com um valor padrão de "123" ou "234" que ele pode mudar), a menos que ele aplique um filtro Data do pedido ou Horário do pedido:
explore: order {
conditionally_filter: {
filters: [id: "123,234"]
unless: [date, time]
}
}
Também é possível forçar o usuário a usar um filtro de ID do pedido (valor padrão "123") e um filtro de Cidade do cliente (com padrão de "Chicago"), a menos que eles apliquem um filtro de Data do pedido ou Data do cliente:
explore: order {
conditionally_filter: {
filters: [id: "123", customer.city: "Chicago"]
unless: [date, customer.date]
}
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Desafios comuns
Um usuário não pode remover todos os filtros quando conditionally_filter
é usado
Não é possível executar uma consulta sem nenhum filtro quando conditionally_filter
é usado. Um usuário precisa usar os filtros condicionais especificados por você ou os próprios filtros da lista unless
.
conditionally_filter
com uma dimensão de type: time
em um grupo coloca as outras dimensões do grupo no subparâmetro unless
.
Se a field
especificada em conditionally_filter
for uma dimensão com base em tempo que faz parte de um grupo de dimensões, o Looker tratará todas as outras dimensões desse grupo como se estivessem sujeitas a um subparâmetro unless
para esse filtro condicional, mesmo se você não incluir um subparâmetro unless
.
Os dois blocos de LookML a seguir são interpretados de forma idêntica. Aqui, conditionally_filter
é aplicado a uma dimensão event_date
baseada em tempo que faz parte do grupo de dimensões event
. Nenhuma condição unless
é especificada, mas o Looker tratará as outras dimensões no grupo event
como se elas tivessem sido especificadas com o subparâmetro unless
.
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 ;;
}
}
O Looker interpreta os dois blocos LookML da mesma forma, mesmo que apenas o segundo bloco LookML aplique explicitamente o subparâmetro unless
às outras dimensões do grupo event
.
Informações úteis
Há um método para aplicar conditionally_filter
a um subconjunto de usuários
Para aplicar um filtro condicional para alguns usuários, mas não para outros, use as permissões de modelo. Você precisa criar dois modelos: um em que conditionally_filter
seja usado e outro em que não seja. Assim, é possível conceder acesso aos modelos adequados de acordo com o usuário.
Se você quiser usar conditionally_filter
sem unless
, use always_filter
Para forçar os usuários a usar um conjunto específico de filtros, mas permitir que eles alterem o valor padrão, use always_filter
.
Se você quiser filtros que não podem ser alterados, considere sql_always_where
Se você quiser que uma exploração tenha filtros iguais para todos e não permita que os usuários alterem o valor do filtro, use sql_always_where
.
Se você quiser filtros específicos para os usuários que não possam ser alterados, considere usar access_filter
.
Se você quiser que uma exploração tenha filtros específicos para cada usuário, mas não possa ser removido ou alterado, use access_filter
.