Aller au contenu

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

  1. Axe 1 — Ventes / Commercial (KPI 1 à 10)
  2. Axe 2 — Comptabilité / Finance (KPI 11 à 20)
  3. Axe 3 — Fabrication / Usine (KPI 21 à 30)
  4. Implémentation BI — Metabase + Superset + PostgreSQL
  5. 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 :

  1. Prérequis données : la vue mv_kpi_ventes doit contenir les colonnes latitude et longitude du client (alimentées par une table de référence codes postaux vers coordonnées GPS).

  2. Configuration du graphique Superset :

  3. Type de graphique : deck.gl Scatter Plot
  4. Source de données : mv_kpi_ventes
  5. Longitude : longitude
  6. Latitude : latitude
  7. Point Size : chiffre_affaires (taille proportionnelle au CA)
  8. Color : code_commercial ou region (une couleur par commercial ou par zone)
  9. Filtres : période, famille produit

  10. Alternatives :

  11. deck.gl Arc pour visualiser les flux (usine vers clients).
  12. deck.gl Heatmap pour la densité de CA.
  13. 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 :

  1. Créer les rôles Superset correspondant aux périmètres :
  2. commercial_zone_nord, commercial_zone_sud, commercial_zone_idf, etc.
  3. filiale_A, filiale_B, etc.

  4. 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'
  1. 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.

  2. 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