Esta página se refere ao parâmetro
filters, que faz parte de uma métrica.
filterstambém pode ser usado como parte de uma tabela derivada nativa, descrita na página de documentação do parâmetroexplore_source.
filterstambém pode ser usado como parte de um painel, conforme descrito na página de documentação Parâmetros do painel.
filterstambé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: counttype: count_distincttype: sumtype: 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"]
}