filtros (para campos)

Esta página se refere ao parâmetro filters, que faz parte de uma métrica.

filters também pode ser usado como parte de uma tabela derivada nativa, descrita na página de documentação do parâmetro explore_source.

filters também pode ser usado como parte de um painel, conforme descrito na página de documentação Parâmetros do painel.

filters também pode ser usado como parte de um elemento do painel. Um exemplo representativo do uso é fornecido na página de documentação dos elementos do gráfico de colunas.

Uso

view: view_name {
  measure: field_name {
    filters: [dimension_name: "filter expression", dimension_name: "filter expression", ... ]
  }
}
Hierarquia
filters
Tipos de campo possíveis
Medida

Aceita
Um conjunto de nomes de dimensões e expressões de filtro do Looker correspondentes.

Definição

filters é uma lista opcional de expressões de filtro aplicadas a um cálculo de métrica. Ele funciona apenas com os seguintes tipos de métricas que realizam agregação:

  • type: count
  • type: count_distinct
  • type: sum
  • type: average

A sintaxe dos filtros é:

filters: [dimension_name_1: "Looker filter expression", dimension_name_2: "Looker filter expression", ...]

Consulte a notação de filtro do Looker para saber como escrever expressões de filtro válidas. Coloque toda a expressão de filtro entre aspas, conforme mostrado nos exemplos a seguir.

Também é possível usar filters com parâmetros do Liquid e filtros com modelo para criar métricas filtradas dinâmicas com um valor de filtro que pode mudar dinamicamente com base na entrada do usuário em um painel ou Look. Essa abordagem permite que os usuários selecionem valores de filtro que se aplicam apenas a uma métrica específica, sem filtrar toda a consulta em uma cláusula WHERE global. Consulte a seção Como criar uma métrica filtrada dinâmica mais adiante nesta página para referência.

Exemplos

Há muitas maneiras de usar filters para métricas. Os exemplos a seguir descrevem algumas soluções para casos de uso comuns.

Como filtrar em vários campos

Neste exemplo, a métrica vai contar os IDs distintos criados nos últimos sete dias que não são de usuários com contas desativadas. Este exemplo também ilustra como adicionar vários filtros a um campo. Cada expressão de filtro requer um parâmetro filters completo:

measure: this_week_count {
  type: count_distinct
  sql: ${TABLE}.id ;;
  filters: [created_date: "7 days", user.status: "-disabled"]
  # Reference fields from other joined views with view_name.field_name syntax
  # Minus sign means "not" in this case, but check notation docs for details
}

Filtrar por uma dimensão yesno

Como outro exemplo, considere dados que incluem uma linha por pessoa, que é um funcionário regular ou um contratado. Há um campo, is_contractor, do tipo yesno, que contém yes se a pessoa for um contratado. Essa medida vai contar apenas as linhas de contratados:

measure: contractor_count {
  type: count
  filters: [is_contractor: "yes"]
}

Adicionar vários valores de filtro

No próximo exemplo, a expressão filters contém vários valores. A métrica vai contar todas as linhas que correspondem a qualquer um dos quatro valores no campo state:

measure: customers_by_state {
  type: count
  filters: [state: "California, Nevada, Washington, Oregon"]
}

Filtrar valores NULL

Neste exemplo, a métrica vai contar IDs distintos criados nos últimos sete dias e incluir um valor no campo user.email_address que não seja NULL:

measure: this_week_count_with_email {
  type: count_distinct
  sql: ${TABLE}.id ;;
  filters: [created_date: "7 days", user.email_address: "-NULL"]
}

Como o campo user.email_address é do tipo string, a sintaxe "-NULL" é usada. Consulte a página de documentação Expressões de filtro do Looker para mais informações.

Adicionar condições de filtro numérico

Neste exemplo, o filtro recebe um valor numérico. A métrica vai adicionar apenas pedidos com um price maior que 100:

measure: total_amt_large_orders {
  type: sum
  filters: [orders.price: ">100"]
  sql: ${orders.price} ;;
}

Como usar AND para combinar condições

Neste exemplo, a métrica usa uma expressão de filtro com o operador AND para calcular o total de pedidos de clientes na faixa etária de 18 a 25 anos:

measure: sales_18_to_25 {
  type: sum
  filters: [customers.age: ">=18 AND <=25"]
  sql: ${orders.price} ;;
}

Usar vírgulas para combinar condições

Neste exemplo, a métrica usa uma expressão de filtro com o operador , para calcular o total de pedidos de clientes com menos de 25 anos ou mais de 65:

measure: sales_less_25_or_greater_65 {
  type: sum
  filters: [customers.age: "<25, >65"]
  sql: ${orders.price} ;;
}

Como criar uma métrica dinâmica filtrada

Neste exemplo, um filtro dá ao usuário a opção de ver uma contagem de pedidos (filtrados pelo status escolhido pelo usuário) em um Look ou filtro de painel:

Primeiro, crie um campo somente para filtros que permita ao usuário selecionar um valor:

  filter: status_filter {
    type: string
    suggest_dimension: status
  }

Em seguida, crie uma dimensão oculta que use filtros com modelo para capturar a seleção do usuário no campo anterior somente de filtro. Essa dimensão vai retornar sim sempre que um valor for selecionado no campo de filtro:

  dimension: status_satisfies_filter {
    type: yesno
    hidden: yes
    sql: {% condition status_filter %} ${status} {% endcondition %} ;;
  }

Por fim, crie uma métrica que filtre a dimensão type: yesno:

  measure: count_dynamic_status {
    type: count
    filters: [status_satisfies_filter: "yes"]
  }

Se um usuário não selecionar um valor para o campo somente para filtro, o SQL vai usar 1=1 como padrão, o que não vai afetar os valores da métrica.

Desafios comuns

Não use filters com medidas de type: number

Muitos usuários tentam usar filters com medidas de type: number, o que não funciona:

# Will NOT work
measure: total_food_profit {
  type: number
  sql: ${total_revenue} - ${total_cost} ;;
  filters: [segment: "food"]
}
measure: total_revenue {
  type: sum
  sql: ${revenue} ;;
}
measure: total_cost {
  type: sum
  sql: ${cost} ;;
}

Em vez disso, aplique um parâmetro filters a qualquer uma das medidas individuais que compõem a medida de type: number, da seguinte forma:

# Will work
measure: total_food_profit {
  type: number
  sql: ${total_food_revenue} - ${total_food_cost} ;;
}
measure: total_food_revenue {
  type: sum
  sql: ${revenue} ;;
  filters: [segment: "food"]
}
measure: total_food_cost {
  type: sum
  sql: ${cost} ;;
  filters: [segment: "food"]
}