Près de 1750 tickets fictifs sur 24 mois, avec des cibles SLA différenciées par priorité — 4h pour le critique, 72h pour le bas.
Suivi d'indicateurs opérationnels (SLA, satisfaction), requêtes SQL par dimension, vérification d'hypothèses en Python.
| ID | Date | Catégorie | Priorité | Canal | Statut | Résolution (h) | Satisfaction |
|---|
Une table de faits « Tickets » reliée à trois dimensions — chaque filtre du dashboard ci-dessus correspond à une jointure sur une dimension.
Voici quelques extraits de code utilisés pour la conception de ce projet.
Question métier : quelles catégories de tickets respectent le moins les délais cibles, pour prioriser le renfort d'équipe ?
SELECT
c.nom_categorie,
COUNT(*) AS nb_tickets,
ROUND(100.0 * SUM(CASE WHEN f.statut = 'En retard' THEN 1
ELSE 0 END) / COUNT(*), 1) AS taux_retard_pct,
ROUND(AVG(f.temps_resolution_h), 1) AS temps_moyen_h
FROM fact_tickets f
JOIN dim_categorie c ON c.id_categorie = f.id_categorie
WHERE f.date >= DATEADD(month, -12, CURRENT_DATE)
GROUP BY c.nom_categorie
ORDER BY taux_retard_pct DESC;
Vérification que les tickets en retard sont bien associés à une satisfaction plus faible — validation d'une hypothèse métier avant de la présenter en comité.
import pandas as pd
df = pd.read_sql("SELECT * FROM fact_tickets WHERE statut != 'En cours'", conn)
df["en_retard"] = df["statut"].eq("En retard")
satisfaction_par_statut = df.groupby("en_retard")["satisfaction"].mean()
correlation = df[["temps_resolution_h", "satisfaction"]].corr().iloc[0, 1]
print("Satisfaction moyenne (a temps vs en retard):")
print(satisfaction_par_statut.round(1))
print(f"Correlation temps de resolution / satisfaction : {correlation:.2f}")