dbt: metrics

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
nameNom technique de la metric
modelModèle source (ref())
expressionLa colonne à agréger
calculation_methodsum, average, count, count_distinct, expression
timestampColonne temporelle de référence
time_grainsPériodes disponibles (day, month, week, etc.)
dimensions(facultatif) colonnes pour le GROUP BY
filters(facultatif) conditions à appliquer
window(facultatif) pour des moyennes glissantes
descriptionTexte 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

ContexteUtilisation
📚 DocumentationVisible dans dbt docs serve
📦 dbt Cloud ExploreUtilisable en mode drag & drop
📊 Dashboard externeAvec Semantic Layer activée
📁 Requêtes SQLVia metrics.calculate()
✅ TestsTu peux écrire des tests sur les valeurs agrégées

🔒 6. Avantages

AvantagePourquoi c’est utile
📦 CentralisationUne seule définition pour tout le projet
✅ Moins d’erreursPas de duplicata SQL dans plusieurs modèles
🔁 RéutilisableAppelable depuis plusieurs dashboards
🔍 TransparenceDocumentée, testable, versionnée dans Git
💼 Métier + Tech alignésLa 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"

Leave a Reply

Your email address will not be published. Required fields are marked *