Utilisation
view: view_name {
measure: field_name {
type: sum_distinct
sql_distinct_key: ${my_field_name} ;;
}
}
|
Hiérarchie
sql_distinct_key |
Types de champs possibles
Mesure
Acceptation
Expression SQL
|
Définition
Le paramètre sql_distinct_key est utilisé avec les types de mesures qui effectuent des agrégations sur des valeurs non répétées, en particulier les mesures de type average_distinct, median_distinct, percentile_distinct et sum_distinct. sql_distinct_key indique à Looker le champ à utiliser comme base pour déterminer les valeurs uniques, ce qui évite les erreurs de calcul en cas de expansion.
Par exemple, type: sum_distinct additionne les valeurs non répétées d'un champ donné, en fonction des valeurs uniques définies par le paramètre sql_distinct_key.
Prenons l'exemple d'un tableau comme celui-ci :
| ID de l'article commandé | ID de commande | Expédition de la commande |
|---|---|---|
| 1 | 1 | 10.00 |
| 2 | 1 | 10.00 |
| 3 | 2 | 20,00 |
| 4 | 2 | 20,00 |
| 5 | 2 | 20,00 |
Dans ce cas, chaque commande comporte plusieurs lignes. Si vous avez ajouté une mesure de base type: sum pour la colonne order_shipping, vous obtenez un total de 80,00, même si le montant total des frais de port collectés est en réalité de 30,00.
# Will NOT calculate the correct shipping amount
measure: total_shipping {
type: sum
sql: ${order_shipping} ;;
}
Pour obtenir un résultat précis, vous pouvez expliquer à Looker comment identifier chaque entité unique (dans ce cas, chaque commande unique) à l'aide du paramètre sql_distinct_key. Cette formule permettra de calculer le montant correct de 30,00 :
# Will calculate the correct shipping amount
measure: total_shipping {
type: sum_distinct
sql_distinct_key: ${order_id} ;;
sql: ${order_shipping} ;;
}
Chaque valeur unique de sql_distinct_key ne doit avoir qu'une seule valeur correspondante dans sql. Cet exemple fonctionne, car chaque ligne avec une valeur order_id de 1 a la même valeur order_shipping de 10,00, chaque ligne avec une valeur order_id de 2 a la même valeur order_shipping de 20,00, etc.