filtres

Cette page fait référence au paramètre filters qui fait partie d'une mesure.

filters peut également être utilisé dans une table dérivée native, décrite sur la page de documentation sur les paramètres explore_source.

filters peut également être utilisé dans un tableau de bord, comme décrit sur la page de documentation des paramètres du tableau de bord.

filters peut également être utilisé dans un élément de tableau de bord. Un exemple représentatif de son utilisation est fourni sur la page de documentation des éléments des graphiques à colonnes.

Utilisation

view_name : {
measure: champ_nom {
filters: [dimension_name: "filter expression", dimension_name: "filter expression", ... ]
}
}
Hiérarchie
filters
Types de champs possibles
Mesurer

Acceptation
Ensemble de noms de dimensions et d'expressions de filtre Looker correspondantes

Définition

filters est une liste facultative d'expressions de filtre appliquées à un calcul de mesure. Elle ne fonctionne qu'avec les types de mesures suivants qui effectuent une agrégation:

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

La syntaxe des filtres est la suivante:

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

Reportez-vous à la notation du filtre Looker pour savoir comment écrire des expressions de filtre valides. Placez l'expression de filtre complète entre guillemets, comme illustré dans les exemples suivants.

Vous pouvez également utiliser filters avec des paramètres Liquid et des filtres modélisés pour créer des mesures filtrées dynamiques avec une valeur de filtre qui peut changer de manière dynamique en fonction de l'entrée utilisateur dans un tableau de bord ou un style. Cette approche permet aux utilisateurs de sélectionner des valeurs de filtre qui ne s'appliquent qu'à une mesure spécifique, sans filtrer l'intégralité de la requête dans une clause WHERE globale. Pour en savoir plus, consultez la section Créer une mesure filtrée dynamique plus loin sur cette page.

Examples

Il existe de nombreuses façons d'utiliser filters pour les mesures. Les exemples ci-dessous présentent quelques solutions pour les cas d'utilisation courants:

Filtrer sur plusieurs champs

Dans cet exemple, la mesure comptabilisera des ID distincts qui ont été créés au cours des sept derniers jours et qui ne provenaient pas d'utilisateurs dont les comptes ont été désactivés. Cet exemple montre également comment ajouter plusieurs filtres à un champ. Chaque expression de filtre nécessite son propre paramètre filters complet:

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
}

Filtrer selon une dimension yesno

Prenons un autre exemple : les données incluent une ligne par employé (employé ou sous-traitant). Le champ is_contractor, de type yesno, contient yes si l'utilisateur est un prestataire. Cette mesure ne comptabilise que les lignes concernant les sous-traitants:

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

Ajouter plusieurs valeurs de filtre

Dans cet exemple, l'expression filters contient plusieurs valeurs. La mesure comptabilisera toutes les lignes correspondant à l'une des quatre valeurs du champ state:

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

Ajouter des conditions de filtre numérique

Dans cet exemple, une valeur numérique est attribuée au filtre. La mesure n'ajoute que les commandes dont la valeur price est supérieure à 100:

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

Utiliser la syntaxe de filtre avancé

Dans cet exemple, une plage de valeurs numériques est appliquée au filtre. Elle mesure le nombre total de commandes passées par des clients appartenant à la tranche d'âge 18-25 ans:

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

Créer une mesure filtrée dynamique

Dans cet exemple, un filtre permet à un utilisateur d'afficher le nombre de commandes, filtrées selon l'état qu'il choisit, sur un filtre "Look" ou "Dashboard" :

Commencez par créer un champ de filtre uniquement qui permet à l'utilisateur de sélectionner une valeur:

  filter: status_filter {
    type: string
    suggest_dimension: status
  }

Ensuite, créez une dimension masquée qui utilise des filtres basés sur un modèle pour capturer la sélection d'utilisateurs du champ de filtrage précédent. Cette dimension renvoie yes lorsqu'une valeur est sélectionnée dans le champ de filtre:

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

Enfin, créez une mesure qui filtre sur la dimension type: yesno:

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

Si un utilisateur choisit de ne pas sélectionner de valeur pour le champ de filtre uniquement, le code SQL sera défini par défaut sur 1=1, ce qui n'aura aucune incidence sur les valeurs des mesures.

Difficultés courantes

N'utilisez pas filters avec des mesures de type: number.

De nombreux utilisateurs tentent d'utiliser filters avec des mesures de type: number, ce qui ne fonctionne pas:

# 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} ;;
}

À la place, appliquez un paramètre filters à l'une des mesures individuelles qui composent la mesure de type: number, comme suit:

# 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"]
}