Passer au contenu principal
Ce guide vous accompagne dans la création de tableaux de bord internes qui permettent à vos équipes GTM de surveiller de façon proactive les habitudes d’usage des clients et la consommation des engagements, permettant des interventions opportunes qui évitent les mauvaises surprises de dépassement et améliorent la rétention des clients. Temps nécessaire : 2 à 3 heures pour la configuration initiale, plus un affinement continu Prérequis :
  • Data Export activé et envoyant des données vers votre entrepôt ou lakehouse interne
  • Accès à un outil de business intelligence (par exemple, Looker, PowerBI, Hex) avec la capacité d’interroger les tables Metronome
  • Au moins un client avec un engagement actif
Avantages clés :
  • Éviter le churn client dû à un dépassement inattendu
  • Identifier les opportunités d’expansion à partir des habitudes d’usage
  • Permettre un engagement client success proactif

Avant de commencer

Accès et permissions requis

Rôle nécessaire : rôle Admin ou Analyst dans Metronome Permissions :
  • Consulter les contrats et engagements clients
  • Accéder aux configurations Data Export
  • Créer et planifier des exports de données
Exigences de données : au moins 7 jours de données d’usage pour obtenir des insights significatifs

Comprendre vos données

La fonctionnalité Data Export de Metronome fournit des exports quotidiens des données Metronome vers l’entrepôt de votre choix. Les modèles de données incluent les informations client, les données granulaires d’usage et d’engagement, les détails de contrat, et plus encore.

Mise en œuvre étape par étape

Étape 1 : Configurer Data Export

FONCTIONNALITÉ PAYANTEData Export est une fonctionnalité Metronome payante. Contactez votre représentant Metronome pour activer Data Export sur votre compte.
Objectif : mettre en place des exports de données automatisés pour alimenter vos tableaux de bord de reporting Instructions :
  1. Accédez à Connections > Data Export dans l’application Metronome
  2. Cliquez sur « Add Destination »
  3. Configurez votre destination d’entrepôt ou de lakehouse
  4. Activez les tables suivantes (remarque : les clients peuvent activer plus de tables que celles indiquées ci-dessous pour des cas d’usage supplémentaires)
    • customer - Tous les clients
    • contracts - Tous les modèles de données liés aux contrats (demandez à votre représentant Metronome de les activer)
    • invoice & line_item - Toutes les factures finalisées et leurs lignes
    • draft_invoice & draft_line_item - Toutes les factures en brouillon et leurs lignes
Résultat attendu : les modèles de données sont correctement transférés vers votre entrepôt de destination ou votre stockage objet sur une base quotidienne.

Étape 2 : Construire des modèles de données de courbe de consommation au niveau client

Objectif : construire une courbe de consommation d’engagement par client avec la consommation réelle et la consommation attendue dans le temps Instructions : pour créer une courbe de taux de consommation d’engagement, nous devons combiner deux concepts : combien d’un engagement devrait être consommé et combien d’un engagement a réellement été consommé. Les requêtes suivantes fournissent un guide étape par étape pour définir ces deux concepts à l’aide des données issues de Metronome Data Export.
SQL GÉNÉRALISÉLe SQL utilisé ici est du SQL généralisé et ne s’exécutera très probablement pas tel quel dans votre moteur de requête. Python et SQL peuvent tous deux être utilisés pour la création de ces tableaux de bord.
  1. Créer un taux de cadence à partir de access_schedule dans la table contracts_balances : La requête suivante analyse l’objet JSON access schedule de la table contracts_balances pour générer la courbe de consommation attendue, ou combien d’un engagement devrait être consommé à un moment donné.
    /*
    ==============================================================================
    SAMPLE QUERY: ACCESS SCHEDULE ANALYSIS
    ==============================================================================
    
    Purpose: Analyzes access schedules by parsing JSON schedule data and calculating
             daily rates, total duration, and normalized balance types.
    
    Tables Required:
    - contracts_balances_table: Contains balance information with access_schedule JSON column
    ==============================================================================
    */
    
    WITH access_schedules AS (
        SELECT
            -- Extract schedule item details from JSON
            JSON_EXTRACT_SCALAR(schedule_item, '$.id') AS access_schedule_id,
            id AS balance_id,
    
            -- Convert amount from cents to currency units
            CAST(JSON_EXTRACT_SCALAR(schedule_item, '$.amount') AS DOUBLE) / 100 AS schedule_amount_usd,
            CAST(JSON_EXTRACT_SCALAR(schedule_item, '$.amount') AS DOUBLE) AS schedule_amount_cents,
    
            -- Parse ISO8601 timestamps to datetime and date
            JSON_EXTRACT_SCALAR(schedule_item, '$.date') AS schedule_start_datetime,
            JSON_EXTRACT_SCALAR(schedule_item, '$.end_date') AS schedule_end_datetime,
            CAST((JSON_EXTRACT_SCALAR(schedule_item, '$.date')) AS DATE) AS schedule_start_date,
            CAST((JSON_EXTRACT_SCALAR(schedule_item, '$.end_date')) AS DATE) AS schedule_end_date,
    
        FROM contracts_balances_table
        CROSS JOIN UNNEST(
            TRY_CAST(
                JSON_EXTRACT(JSON_PARSE(access_schedule), '$.schedule_items') AS ARRAY(JSON)
            )
        ) AS schedule_items_table(schedule_item)
    ),
    
    schedule_duration AS (
        SELECT
            access_schedule_id,
            -- Calculate total days in schedule (inclusive of start and end dates)
            DATE_DIFF('day', MIN(schedule_start_date), MAX(schedule_end_date)) + 1 AS total_schedule_days
        FROM access_schedules
        GROUP BY access_schedule_id
    )
    
    SELECT
        -- Schedule details
        sch.access_schedule_id,
        sch.schedule_amount_usd,
        sch.schedule_amount_cents,
        sch.schedule_start_datetime,
        sch.schedule_end_datetime,
        sch.schedule_start_date,
        sch.schedule_end_date,
    
        -- Duration and rate calculations
        dur.total_schedule_days,
        sch.schedule_amount_usd / dur.total_schedule_days AS daily_rate_usd,
    
        -- Balance information
        bal.contract_id,
        bal.type AS original_balance_type,
    
        -- Normalized balance type with category
        CASE
            WHEN (bal.type = 'prepaid'
                  AND JSON_ARRAY_LENGTH(JSON_EXTRACT(JSON_PARSE(bal.invoice_schedule), '$.schedule_items')) = 0)
            THEN CONCAT('free_commit')
            ELSE bal.type
            -- your metronome instance may have other balance types
        END AS normalized_balance_type,
    
        -- Invoice schedule metadata
        bal.invoice_schedule,
        JSON_ARRAY_LENGTH(JSON_EXTRACT(JSON_PARSE(bal.invoice_schedule), '$.schedule_items')) = 0 AS has_empty_invoice_schedule
    
    FROM access_schedules acs
    LEFT JOIN schedule_duration dur
        ON dur.access_schedule_id = acs.access_schedule_id
    LEFT JOIN balances_table bal
        ON acs.balance_id = bal.id
    
  2. Calculer la consommation historique à l’aide de la table line_item des factures : La requête suivante analyse les données de lignes de facture pour déterminer combien de l’engagement a été réellement consommé sur un mois donné. Cette requête n’analyse que les factures finalisées et devra ensuite être jointe aux données de factures en brouillon pour construire une vue à jour de l’engagement restant.
    /*
    ==============================================================================
    SAMPLE QUERY: FINALIZED INVOICE LINE ITEM ANALYSIS
    ==============================================================================
    
    Purpose: Analyzes finalized invoices and their line items to categorize spend types,
             calculate usage amounts, and identify commit vs on-demand usage patterns.
    
    Tables Required:
    - invoice_table: Contains invoice data with timestamps and status
    - line_item_table: Contains detailed line items linked to invoices
    - customer_table: Contains customer details
    
    Parameters to Replace:
    - {{line_item_types}} → comma-separated list of relevant line item types
    
    ==============================================================================
    */
    
    WITH line_items AS (
        SELECT
            li.*
        FROM line_items_table li
        INNER JOIN invoices_table inv
            ON li.invoice_id = inv.id
            AND inv.status = 'FINALIZED' -- Filter to finalized invoices only
    )
    
    SELECT
        -- Date and time breakdowns
        CAST(inv.start_timestamp AS DATE) AS invoice_start_date,
        CAST(inv.end_timestamp AS DATE) AS invoice_end_date,
        DATE_TRUNC('month', inv.start_timestamp) AS invoice_start_month,
    
        -- Customer information
        inv.customer_id,
        cust.customer_name,
    
        -- Balance and commit tracking
        li.commit_id AS balance_id,
        li.commit_id IS NOT NULL AS is_burning_commit,
    
        -- Invoice details
        inv.id AS invoice_id,
        inv.issued_at AS invoice_issued_at,
        inv.status AS invoice_status,
        inv.billable_status AS invoice_billable_status,
    
        -- Line item details
        li.id AS invoice_line_item_id,
        li.product_id,
        li.name AS product_name,
        li.quantity AS line_item_quantity,
        li.unit_price AS line_item_price,
        li.total AS line_item_total_amount_cents,
        li.total / 100.0 AS line_item_total_amount_usd,
        li.commit_id IS NULL AS is_on_demand_usage,
    
        -- Audit timestamps
        inv.updated_at AS invoice_updated_at,
        li.updated_at AS line_items_updated_at,
    
    FROM invoices_table inv
    INNER JOIN line_items li
        ON inv.id = li.invoice_id
        AND li.line_item_type IN ({{line_item_types}}) -- Filter by Line Item Types that are appropriately contribute to Burn e.g., 'ContractUsageLineItem'
    LEFT JOIN customer_table cust
        ON cust.customer_id = inv.customer_id
    
  3. Calculer la consommation du mois en cours à l’aide de la table de factures en brouillon draft_line_item : La requête précédente fournit une vue historique mois par mois de la consommation d’engagement. La requête suivante peut être combinée à celle ci-dessus pour montrer comment l’engagement a été consommé jusqu’au jour actuel dans la période de facturation. La logique de la requête est similaire au modèle line_item finalisé ci-dessus, à la seule différence qu’elle récupère les données d’engagement intra-mensuelles à partir de la table draft_invoice.
    /*
    ==============================================================================
    SAMPLE QUERY: DRAFT INVOICE LINE ITEM ANALYSIS
    ==============================================================================
    
    Purpose: Analyzes draft invoices and their line items to categorize spend types,
             calculate usage amounts, and identify commit vs on-demand usage patterns
             for the current, not finalized, billing period
    
    Tables Required:
    - draft_invoice_table: Contains draft invoice data with timestamps and status
    - draft_line_item_table: Contains detailed draft line items linked to invoices
    - customer_table: Contains customer details
    
    Parameters to Replace:
    - {{line_item_types}} → comma-separated list of relevant line item types
    
    ==============================================================================
    */
    
    SELECT
        -- Date and time breakdowns
        CAST(drafts.breakdown_start_timestamp AS DATE) AS breakdown_start_date,
        CAST(drafts.breakdown_end_timestamp AS DATE) AS breakdown_end_date,
        DATE_TRUNC('month', drafts.breakdown_start_timestamp) AS breakdown_start_month,
    
        -- Customer information
        drafts.customer_id,
        cust.customer_name,
    
        -- Balance and commit tracking
        dli.commit_id AS balance_id,
        dli.commit_id IS NOT NULL AS is_burning_commit,
        dli.commit_segment_id,
    
        -- Invoice details
        drafts.invoice_id,
        drafts.issued_at AS invoice_issued_at,
        drafts.status AS invoice_status,
        drafts.billable_status AS invoice_billable_status,
    
        -- Line item details
        dli.id AS breakdown_line_item_id,
        dli.product_id,
        dli.name AS product_name,
        dli.quantity AS line_item_quantity,
        dli.unit_price AS line_item_price,
        dli.total AS line_item_total_amount,
        dli.total / 100.0 AS line_item_total_amount_usd,
        dli.commit_id IS NULL AS is_on_demand_usage,
    
        -- Audit timestamps
        drafts.updated_at AS invoice_updated_at,
        dli.updated_at AS line_items_updated_at
    
    FROM draft_invoice_table drafts
    INNER JOIN draft_line_item dli
        ON drafts.id = dli.invoice_breakdown_id
        AND dli.type IN ({{line_item_types}}) -- Filter by Line Item Types that are appropriately contribute to Burn e.g., 'ContractUsageLineItem'
    LEFT JOIN customer_table cust
        ON cust.customer_id = drafts.customer_id
    
  4. Combiner les résultats des requêtes access_schedule, line_item et draft_line_item et créer une colonne vertébrale de dates : Il existe de nombreuses façons d’y parvenir, à la fois en SQL et en Python, et il existe également de nombreuses façons de regrouper ces données (par exemple, par compte, par type d’industrie, etc.), mais les points importants à signaler sont :
    • line_item.commit_id doit être joint à access_schedule.balance_id
    • la colonne vertébrale de dates doit être créée à l’aide de schedule_start_date et schedule_end_date, en incluant schedule_start_date afin que la consommation ne soit mesurée que par rapport à la période de service appropriée de l’access schedule
    • lorsque line_item.commit_id est nul, cela signifie qu’il s’agit d’un usage à la demande, qui ne peut pas être rattaché à un engagement particulier, et donc cet usage n’apparaîtra pas dans la courbe de consommation
    • les sommes cumulatives sur line_item_total_amount_usd au sein d’une période de service d’access_schedule génèreront la consommation totale d’un engagement à la fin de cette période de service
    • forecast_burn_curve peut être modélisé en fonction des heuristiques de votre choix
    • voici un exemple de ce à quoi pourrait ressembler un tableau de bord de taux de consommation d’engagement
    commit_burn_curve_example_chart
  5. Signaler les clients en surconsommation ou en sous-consommation : À l’aide de la courbe de cadence et de la courbe de consommation réelle, les clients qui consomment leurs engagements plus vite ou plus lentement que prévu peuvent être signalés. De nombreux clients de Metronome utilisent ces données pour déclencher des conversations de renouvellement anticipé lorsqu’un client consomme trop, ou des conversations d’activation produit lorsqu’un client consomme trop peu. Un modèle courant que nous avons observé consiste à fournir à chaque Account Manager ou CSM un tableau de bord montrant les clients qui leur sont assignés et l’état actuel de la consommation (surconsommation, sous-consommation, dans les temps).

Comprendre vos résultats

Interpréter les données

Ce qu’il faut rechercher :
  • Des habitudes d’usage stables et prévisibles (adoption saine)
  • Des augmentations progressives de l’usage (réalisation de valeur croissante)
  • Des taux de consommation entre 80 et 110 % (consommation dans les temps)
Signaux d’alerte ou tendances préoccupantes :
  • Des pics soudains d’usage dans les 30 premiers jours (mauvaise configuration potentielle)
  • Un taux de consommation supérieur à 150 % avant le mois 3 (consommation non durable)
  • Des schémas répétés de pic puis de chute (implémentation instable)
Schémas courants :
  • Schéma : taux de consommation à 300 % la semaine 1 → Action : appel de point immédiat pour revoir l’implémentation
  • Schéma : taux de consommation inférieur à 50 % après 60 jours → Action : l’équipe Success doit identifier les freins à l’adoption

Bonnes pratiques et conseils

Recommandations d’optimisation

  • Fréquence : examinez les comptes à haut risque quotidiennement, tous les comptes hebdomadairement
  • Timing : Metronome exporte les données de factures en brouillon quotidiennement — il est courant que les équipes qui produisent ces tableaux de bord définissent des SLA selon lesquels leurs équipes Account Management peuvent s’attendre à voir des données de consommation fraîches
  • Public : équipe CSM en priorité, équipe Sales pour les opportunités d’expansion et de nouveaux clients

Fonctionnalités avancées

  • Modélisation prédictive à partir des schémas saisonniers historiques
  • Score de santé multidimensionnel intégrant les tickets de support
  • Déclencheurs de playbook automatisés en fonction des habitudes d’usage

Considérations sur la qualité des données

  • Un usage antidaté peut provoquer des pics temporaires — attendez 24 heures avant d’escalader
  • Des changements de prix en cours de période peuvent fausser les calculs de consommation
  • Vérifiez toujours les anomalies par rapport aux changements de configuration récents

Intégration et prochaines étapes

Partage et distribution

Une fois les métriques ci-dessus définies, il existe de nombreuses façons d’opérationnaliser les données. Vous trouverez ci-dessous quelques idées que nous avons vues déployées par des clients Metronome pour aider les équipes GTM à prioriser les prises de contact et l’engagement client. Équipes internes :
  • Publications Slack automatisées pour les alertes critiques
  • Synthèse e-mail hebdomadaire vers la direction avec les comptes à risque
  • Accès au tableau de bord en temps réel pour toutes les équipes en contact avec les clients
Parties prenantes externes :
  • Rapports d’usage mensuels aux administrateurs client
  • Revues d’affaires trimestrielles avec analyse des tendances

Passer à l’action sur les insights

  1. Surconsommation : planifiez un appel immédiat pour examiner les habitudes d’usage et les opportunités d’optimisation
  2. Sous-consommation : identifiez les obstacles à l’adoption et proposez un accompagnement à l’implémentation
  3. Usage élevé stable : conversation d’expansion proactive avant épuisement de l’engagement

Dépannage et FAQ

Problèmes courants

Q : Pourquoi mon client affiche-t-il un taux de consommation de 500 % au jour 2 ? R : Les nouveaux clients ont souvent des pics initiaux de configuration pendant qu’ils apprennent à utiliser votre plateforme. Nous vous recommandons de surveiller leur usage pendant cette période critique et de fournir des conseils d’onboarding/d’implémentation pour éviter ces erreurs précoces et coûteuses. Q : Le tableau de bord affiche un solde d’engagement négatif mais le client n’a pas été notifié ? R : Metronome est un système très flexible qui permet des configurations entraînant un usage négatif. Il est important de demander le contexte à votre équipe de facturation si vous observez un comportement anormal dans les visualisations de la courbe de consommation d’engagement.

Checklist en cas de divergence de données

Lorsque les données du rapport ne correspondent pas aux attentes :
  • ✓ Vérifiez que les plages de dates s’alignent sur la période de facturation du client
  • ✓ Vérifiez s’il y a un usage antidaté au cours des 48 dernières heures
  • ✓ Validez que les conditions de l’engagement correspondent à la configuration du contrat dans Metronome (date de début, montant, durée)