EDIT : L’erreur était débile ce sujet peut être fermé ==> Je bouclais une fois de trop et numpy donnait des coefficient "presque" entier (4.999999999999 au lieu de 5 par exemple) Bonjour à tous,
Dans le cadre de mon taff j’essaye de générer depuis une BDD des Burndown de l’avancée de chacune des EPICs de notre planning Agile.
Mon programme se coupera en deux : un script lancé quotidiennement pour aller récupéré dans l’API de notre outil l’avancement de chaque EPIC et un dashboard qui lit cette BDD et va générer un Dashboard
J’ai pris la librairie Dash qui semblait faire l’unanimité pour ca sur pas mal de site cependant je recontre un problème très con (je sais qu’il y a une erreur mais même après 5 relecture je ne la vois pas ) : Dans mes burndown la droite "optimale" n’arrive pas à 0
Voici le code de mon app.py :
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
import sqlite3
import numpy as np
#import des données depuis la BDD (test avec SQLite)
connexion = sqlite3.connect("test.db")
curseur = connexion.cursor()
curseur.execute('''SELECT * FROM epic''')
resultat = curseur.fetchall()
gigaDico = {}
for elt in resultat:
idEpic = elt[0]
epicNom = elt[1]
workload= elt[2]
startDate = elt[3]
endDate = elt[4]
gigaDico[epicNom]={'dateDebut':startDate,'dateFin':endDate,'workload':workload,'releve':{}}
curseur.execute("SELECT * FROM releve WHERE id_epic=?",(elt[0],))
resultats = curseur.fetchall()
i=1
for elt in resultats:
dateReleve = elt[3]
restant = elt[2]
gigaDico[epicNom]['releve'][i]=(dateReleve,restant)
i+=1
connexion.close()
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
output=[]
#Ajout du titre
output.append(html.H1(
children='Dashboard Neurone',
style={
'textAlign': 'center',
'color': '#7FDBFF'
}
))
#Génération des Burndown pour chaque EPIC présente en base
for key in gigaDico:
listeX=[]
listeY=[]
data = gigaDico[key]['releve']
dateA= gigaDico[key]['dateDebut']
dateB= gigaDico[key]['dateFin']
workDebut = gigaDico[key]['workload']
for elt in data:
tupleTempo = data[elt]
listeX.append(tupleTempo[0])
listeY.append(tupleTempo[1])
nb_IT = len(listeX)
point1=[0,workDebut]
point2=[nb_IT,0]
coefficients = np.polyfit(point1, point2, 1)
a=coefficients[0]
b=coefficients[1]
listeYOptim=[]
x=0
while x <=nb_IT:
valeur = (a*x)+b
listeYOptim.append(valeur)
x+=1
output.append(
dcc.Graph(
figure=dict(
data=[
dict(
x=listeX,
y=listeYOptim,
name='Optimal',
marker=dict(
color='rgb(0, 255, 0)'
)
),
dict(
x=listeX,
y=listeY,
name='Réalité',
marker=dict(
color='rgb(26, 118, 255)'
)
)
],
layout=dict(
title='Burndown '+str(key),
showlegend=True,
plot_bgcolor='#111111',
paper_bgcolor='#111111',
font = {
'color': '#7FDBFF'
},
xaxis=dict(title='Date'),
yaxis=dict(title='Workload'),
legend=dict(
x=0,
y=0.1
),
margin=dict(l=40, r=0, t=40, b=30)
)
),
style={'height': 300, 'width:':'50%','backgroundColor': '#111111', 'margin':'2%',"border":"1px solid grey"},
id='burwdown_'+str(key)
)
)
app.layout = html.Div(style={'backgroundColor': '#111111'}, children=output)
if __name__ == '__main__':
app.run_server(debug=True)
Pour ceux n’étant pas habitué a ce type de graphique en gestion Agile : la droite Optimale permet de savoir la charge de travail parfaite pour passer de (Debut,Charge de travail totale a (Date fin prévue,charge de travail a 0)
Conaissant ces deux points j’ai décidé d’utiliser numpy pour calculer le coefficient de la droite et pouvoir calculer les points intermédiaire . Cependant la droite s’arrete a 1 en dernier point et non a zero :
Pour info la BDD est ultra simple :
Table EPIC :
Table releve:
J’ai beau chercher je ne comprend pas où j’ai commis une erreur
Merci mille fois à ceux qui pourront m’aider