Parlons en profondeur de la fonctionnalité des metrics
dans dbt, qui te permet de créer des indicateurs métier déclaratifs, réutilisables et maintenables, sans dupliquer de logique SQL dans les modèles.
🧠 1. Qu’est-ce qu’une metric
dans dbt ?
Une
metric
(métrique) est un indicateur métier que tu définis dans un fichier.yml
avec une logique d’agrégation, un filtre temporel, une granularité, etc.
Elle est indépendante du SQL et centralise la définition des KPI.
📌 Exemples typiques de metrics :
- CA journalier (
sum(montant)
) - Nombre de commandes (
count(*)
) - Moyenne du panier (
avg(montant)
) - Taux de conversion (
count(distinct commandes) / count(visites)
)
🧱 2. Exemple d’une metric dbt
version: 2
metrics:
- name: ca_journalier
label: "Chiffre d'affaires journalier"
model: ref('fct_commandes')
calculation_method: sum
expression: montant
timestamp: date_commande
time_grains: [day, month]
description: "Total des ventes agrégées par date"
🔍 3. Propriétés principales
Propriété | Rôle |
---|---|
name | Nom technique de la metric |
model | Modèle source (ref() ) |
expression | La colonne à agréger |
calculation_method | sum , average , count , count_distinct , expression |
timestamp | Colonne temporelle de référence |
time_grains | Périodes disponibles (day , month , week , etc.) |
dimensions | (facultatif) colonnes pour le GROUP BY |
filters | (facultatif) conditions à appliquer |
window | (facultatif) pour des moyennes glissantes |
description | Texte visible dans dbt docs ou Explore |
🔁 4. Appel d’une metric dans un modèle SQL
SELECT *
FROM {{ metrics.calculate(
metric('ca_journalier'),
grain='day',
start_date='2024-01-01',
end_date='2024-06-01'
) }}
Résultat : une requête SQL générée automatiquement, avec GROUP BY date_commande
+ agrégation.
⚙️ 5. Utilisations
Contexte | Utilisation |
---|---|
📚 Documentation | Visible dans dbt docs serve |
📦 dbt Cloud Explore | Utilisable en mode drag & drop |
📊 Dashboard externe | Avec Semantic Layer activée |
📁 Requêtes SQL | Via metrics.calculate() |
✅ Tests | Tu peux écrire des tests sur les valeurs agrégées |
🔒 6. Avantages
Avantage | Pourquoi c’est utile |
---|---|
📦 Centralisation | Une seule définition pour tout le projet |
✅ Moins d’erreurs | Pas de duplicata SQL dans plusieurs modèles |
🔁 Réutilisable | Appelable depuis plusieurs dashboards |
🔍 Transparence | Documentée, testable, versionnée dans Git |
💼 Métier + Tech alignés | La logique métier devient explicite et claire |
🔥 7. Fonctionnalités avancées
dimensions
: permet de grouper par client, produit, canal, etc.filters
: appliquer des filtres dynamiques (état = 'livré'
)window
: moyenne glissante (window: count: 7, period: day
)calculation_method: expression
: KPI calculé à partir d’autres metrics
🧠 Exemple complet avec dimensions et filtre
metrics:
- name: taux_conversion
model: ref('fct_visites_commandes')
calculation_method: expression
expression: "nb_commandes::float / nb_visites"
timestamp: date_visite
time_grains: [day]
dimensions:
- canal
- segment_client
filters:
- field: canal
operator: "="
value: "web"