Guide des KPI pour une entreprise agroalimentaire industrielle¶
Public cible : administrateurs IT et direction d'une entreprise agroalimentaire industrielle mettant en place une plateforme BI (Metabase + Superset + PostgreSQL).
Objectif : fournir un référentiel complet de 30 indicateurs clés de performance, organisés en 3 axes stratégiques, avec formules de calcul, benchmarks sectoriels et recommandations de visualisation.
Table des matières¶
- Axe 1 — Ventes / Commercial (KPI 1 à 10)
- Axe 2 — Comptabilité / Finance (KPI 11 à 20)
- Axe 3 — Fabrication / Usine (KPI 21 à 30)
- Implémentation BI — Metabase + Superset + PostgreSQL
- Sources
Axe 1 — Ventes / Commercial¶
KPI 1 — Chiffre d'Affaires & Volume de Ventes (Revenue & Sales Volume)¶
| Attribut | Détail |
|---|---|
| Nom FR | Chiffre d'Affaires (CA) & Volume de Ventes |
| Nom EN | Revenue & Sales Volume |
| Unité | Tonnes (T) (indicateur industriel primaire) + EUR (euros) |
| Fréquence recommandée | Quotidienne (flash), mensuelle (analyse détaillée), annuelle (bilan) |
| Source de données typique | ERP (module ventes/facturation), base de données commandes PostgreSQL |
| Benchmark agroalimentaire | Variable selon le sous-secteur ; croissance annuelle de 3 à 7 % considérée comme saine en valeur ; le suivi en tonnage permet de neutraliser les effets prix |
| Visualisation recommandée | Double axe : courbe d'évolution temporelle en tonnes (axe principal) + courbe en EUR (axe secondaire) + barre comparative objectif vs réalisé + carte géographique deck.gl Superset |
Formules de calcul :
Volume_ventes (T) = Σ (poids_net_kg × quantité_vendue) / 1000
CA (EUR) = Σ (prix_unitaire × quantité_vendue)
Prix_moyen_tonne (EUR/T) = CA / Volume_ventes
Déclinaisons : global, par client, par produit, par zone géographique — toujours en tonnage ET en euros.
Notes d'implémentation : - Dans Superset, utiliser un graphique de type Time-series Line Chart avec double axe Y (tonnes à gauche, EUR à droite) pour l'évolution mensuelle. - Ajouter un filtre interactif par client, famille de produits et zone géographique. - La carte géographique deck.gl permet de visualiser la répartition spatiale du CA et du tonnage (voir KPI 10). - Le suivi en tonnage est l'indicateur industriel de référence : il permet de mesurer l'activité réelle indépendamment des variations de prix ou des effets de mix produit.
KPI 2 — Taux de Conversion (Conversion Rate)¶
| Attribut | Détail |
|---|---|
| Nom FR | Taux de Conversion |
| Nom EN | Conversion Rate |
| Unité | % (pourcentage) |
| Fréquence recommandée | Mensuelle |
| Source de données typique | CRM, ERP (modules devis et commandes) |
| Benchmark agroalimentaire | 20 à 30 % en B2B industrie |
| Visualisation recommandée | Jauge (gauge chart) dans Metabase |
Formule de calcul :
Taux de Conversion = (Nombre de commandes / Nombre de devis émis) × 100
Notes d'implémentation : - S'assurer que le statut des devis (émis, accepté, refusé, expiré) est correctement tracé dans le CRM. - Segmenter par commercial pour identifier les écarts de performance.
KPI 3 — Volume Moyen par Commande (Average Order Volume)¶
| Attribut | Détail |
|---|---|
| Nom FR | Volume Moyen par Commande |
| Nom EN | Average Order Volume |
| Unité | Tonnes/commande (indicateur primaire) + EUR/commande (indicateur complémentaire) |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (facturation / commandes) |
| Benchmark agroalimentaire | Très variable selon le type de client (grande distribution vs CHR vs détail) ; le suivi en tonnage reflète la réalité logistique (capacité camion, palettisation) |
| Visualisation recommandée | Courbe d'évolution mensuelle (double axe : T/commande + EUR/commande) |
Formules de calcul :
Volume_moyen_commande (T) = Volume_total_vendu (T) / Nombre_de_commandes
Panier_moyen (EUR) = CA / Nombre_de_commandes
Notes d'implémentation : - Le volume moyen par commande en tonnes est le KPI industriel de référence : il reflète directement la taille des commandes en termes logistiques et de production. - Suivre l'évolution pour détecter les tendances (commandes plus petites et plus fréquentes vs commandes massives). - Croiser avec le nombre de lignes par commande et le panier moyen en EUR pour affiner l'analyse (effet prix vs effet volume).
KPI 3b — Volume de Ventes (Sales Volume)¶
| Attribut | Détail |
|---|---|
| Nom FR | Volume de Ventes |
| Nom EN | Sales Volume |
| Unité | Tonnes (T) |
| Fréquence recommandée | Quotidienne (flash), hebdomadaire, mensuelle |
| Source de données typique | ERP (module ventes/facturation, bons de livraison) |
| Benchmark agroalimentaire | Propre à chaque entreprise ; la tendance et la saisonnalité sont plus significatives que la valeur absolue |
| Visualisation recommandée | Barre empilée par période (jour/semaine/mois) avec décomposition par client ou par produit + tableau croisé dynamique |
Formule de calcul :
Volume_ventes (T) = Σ (poids_net_kg) / 1000
Déclinaisons : - Par période (jour, semaine, mois, année) - Par client (top clients en tonnage) - Par produit / famille de produits - Par zone géographique
Notes d'implémentation : - Ce KPI est le pilier du suivi commercial en agroalimentaire industriel : il mesure l'activité réelle de l'entreprise indépendamment des prix. - Dans Metabase, créer un tableau de bord dédié avec filtres par période, client et famille de produits. - Dans Superset, utiliser un Pivot Table pour croiser clients x produits x périodes en tonnage. - Comparer systématiquement au CA en EUR pour détecter les effets prix (hausse de CA sans hausse de volume = effet prix pur).
KPI 4 — Taux de Fidélisation (Customer Retention Rate)¶
| Attribut | Détail |
|---|---|
| Nom FR | Taux de Fidélisation Client |
| Nom EN | Customer Retention Rate |
| Unité | % |
| Fréquence recommandée | Trimestrielle / Annuelle |
| Source de données typique | CRM, ERP (base clients) |
| Benchmark agroalimentaire | > 80 % en B2B (un taux inférieur signale un problème de satisfaction ou de compétitivité) |
| Visualisation recommandée | Jauge + courbe d'évolution trimestrielle |
Formule de calcul :
Taux de Fidélisation = ((Clients_fin_période - Nouveaux_clients) / Clients_début_période) × 100
Notes d'implémentation : - Définir clairement ce qu'est un « client actif » (au moins une commande sur la période de référence). - Compléter par un indicateur de churn (taux d'attrition = 100 % - taux de fidélisation).
KPI 5 — Délai Moyen de Paiement Client / DSO (Days Sales Outstanding)¶
| Attribut | Détail |
|---|---|
| Nom FR | Délai Moyen de Paiement Client (DSO) |
| Nom EN | Days Sales Outstanding |
| Unité | Jours |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (comptabilité clients, balance âgée) |
| Benchmark agroalimentaire | 45 à 60 jours en France (Loi LME : max 60 jours date de facture ou 45 jours fin de mois) |
| Visualisation recommandée | Jauge + courbe de tendance mensuelle |
Formule de calcul :
DSO = (Créances_clients / CA_TTC) × 365
Notes d'implémentation : - Un DSO en hausse signale une dégradation du recouvrement. - Croiser avec la balance âgée pour identifier les clients en retard.
KPI 6 — Top Clients — Analyse Pareto 80/20¶
| Attribut | Détail |
|---|---|
| Nom FR | Analyse Pareto des Clients |
| Nom EN | Customer Pareto Analysis (80/20) |
| Unité | EUR (CA) + % (cumul) |
| Fréquence recommandée | Trimestrielle / Annuelle |
| Source de données typique | ERP (facturation) |
| Benchmark agroalimentaire | En règle générale, 20 % des clients représentent 80 % du CA ; un ratio plus concentré augmente le risque de dépendance |
| Visualisation recommandée | Diagramme de Pareto + tableau des 20 premiers clients |
Formule de calcul :
1. Classer les clients par CA décroissant
2. Calculer le CA cumulé en %
3. Identifier le seuil 80 % du CA
Pareto_ratio = Nombre de clients représentant 80% du CA / Nombre total de clients
Notes d'implémentation : - Dans Superset, utiliser un graphique de type barre + ligne cumulée. - Ajouter un tableau détaillé des 20 premiers clients avec CA, volume et évolution N/N-1.
KPI 7 — Carnet de Commandes (Backlog)¶
| Attribut | Détail |
|---|---|
| Nom FR | Carnet de Commandes |
| Nom EN | Backlog / Order Book |
| Unité | Tonnes (T) (indicateur industriel primaire) + EUR (indicateur complémentaire) |
| Fréquence recommandée | Hebdomadaire / Mensuelle |
| Source de données typique | ERP (module commandes) |
| Benchmark agroalimentaire | Un backlog couvrant 2 à 4 semaines de production en tonnage est considéré comme confortable ; exprimer en tonnes permet de planifier directement la charge usine |
| Visualisation recommandée | Barre empilée par semaine/mois en tonnes (décomposée par famille produit) + valeur EUR en infobulle |
Formules de calcul :
Carnet_commandes (T) = Σ (poids_net_kg des commandes_confirmées_non_livrées) / 1000
Carnet_commandes (EUR) = Σ (montant des commandes_confirmées_non_livrées)
Couverture_production (semaines) = Carnet_commandes (T) / Capacité_production_hebdo (T)
Notes d'implémentation : - Le carnet de commandes en tonnes est essentiel pour la planification de production : il se traduit directement en charge machine et en besoin matières premières. - Segmenter par famille de produits et par date de livraison promise. - Utiliser des barres empilées dans Metabase pour visualiser la décomposition par gamme, en tonnes. - Ajouter un indicateur de couverture en semaines de production pour anticiper les sous-charges ou surcharges.
KPI 8 — Taux de Service OTIF (On Time In Full)¶
| Attribut | Détail |
|---|---|
| Nom FR | Taux de Service OTIF |
| Nom EN | On Time In Full (OTIF) |
| Unité | % (calculé sur base tonnage) |
| Fréquence recommandée | Hebdomadaire / Mensuelle |
| Source de données typique | ERP (module logistique/expéditions), WMS |
| Benchmark agroalimentaire | > 95 % (objectif standard), > 98 % (niveau d'excellence) |
| Visualisation recommandée | Jauge + courbe d'évolution + tableau détaillé des écarts en tonnage |
Formules de calcul :
OTIF (%) = (Livraisons_conformes_en_délai_et_tonnage / Total_livraisons) × 100
IF_tonnage (%) = (Tonnage_livré_conforme / Tonnage_commandé) × 100
Écart_tonnage (T) = Tonnage_commandé - Tonnage_livré
Notes d'implémentation : - Décomposer en deux sous-indicateurs : OT (On Time) et IF (In Full) pour identifier la cause racine des échecs. - Une livraison est OTIF uniquement si elle est à la fois dans les délais ET complète en tonnage (pas seulement en nombre de lignes). - La conformité « In Full » doit se mesurer en tonnage : une livraison de 18 T au lieu de 20 T commandées n'est pas conforme, meme si toutes les lignes de commande sont presentes. - Suivre le tonnage manquant (ecart entre commande et livraison) pour quantifier l'impact industriel des non-conformites.
KPI 9 — Prévisions vs Réalisé (Forecast Accuracy)¶
| Attribut | Détail |
|---|---|
| Nom FR | Précision des Prévisions de Vente |
| Nom EN | Forecast Accuracy |
| Unité | % (calculé en tonnes principalement, et en EUR en complément) |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP/CRM (prévisions en tonnes) + ERP (ventes réalisées en tonnes) |
| Benchmark agroalimentaire | > 80 % considéré comme bon, > 90 % excellent |
| Visualisation recommandée | Double courbe (prévu vs réalisé en tonnes) + écart en % + courbe complémentaire en EUR |
Formules de calcul :
Forecast_Accuracy_volume (%) = 1 - (|Réalisé_tonnes - Prévu_tonnes| / Prévu_tonnes)
Forecast_Accuracy_CA (%) = 1 - (|Réalisé_EUR - Prévu_EUR| / Prévu_EUR)
Écart_volume (T) = Réalisé_tonnes - Prévu_tonnes
Notes d'implémentation : - La prévision en tonnes est l'indicateur primaire en agroalimentaire industriel : elle pilote directement la planification de production, les achats de matières premières et la logistique. - Mesurer par famille de produits et par zone géographique, toujours en tonnes. - Visualiser sous forme de deux courbes superposées dans Superset (prevision vs realise en tonnes) avec une aire coloree pour l'ecart. - La comparaison en EUR reste utile pour le pilotage financier, mais l'ecart en tonnage est prioritaire pour la planification industrielle.
KPI 10 — Tonnage & CA par Zone Géographique¶
| Attribut | Détail |
|---|---|
| Nom FR | Tonnage & Chiffre d'Affaires par Zone Géographique |
| Nom EN | Sales Volume & Revenue by Geographic Area |
| Unité | Tonnes (T) (indicateur primaire pour la taille des pastilles) + EUR |
| Fréquence recommandée | Mensuelle / Trimestrielle |
| Source de données typique | ERP (facturation + bons de livraison + adresses de livraison), référentiel codes postaux/départements |
| Benchmark agroalimentaire | N/A (propre à chaque entreprise) |
| Visualisation recommandée | Carte deck.gl Superset (scatter plot : taille des pastilles = tonnage, couleur = société/filiale, infobulle = CA en EUR) |
Formules de calcul :
Volume_zone (T) = Σ (poids_net_kg) / 1000 GROUP BY code_postal | département | région
CA_zone (EUR) = Σ (CA) GROUP BY code_postal | département | région
Prix_moyen_tonne_zone (EUR/T) = CA_zone / Volume_zone
Notes d'implémentation : - Dans Superset, utiliser le plugin deck.gl Scatter Plot avec les coordonnées GPS des adresses de livraison. - La taille des pastilles represente le tonnage (pas le CA) : cela donne une vision industrielle de la repartition geographique de l'activite. - La couleur represente la societe ou la filiale ; l'infobulle affiche le CA en EUR et le prix moyen par tonne. - Necessite une table de correspondance code postal vers coordonnees GPS (latitude/longitude) dans PostgreSQL. - Cette visualisation permet d'identifier les zones a fort volume (enjeux logistiques) vs les zones a forte valeur (enjeux commerciaux).
Axe 2 — Comptabilité / Finance¶
KPI 11 — Marge Brute (Gross Margin)¶
| Attribut | Détail |
|---|---|
| Nom FR | Marge Brute |
| Nom EN | Gross Margin |
| Unité | % |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (comptabilité analytique, P&L) |
| Benchmark agroalimentaire | 30 à 50 % selon le sous-secteur (produits frais : marges plus faibles, produits transformés : marges plus élevées) |
| Visualisation recommandée | Jauge + courbe mensuelle |
Formule de calcul :
Marge Brute (%) = ((CA - Coût_des_marchandises_vendues) / CA) × 100
Notes d'implémentation : - Décliner par famille de produits pour identifier les gammes les plus rentables. - Suivre l'évolution mensuelle pour détecter rapidement l'impact des variations de coûts matières.
KPI 12 — Marge Nette (Net Margin)¶
| Attribut | Détail |
|---|---|
| Nom FR | Marge Nette |
| Nom EN | Net Margin |
| Unité | % |
| Fréquence recommandée | Mensuelle / Trimestrielle |
| Source de données typique | ERP (comptabilité générale, P&L complet) |
| Benchmark agroalimentaire | 3 à 8 % en agroalimentaire (secteur à marges structurellement faibles) |
| Visualisation recommandée | Jauge |
Formule de calcul :
Marge Nette (%) = (Résultat_net / CA) × 100
Notes d'implémentation : - Indicateur de synthèse par excellence pour la direction générale. - Comparer systématiquement avec la marge brute pour mesurer le poids des charges de structure.
KPI 13 — EBITDA¶
| Attribut | Détail |
|---|---|
| Nom FR | EBITDA (Excédent Brut d'Exploitation approché) |
| Nom EN | EBITDA (Earnings Before Interest, Taxes, Depreciation and Amortization) |
| Unité | EUR |
| Fréquence recommandée | Mensuelle / Trimestrielle |
| Source de données typique | ERP (comptabilité générale) |
| Benchmark agroalimentaire | Marge EBITDA de 8 à 15 % en agroalimentaire |
| Visualisation recommandée | Courbe + comparatif année N vs N-1 |
Formule de calcul :
EBITDA = Résultat_d_exploitation + Dotations_aux_amortissements + Dotations_aux_provisions
Notes d'implémentation : - Indicateur privilégié par les investisseurs et les banques. - Afficher systématiquement la comparaison N vs N-1 avec le pourcentage d'évolution.
KPI 14 — BFR (Working Capital Requirement)¶
| Attribut | Détail |
|---|---|
| Nom FR | Besoin en Fonds de Roulement (BFR) |
| Nom EN | Working Capital Requirement (WCR) |
| Unité | EUR, exprimé en jours de CA |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (comptabilité, bilan) |
| Benchmark agroalimentaire | 30 à 60 jours de CA selon le type d'activité ; en produits frais, le BFR peut être négatif grâce à des encaissements rapides |
| Visualisation recommandée | Courbe + décomposition en 3 composantes (stocks, créances, dettes) |
Formule de calcul :
BFR = Stocks + Créances_clients - Dettes_fournisseurs
BFR en jours = (BFR / CA_annuel) × 365
Notes d'implémentation : - Un BFR en hausse consomme de la trésorerie ; un BFR en baisse en libère. - Utiliser un graphique à aires empilées dans Superset pour montrer la décomposition.
KPI 15 — DSO — Délai d'Encaissement (Days Sales Outstanding)¶
| Attribut | Détail |
|---|---|
| Nom FR | DSO — Délai d'Encaissement |
| Nom EN | Days Sales Outstanding |
| Unité | Jours |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (balance âgée clients) |
| Benchmark agroalimentaire | < 60 jours (LME France), objectif interne souvent fixé à 45 jours |
| Visualisation recommandée | Jauge + courbe |
Formule de calcul :
DSO = (Créances_clients / CA_TTC) × 365
Notes d'implémentation : - Indicateur présent également dans l'axe commercial (KPI 5). En finance, il alimente directement le calcul du BFR. - Mettre en place des alertes Metabase lorsque le DSO dépasse le seuil fixé.
KPI 16 — DPO — Délai de Paiement Fournisseurs (Days Payable Outstanding)¶
| Attribut | Détail |
|---|---|
| Nom FR | DPO — Délai de Paiement Fournisseurs |
| Nom EN | Days Payable Outstanding |
| Unité | Jours |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (comptabilité fournisseurs) |
| Benchmark agroalimentaire | 45 à 60 jours (conformité LME obligatoire) |
| Visualisation recommandée | Jauge |
Formule de calcul :
DPO = (Dettes_fournisseurs / Achats_TTC) × 365
Notes d'implémentation : - Un DPO trop élevé peut indiquer des tensions de trésorerie ou un non-respect de la LME (risque d'amende). - Un DPO trop faible signifie que l'on paie plus vite que nécessaire.
KPI 17 — Trésorerie Nette (Net Cash Position)¶
| Attribut | Détail |
|---|---|
| Nom FR | Trésorerie Nette |
| Nom EN | Net Cash Position |
| Unité | EUR |
| Fréquence recommandée | Quotidienne / Hebdomadaire |
| Source de données typique | ERP (module trésorerie), rapprochements bancaires |
| Benchmark agroalimentaire | Doit rester positive ; un matelas de sécurité de 1 à 3 mois de charges fixes est recommandé |
| Visualisation recommandée | Courbe quotidienne/hebdomadaire avec seuil d'alerte |
Formule de calcul :
Trésorerie Nette = Trésorerie_active - Trésorerie_passive
Où : - Trésorerie active = disponibilités + placements court terme - Trésorerie passive = concours bancaires courants + découverts
Notes d'implémentation : - Mettre en place une alerte Metabase si la trésorerie passe sous le seuil minimum défini. - Courbe avec zone rouge (sous le seuil) et zone verte (au-dessus).
KPI 18 — Ratio Charges Fixes / Variables¶
| Attribut | Détail |
|---|---|
| Nom FR | Ratio Charges Fixes / Charges Variables |
| Nom EN | Fixed vs Variable Cost Ratio |
| Unité | % du CA |
| Fréquence recommandée | Mensuelle / Trimestrielle |
| Source de données typique | ERP (comptabilité analytique) |
| Benchmark agroalimentaire | Les charges fixes représentent typiquement 20 à 35 % du CA en industrie agroalimentaire |
| Visualisation recommandée | Camembert (répartition) + courbe d'évolution |
Formule de calcul :
Ratio Charges Fixes = (Charges_fixes / CA) × 100
Ratio Charges Variables = (Charges_variables / CA) × 100
Notes d'implémentation : - Un levier opérationnel élevé (part de charges fixes importante) amplifie les variations de résultat. - Utiliser un graphique en donut dans Metabase pour la répartition et une courbe pour l'évolution.
KPI 19 — Coût de Revient par Produit (Unit Cost)¶
| Attribut | Détail |
|---|---|
| Nom FR | Coût de Revient par Produit |
| Nom EN | Unit Cost / Cost of Goods Manufactured |
| Unité | EUR / unité (ou EUR / kg, EUR / tonne) |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (comptabilité analytique, module production) |
| Benchmark agroalimentaire | Propre à chaque gamme de produits ; l'objectif est de suivre les dérives par rapport au coût standard |
| Visualisation recommandée | Tableau comparatif par gamme de produits |
Formule de calcul :
Coût de Revient = (Matières_premières + Main_d_oeuvre_directe + Frais_généraux_imputés) / Quantité_produite
Notes d'implémentation : - Comparer le coût réel au coût standard pour détecter les dérives. - Présenter sous forme de tableau dans Metabase avec code couleur (vert si inférieur au standard, rouge si supérieur).
KPI 20 — Écarts Budgétaires (Budget Variance)¶
| Attribut | Détail |
|---|---|
| Nom FR | Écarts Budgétaires |
| Nom EN | Budget Variance |
| Unité | % |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (comptabilité, module budgets) |
| Benchmark agroalimentaire | Un écart inférieur à ±5 % est considéré comme acceptable ; au-delà, une analyse des causes s'impose |
| Visualisation recommandée | Barres horizontales (favorable = vert, défavorable = rouge) |
Formule de calcul :
Écart Budgétaire (%) = ((Réalisé - Budget) / Budget) × 100
Convention : un écart positif sur le CA est favorable, un écart positif sur les charges est défavorable.
Notes d'implémentation : - Utiliser un graphique en barres divergentes dans Superset avec coloration conditionnelle. - Décliner par poste budgétaire (achats matières, personnel, énergie, maintenance, etc.).
Axe 3 — Fabrication / Usine¶
KPI 21 — TRS / OEE (Taux de Rendement Synthétique / Overall Equipment Effectiveness)¶
| Attribut | Détail |
|---|---|
| Nom FR | TRS — Taux de Rendement Synthétique |
| Nom EN | OEE — Overall Equipment Effectiveness |
| Unité | % |
| Fréquence recommandée | Temps réel / Par poste / Quotidienne |
| Source de données typique | MES (Manufacturing Execution System), automates (PLC/SCADA), saisies opérateurs |
| Benchmark agroalimentaire | > 85 % = world-class ; 60 à 70 % = moyenne industrie ; < 40 % = sous-performance critique |
| Norme de référence | NF E60-182, ISO 22400 |
| Visualisation recommandée | Jauge globale + décomposition en 3 axes (disponibilité, performance, qualité) |
Formule de calcul :
TRS = Disponibilité × Performance × Qualité
Disponibilité = Temps de fonctionnement / Temps requis
Performance = (Temps de cycle théorique × Quantité produite) / Temps de fonctionnement
Qualité = Quantité conforme / Quantité produite
Notes d'implémentation : - C'est l'indicateur roi de la production industrielle. - La décomposition en 3 facteurs permet d'identifier le levier d'amélioration prioritaire. - Utiliser une jauge à 3 niveaux dans Metabase (rouge < 60 %, orange 60-85 %, vert > 85 %). - Ajouter un graphique en barres empilées montrant les 3 composantes par ligne de production.
KPI 22 — Taux de Rebut (Scrap Rate)¶
| Attribut | Détail |
|---|---|
| Nom FR | Taux de Rebut |
| Nom EN | Scrap Rate |
| Unité | % |
| Fréquence recommandée | Quotidienne / Hebdomadaire |
| Source de données typique | MES, ERP (module qualité/production) |
| Benchmark agroalimentaire | < 2 % (hors déchets de process normaux) ; en confiserie/biscuiterie, peut monter à 3-4 % |
| Visualisation recommandée | Courbe d'évolution + diagramme de Pareto par cause de rebut |
Formule de calcul :
Taux de Rebut (%) = (Quantité_rebutée / Quantité_produite) × 100
Notes d'implémentation : - Associer chaque rebut à une cause (défaut qualité, casse machine, erreur opérateur, etc.). - Le diagramme de Pareto par cause permet de concentrer les actions correctives sur les causes principales.
KPI 23 — Taux de Rendement Matière (Material Yield)¶
| Attribut | Détail |
|---|---|
| Nom FR | Taux de Rendement Matière |
| Nom EN | Material Yield |
| Unité | % |
| Fréquence recommandée | Quotidienne / Hebdomadaire |
| Source de données typique | MES, ERP (suivi matières) |
| Benchmark agroalimentaire | Très variable : 85-98 % selon le process (abattage, découpe, transformation) |
| Visualisation recommandée | Courbe d'évolution + comparatif par ligne de production |
Formule de calcul :
Rendement Matière (%) = (Quantité_produit_fini / Quantité_matière_première_entrée) × 100
Notes d'implémentation : - En agroalimentaire, le rendement matière est critique car les matières premières représentent 40 à 70 % du coût de revient. - Comparer par ligne de production et par équipe pour identifier les meilleures pratiques.
KPI 24 — Productivité (Productivity)¶
| Attribut | Détail |
|---|---|
| Nom FR | Productivité |
| Nom EN | Productivity / Labor Productivity |
| Unité | Unités/heure (ou tonnes/heure, kg/heure) |
| Fréquence recommandée | Quotidienne / Hebdomadaire |
| Source de données typique | MES, ERP (pointage, production) |
| Benchmark agroalimentaire | Propre à chaque process ; l'objectif est l'amélioration continue par rapport à la cadence nominale |
| Visualisation recommandée | Barre par équipe / par ligne de production |
Formule de calcul :
Productivité = Quantité_produite / Heures_travaillées
Notes d'implémentation : - Comparer par équipe (matin, après-midi, nuit) pour détecter les écarts. - Mettre en regard de la cadence théorique de la ligne.
KPI 25 — Temps de Cycle (Cycle Time)¶
| Attribut | Détail |
|---|---|
| Nom FR | Temps de Cycle |
| Nom EN | Cycle Time |
| Unité | Minutes/unité (ou secondes/unité) |
| Fréquence recommandée | Temps réel / Quotidienne |
| Source de données typique | MES, automates (PLC/SCADA) |
| Benchmark agroalimentaire | Doit être le plus proche possible du temps de cycle théorique (cadence nominale) |
| Visualisation recommandée | Courbe par produit avec seuil théorique |
Formule de calcul :
Temps de Cycle = Temps_de_production / Quantité_produite
Notes d'implémentation : - Un temps de cycle supérieur au théorique alimente la perte de performance dans le TRS. - Visualiser avec une ligne de référence (temps de cycle théorique) dans Superset.
KPI 26 — MTBF (Mean Time Between Failures)¶
| Attribut | Détail |
|---|---|
| Nom FR | MTBF — Temps Moyen entre Pannes |
| Nom EN | MTBF — Mean Time Between Failures |
| Unité | Heures |
| Fréquence recommandée | Mensuelle |
| Source de données typique | GMAO (Gestion de Maintenance Assistée par Ordinateur), MES |
| Benchmark agroalimentaire | Dépend fortement de l'équipement ; l'objectif est une tendance croissante (amélioration de la fiabilité) |
| Visualisation recommandée | Barre par machine |
Formule de calcul :
MTBF = Temps_de_fonctionnement_total / Nombre_de_pannes
Notes d'implémentation : - Indicateur clé pour le plan de maintenance préventive. - Un MTBF en baisse signale un vieillissement ou un défaut de maintenance.
KPI 27 — MTTR (Mean Time To Repair)¶
| Attribut | Détail |
|---|---|
| Nom FR | MTTR — Temps Moyen de Réparation |
| Nom EN | MTTR — Mean Time To Repair |
| Unité | Heures (ou minutes) |
| Fréquence recommandée | Mensuelle |
| Source de données typique | GMAO |
| Benchmark agroalimentaire | < 1 heure pour les équipements critiques ; < 4 heures pour les équipements non critiques |
| Visualisation recommandée | Barre par machine + courbe de tendance |
Formule de calcul :
MTTR = Temps_total_de_réparation / Nombre_de_pannes
Notes d'implémentation : - Complémentaire du MTBF : la disponibilité se calcule comme MTBF / (MTBF + MTTR). - Un MTTR élevé peut indiquer un manque de pièces de rechange ou un besoin de formation des techniciens.
KPI 28 — Consommation Énergétique (Energy Consumption per Unit)¶
| Attribut | Détail |
|---|---|
| Nom FR | Consommation Énergétique par Unité Produite |
| Nom EN | Energy Consumption per Unit |
| Unité | kWh/unité (ou kWh/tonne) |
| Fréquence recommandée | Quotidienne / Mensuelle |
| Source de données typique | Compteurs énergie (IoT/SCADA), ERP (production) |
| Benchmark agroalimentaire | Très variable selon le process ; objectif de réduction de 1 à 3 % par an (décret tertiaire, ISO 50001) |
| Visualisation recommandée | Courbe d'évolution + ligne d'objectif |
Formule de calcul :
Consommation Énergétique Unitaire = kWh_consommés / Quantité_produite
Notes d'implémentation : - Indicateur RSE de plus en plus suivi par les directions. - Décliner par source d'énergie (électricité, gaz, vapeur) si pertinent. - Croiser avec les données de production pour normaliser (éviter l'effet volume).
KPI 29 — Taux de Rotation des Stocks (Inventory Turnover)¶
| Attribut | Détail |
|---|---|
| Nom FR | Taux de Rotation des Stocks |
| Nom EN | Inventory Turnover |
| Unité | Nombre de rotations/an (ou jours de stock) |
| Fréquence recommandée | Mensuelle |
| Source de données typique | ERP (module stocks, comptabilité) |
| Benchmark agroalimentaire | 8 à 12 rotations/an pour les produits secs ; 20 à 52 rotations/an pour les produits frais (DLC courte) |
| Visualisation recommandée | Jauge + courbe d'évolution |
Formule de calcul :
Rotation des Stocks = Coût_des_marchandises_vendues / Stock_moyen
Jours de Stock = 365 / Rotation des Stocks
Notes d'implémentation : - En agroalimentaire, les DLC (Dates Limites de Consommation) imposent une rotation rapide. - Suivre par catégorie de stock (matières premières, en-cours, produits finis, emballages).
KPI 30 — Coût de Maintenance (Maintenance Cost)¶
| Attribut | Détail |
|---|---|
| Nom FR | Coût de Maintenance |
| Nom EN | Maintenance Cost Ratio |
| Unité | % du CA |
| Fréquence recommandée | Mensuelle |
| Source de données typique | GMAO, ERP (comptabilité analytique) |
| Benchmark agroalimentaire | 2 à 5 % du CA en industrie ; un ratio maintenance préventive/curative > 60/40 est recommandé |
| Visualisation recommandée | Camembert (préventif vs curatif) + courbe d'évolution |
Formule de calcul :
Coût Maintenance (%) = (Coût_total_maintenance / CA) × 100
Ratio Préventif = Coût_maintenance_préventive / Coût_total_maintenance × 100
Ratio Curatif = Coût_maintenance_curative / Coût_total_maintenance × 100
Notes d'implémentation : - L'objectif est d'augmenter la part de maintenance préventive (et prédictive) au détriment du curatif. - Utiliser un graphique en donut dans Metabase pour la répartition préventif/curatif. - Suivre l'évolution du coût total rapporté au CA pour détecter les dérives.
Implémentation BI¶
Structure des vues PostgreSQL recommandées¶
Pour chaque axe, créer des vues matérialisées dans PostgreSQL qui agrègent les données brutes en indicateurs exploitables par Metabase et Superset.
Axe Ventes / Commercial¶
-- Vue matérialisée : KPI Ventes
CREATE MATERIALIZED VIEW mv_kpi_ventes AS
SELECT
date_trunc('month', f.date_facture) AS mois,
c.code_client,
c.raison_sociale,
c.code_postal,
c.departement,
c.region,
c.latitude,
c.longitude,
p.famille_produit,
com.code_commercial,
SUM(fl.prix_unitaire * fl.quantite) AS chiffre_affaires,
COUNT(DISTINCT f.id_facture) AS nb_commandes,
SUM(fl.quantite) AS quantite_vendue
FROM factures f
JOIN facture_lignes fl ON fl.id_facture = f.id_facture
JOIN clients c ON c.id_client = f.id_client
JOIN produits p ON p.id_produit = fl.id_produit
JOIN commerciaux com ON com.id_commercial = c.id_commercial
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
-- Vue : DSO et balance âgée
CREATE MATERIALIZED VIEW mv_kpi_dso AS
SELECT
date_trunc('month', CURRENT_DATE) AS mois,
c.code_client,
c.raison_sociale,
SUM(CASE WHEN f.solde_restant > 0 THEN f.solde_restant ELSE 0 END) AS creances_clients,
SUM(f.montant_ttc) AS ca_ttc_12m,
ROUND(
SUM(CASE WHEN f.solde_restant > 0 THEN f.solde_restant ELSE 0 END)
/ NULLIF(SUM(f.montant_ttc), 0) * 365, 1
) AS dso_jours
FROM factures f
JOIN clients c ON c.id_client = f.id_client
WHERE f.date_facture >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1, 2, 3;
-- Vue : Taux OTIF
CREATE MATERIALIZED VIEW mv_kpi_otif AS
SELECT
date_trunc('month', l.date_livraison) AS mois,
COUNT(*) AS total_livraisons,
SUM(CASE
WHEN l.date_livraison <= cmd.date_livraison_promise
AND l.quantite_livree = cmd.quantite_commandee
THEN 1 ELSE 0
END) AS livraisons_otif,
ROUND(
SUM(CASE
WHEN l.date_livraison <= cmd.date_livraison_promise
AND l.quantite_livree = cmd.quantite_commandee
THEN 1 ELSE 0
END)::NUMERIC / COUNT(*) * 100, 2
) AS taux_otif
FROM livraisons l
JOIN commandes cmd ON cmd.id_commande = l.id_commande
GROUP BY 1;
Axe Comptabilité / Finance¶
-- Vue matérialisée : P&L simplifié mensuel
CREATE MATERIALIZED VIEW mv_kpi_finance AS
SELECT
date_trunc('month', e.date_ecriture) AS mois,
SUM(CASE WHEN co.classe = '7' THEN e.credit - e.debit ELSE 0 END) AS ca,
SUM(CASE WHEN co.compte LIKE '60%' THEN e.debit - e.credit ELSE 0 END) AS cout_marchandises,
SUM(CASE WHEN co.classe = '6' THEN e.debit - e.credit ELSE 0 END) AS total_charges,
SUM(CASE WHEN co.compte LIKE '681%' THEN e.debit - e.credit ELSE 0 END) AS dotations_amort
FROM ecritures_comptables e
JOIN comptes co ON co.id_compte = e.id_compte
GROUP BY 1;
-- Vue : BFR
CREATE MATERIALIZED VIEW mv_kpi_bfr AS
SELECT
date_trunc('month', CURRENT_DATE) AS mois,
(SELECT SUM(valeur_stock) FROM stocks) AS stocks,
(SELECT SUM(solde_restant) FROM factures WHERE type = 'client' AND solde_restant > 0) AS creances_clients,
(SELECT SUM(solde_restant) FROM factures WHERE type = 'fournisseur' AND solde_restant > 0) AS dettes_fournisseurs;
Axe Fabrication / Usine¶
-- Vue matérialisée : TRS par ligne et par jour
CREATE MATERIALIZED VIEW mv_kpi_trs AS
SELECT
date_trunc('day', p.date_production) AS jour,
l.code_ligne,
l.nom_ligne,
SUM(p.temps_fonctionnement) AS temps_fonctionnement,
SUM(p.temps_requis) AS temps_requis,
SUM(p.quantite_produite) AS quantite_produite,
SUM(p.quantite_conforme) AS quantite_conforme,
AVG(p.temps_cycle_theorique) AS temps_cycle_theorique,
-- Disponibilité
ROUND(SUM(p.temps_fonctionnement)::NUMERIC / NULLIF(SUM(p.temps_requis), 0) * 100, 2)
AS disponibilite,
-- Performance
ROUND(
(AVG(p.temps_cycle_theorique) * SUM(p.quantite_produite))
/ NULLIF(SUM(p.temps_fonctionnement), 0) * 100, 2
) AS performance,
-- Qualité
ROUND(SUM(p.quantite_conforme)::NUMERIC / NULLIF(SUM(p.quantite_produite), 0) * 100, 2)
AS qualite,
-- TRS
ROUND(
(SUM(p.temps_fonctionnement)::NUMERIC / NULLIF(SUM(p.temps_requis), 0))
* ((AVG(p.temps_cycle_theorique) * SUM(p.quantite_produite)) / NULLIF(SUM(p.temps_fonctionnement), 0))
* (SUM(p.quantite_conforme)::NUMERIC / NULLIF(SUM(p.quantite_produite), 0))
* 100, 2
) AS trs
FROM production p
JOIN lignes l ON l.id_ligne = p.id_ligne
GROUP BY 1, 2, 3;
-- Vue : MTBF / MTTR par machine
CREATE MATERIALIZED VIEW mv_kpi_maintenance AS
SELECT
date_trunc('month', i.date_intervention) AS mois,
m.code_machine,
m.nom_machine,
m.criticite,
COUNT(CASE WHEN i.type = 'curative' THEN 1 END) AS nb_pannes,
SUM(CASE WHEN i.type = 'curative' THEN i.duree_minutes END) AS temps_reparation_total,
SUM(i.cout_total) AS cout_maintenance,
SUM(CASE WHEN i.type = 'preventive' THEN i.cout_total ELSE 0 END) AS cout_preventif,
SUM(CASE WHEN i.type = 'curative' THEN i.cout_total ELSE 0 END) AS cout_curatif
FROM interventions i
JOIN machines m ON m.id_machine = i.id_machine
GROUP BY 1, 2, 3, 4;
Fréquence de rafraîchissement des données (Prefect ETL)¶
| Vue matérialisée | Fréquence de rafraîchissement | Orchestrateur |
|---|---|---|
mv_kpi_ventes |
Toutes les 4 heures (ou quotidien à 6h) | Prefect flow refresh_ventes |
mv_kpi_dso |
Quotidien à 7h | Prefect flow refresh_dso |
mv_kpi_otif |
Quotidien à 6h | Prefect flow refresh_otif |
mv_kpi_finance |
Quotidien à 8h (après import comptable) | Prefect flow refresh_finance |
mv_kpi_bfr |
Quotidien à 8h | Prefect flow refresh_bfr |
mv_kpi_trs |
Toutes les heures (ou temps réel via CDC) | Prefect flow refresh_trs |
mv_kpi_maintenance |
Quotidien à 6h | Prefect flow refresh_maintenance |
Exemple de flow Prefect pour le rafraîchissement :
from prefect import flow, task
from prefect.blocks.system import Secret
import psycopg2
@task
def refresh_materialized_view(view_name: str):
conn_str = Secret.load("postgres-conn-string").get()
with psycopg2.connect(conn_str) as conn:
with conn.cursor() as cur:
cur.execute(f"REFRESH MATERIALIZED VIEW CONCURRENTLY {view_name};")
conn.commit()
@flow(name="refresh-kpi-ventes")
def refresh_ventes():
refresh_materialized_view("mv_kpi_ventes")
refresh_materialized_view("mv_kpi_dso")
refresh_materialized_view("mv_kpi_otif")
@flow(name="refresh-kpi-finance")
def refresh_finance():
refresh_materialized_view("mv_kpi_finance")
refresh_materialized_view("mv_kpi_bfr")
@flow(name="refresh-kpi-production")
def refresh_production():
refresh_materialized_view("mv_kpi_trs")
refresh_materialized_view("mv_kpi_maintenance")
Dashboards type par profil utilisateur¶
| Profil | Outil principal | KPI affichés | Fréquence de consultation |
|---|---|---|---|
| Direction Générale | Superset (dashboard exécutif) | CA global, Marge Brute, Marge Nette, EBITDA, BFR, Trésorerie, TRS global, OTIF | Hebdomadaire |
| Directeur Commercial | Metabase + Superset (carte géo) | CA par client/zone/produit, Taux de Conversion, Panier Moyen, DSO, Backlog, Pareto clients, Forecast Accuracy, Carte CA géo | Quotidienne |
| Directeur Financier | Metabase | Marge Brute/Nette, EBITDA, BFR (décomposition), DSO, DPO, Trésorerie, Charges fixes/variables, Écarts budgétaires | Hebdomadaire |
| Responsable Production | Metabase (temps réel) | TRS (décomposition), Taux de Rebut, Rendement Matière, Productivité, Temps de Cycle, MTBF/MTTR, Consommation Énergie | Quotidienne / temps réel |
| Responsable Maintenance | Metabase | MTBF, MTTR, Coût Maintenance (préventif vs curatif), TRS (volet disponibilité) | Quotidienne |
| Responsable Qualité | Metabase | TRS (volet qualité), Taux de Rebut (Pareto causes), Rendement Matière, OTIF | Quotidienne |
Utilisation des cartes deck.gl Superset pour le CA géographique¶
Pour visualiser le CA par zone géographique avec deck.gl dans Superset :
-
Prérequis données : la vue
mv_kpi_ventesdoit contenir les colonneslatitudeetlongitudedu client (alimentées par une table de référence codes postaux vers coordonnées GPS). -
Configuration du graphique Superset :
- Type de graphique :
deck.gl Scatter Plot - Source de données :
mv_kpi_ventes - Longitude :
longitude - Latitude :
latitude - Point Size :
chiffre_affaires(taille proportionnelle au CA) - Color :
code_commercialouregion(une couleur par commercial ou par zone) -
Filtres : période, famille produit
-
Alternatives :
deck.gl Arcpour visualiser les flux (usine vers clients).deck.gl Heatmappour la densité de CA.- Choropleth natif Superset pour une vue par département ou région.
Row-Level Security (RLS) Superset pour le cloisonnement¶
La Row-Level Security de Superset permet de restreindre les données visibles selon le profil de l'utilisateur connecté, sans dupliquer les dashboards.
Principe : chaque utilisateur est associé à un ou plusieurs filtres qui s'appliquent automatiquement à toutes les requêtes sur les datasets concernés.
Mise en place :
- Créer les rôles Superset correspondant aux périmètres :
commercial_zone_nord,commercial_zone_sud,commercial_zone_idf, etc.-
filiale_A,filiale_B, etc. -
Configurer les règles RLS dans Superset (menu Security > Row Level Security) :
| Rôle | Dataset | Clause WHERE |
|---|---|---|
commercial_zone_nord |
mv_kpi_ventes |
region IN ('Hauts-de-France', 'Normandie', 'Grand Est') |
commercial_zone_sud |
mv_kpi_ventes |
region IN ('Occitanie', 'PACA', 'Nouvelle-Aquitaine') |
commercial_dupont |
mv_kpi_ventes |
code_commercial = 'DUPONT' |
filiale_A |
mv_kpi_finance |
code_societe = 'A' |
-
Affecter les rôles aux utilisateurs : chaque commercial ne voit que les données de sa zone ; chaque directeur de filiale ne voit que ses données financières.
-
Avantage : un seul dashboard sert tous les profils ; la sécurité est appliquée au niveau des données, pas de l'interface.
Attention : Metabase ne dispose pas nativement de RLS aussi fin. Pour Metabase, utiliser les sandboxes (fonctionnalité de la version Enterprise) ou créer des vues PostgreSQL filtrées par utilisateur avec des variables de session (SET session_authorization).
Sources¶
- Akanea — Tableau de bord KPI : piloter son activité agroalimentaire : https://akanea.com/tableau-de-bord-kpi-piloter-son-activite-agroalimentaire/
- IG Conseils — Ratios financiers industriels : guide de pilotage : https://blog.ig-conseils.com/ratios-financiers-industriels-guide-pilotage/
- Bpifrance — Guide complet sur le TRS : https://conseil.bpifrance.fr/publications/guide-complet-sur-le-trs
- PME Gestion — Tableau de bord : indicateurs de production : https://www.pme-gestion.fr/tableaux-bord-entreprise/indicateurs-kpi/tableau-de-bord-indicateurs-de-production.html
- Tool Advisor — KPI financiers : https://tool-advisor.fr/blog/kpi-financiers/
- Defacto — KPI financiers : https://www.getdefacto.com/fr/article/kpi-financiers
- KPI-TRS.com — Calcul du TRS : https://www.kpi-trs.com/calcul-du-trs
- Norme NF E60-182 — Moyens de production : indicateurs de performances — TRS/OEE
- Norme ISO 22400 — Automation systems and integration — Key performance indicators (KPIs) for manufacturing operations management