filtro_condicional

Uso

explore: explore_name {
conditionally_filter: {
filter: [field_name: "filter expression", field_name: "filter expression", ...]
a menos que: [field_name, ,
Hierarquia
conditionally_filter
Valor padrão
Nenhuma

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