Des fichiers sources imparfaits à un entrepôt fiable.
Commandes, catalogue produits, livraisons fournisseurs, stocks et ventes d'une chaîne de magasins simulée, réunis dans un schéma en étoile. Trois questions métier : où manque-t-il du stock, quels fournisseurs tiennent leurs promesses, et à quelle vitesse le stock tourne-t-il ?
L'activité en un coup d'oeil
Chiffre d'affaires converti en euros au taux du jour, marge calculée avec le coût valable au moment de la vente (historique SCD type 2).
Chiffre d'affaires et marge par jour
EUR, toutes enseignes. Les pics du samedi viennent des promotions.
Par catégorie
Chiffre d'affaires, EUR
Par magasin
Les magasins suisses vendent en CHF : montants convertis en EUR.
Où le rayon est vide
Un produit est en rupture quand son stock de fin de journée vaut zéro. Les ventes perdues sont une estimation : la vente moyenne du produit les jours où il était disponible.
Taux de rupture par jour
Part des couples magasin x produit à zéro en fin de journée
Par jour de semaine
Taux de rupture moyen
Par catégorie
Taux de rupture et ventes perdues estimées
Par magasin
Taux de rupture et ventes perdues estimées
Produits le plus souvent en rupture
Jours magasin en rupture sur toute la période
Qui tient ses promesses
Chaque ligne de commande suit ses étapes : commandée, promise, livrée. OTIF = livrée à l'heure ET en totalité. Seules les lignes livrées ou dont la date promise est passée sont comptées.
Taux OTIF par fournisseur
Trié du meilleur au moins bon
Délai promis et délai réel
Jours entre la commande et la première livraison
Evolution mensuelle
Par mois de commande
Statut des lignes de commande
A la dernière date chargée
Le stock qui dort
Rotation = coût des ventes / valeur moyenne du stock (au coût). Ramenée à une année pour comparer des périodes de longueur différente. Jours de stock = combien de temps le stock moyen dure.
Rotation annualisée par catégorie
Plus la barre est longue, plus le stock tourne vite
Jours de stock par catégorie
Combien de jours de ventes le stock moyen couvre
Valeur du stock par jour
EUR au coût, toutes enseignes
Produits à rotation lente
Plus grand nombre de jours de couverture
Rien ne se perd en silence
Chaque ligne source finit soit dans l'entrepôt, soit en quarantaine avec son motif. Les doublons ne gonflent pas les montants, les lignes en retard sont rangées à leur vraie date, et chaque chargement est rapproché des totaux envoyés par la source.
Lignes isolées par motif
Tables quarantine.*, toutes sources
Ventes arrivées en retard
Ecart entre le jour de la vente et le jour du fichier, hors jour même
Rapprochement avec les totaux sources
Dernière exécution, table audit.reconciliation
Etapes du pipeline
Table audit.pipeline_runs
Indicateurs d'anomalie simulés
Règles simples et explicables. Ce ne sont pas des preuves de vol ou de fraude.
Tests de performance
benchmarks/run_benchmark.py, sur un ordinateur portable
Le chemin d'une donnée
Airflow lance chaque jour le chargement, la transformation dbt, les tests et le rapprochement. Les couches sont séparées : brut, nettoyé, modèle en étoile, quarantaine et audit.
Faits
fct_sales (ligne de ticket, incrémental), fct_inventory_daily (photo quotidienne, incrémental), fct_purchase_order_lines (snapshot accumulatif).
Dimensions
dim_product (SCD type 2 : prix, coût, fournisseur), dim_store et dim_supplier (SCD type 1), dim_date.
Données en retard
Fenêtre de retraitement de 3 jours, membre "produit inconnu" corrigé au run suivant, historique SCD2 reconstruit à chaque run.