Définir une intervalle de date entre début de mois jusqu'au la date d'aujourd'hui JMP16Bonjour,
Je rencontre depuis ce matin un problème avec mon script sur JMP et j'ai besoin de votre aide svp.
J'ai essayé de définir deux fonctions pour avoir la date de début de mois et la date d'aujourd'hui :
axe1:get_day_of_month - Cette fonction prend une date en entrée et renvoie le jour du mois sous forme de nombre.
axe1:get_dates - Cette fonction récupère la date de début du mois en cours et la date du jour.
Puis une fonction pour calculer :
//nb_total_ict et nb_total_fct : permettent de compter le nombre total de tests effectués
//nb_nok_ict et nb_nok_fct : permettent de compter le nombre de nok parmi tous les tests
Afin de calculer le pourcentage de NOK pour les ICT et les FCT entre le début de mois et la date d'aujourd'hui.
vous trouvez ci-joint une copie de la partie de mon code.
Je vous remercie par avance.
Cordialement,
Yass
// Fonction pour obtenir le jour du mois
axe1:get_day_of_month = Function({date},
day_of_month = Num(Format(date, "dd"));
day_of_month
);
// Fonction pour récupérer les dates
axe1:get_dates = Function({},
today_date = Format(Today(), "yyyy-mm-dd");
day_of_month = axe1:get_day_of_month(Today());
start_of_month = Format(Today() - (day_of_month - 1), "yyyy-mm-dd");
{start_of_month, today_date}
);
// Fonction pour calculer les pourcentages de NOK
axe1:calculate_nok_percentages = Function({dt},
{start_of_month, today_date} = axe1:get_dates();
// Initialisation des variables
nb_total_ict = 0;
nb_total_fct = 0;
nb_nok_ict = 0;
nb_nok_fct = 0;
// Récupération des lignes correspondant à la période spécifiée
FileRows = dt << Get Rows Where(
Num(Char(:Date)) >= Num(start_of_month) & Num(Char(:Date)) <= Num(today_date) & Contains(:File Name, "GOLDEN") == 0
);
total_rows = N Items(FileRows);
For(j = 1, j <= total_rows, j++,
If(dt:ICT_FCT[FileRows[j]] == "ICT",
nb_total_ict += dt:Nb_de_lignes[FileRows[j]];
If(dt:Result[FileRows[j]] == "NOK",
nb_nok_ict += dt:Nb_de_lignes[FileRows[j]]
)
);
If(dt:ICT_FCT[FileRows[j]] == "FCT",
nb_total_fct += dt:Nb_de_lignes[FileRows[j]];
If(dt:Result[FileRows[j]] == "NOK",
nb_nok_fct += dt:Nb_de_lignes[FileRows[j]]
)
);
);
// Calcul des pourcentages NOK
percent_nok_ict = (nb_nok_ict / nb_total_ict) * 100;
percent_nok_fct = (nb_nok_fct / nb_total_fct) * 100;
// Affichage des résultats
Window("Analyse des données") << Append(
V List Box(
Outline Box("Résultat NOK",
Border Box(
Text Box("Pourcentage de NOK ICT du " || start_of_month || " au " || today_date || " : " || Char(Round(percent_nok_ict, 2)) || "%"),
Text Box("Pourcentage de NOK FCT du " || start_of_month || " au " || today_date || " : " || Char(Round(percent_nok_fct, 2)) || "%")
)
)
)
);
);
Automation and ScriptingWindowsRe: Définir une intervalle de date entre début de mois jusqu'au la date d'aujourd'hui JMP16Quel est le problème que vous rencontrez (la traduction dans la communauté peut être incorrecte car je n'ai pas vraiment trouvé le problème facilement) ? Vous souhaitez probablement utiliser Date Difference() ou Date Increment() . Utilisez "mois" comme nom d'intervalle et "début" comme alignement pour obtenir la première date du mois. Par exemple le premier jour de ce mois
Date Increment(Today(), "Month", 0, "start");
JMP dispose également de Month() pour obtenir le mois de la date et de nombreuses autres fonctions datetime qui pourraient vous être utiles pour ce type de travail.

Re: Définir une intervalle de date entre début de mois jusqu'au la date d'aujourd'hui JMP16J'ai essayé de définir deux fonctions pour obtenir la date de début du mois et la date du jour afin de calculer le pourcentage de résultats NOK dans un tableau pour ICT et FCT basé sur un tableau de dates (dt).
j'ai utilisé
axe1:get_day_of_month - This function takes a date as input and returns the day of the month as a number.axe1:get_dates - This function gets the start date of the current month and today's date.axe1:calculate_nok_percentages - This function calculates the percentage of NOK results for ICT and FCT based on a date table (dt). It filters the data for rows where the file name does not contain "GOLDEN" and then calculates the percentage of NOK for ICT and FCT for the specified date range.
mais à chaque fois j'ai ce message d'erreur :
Alerte JMP
L'évaluation des symboles est trop récursive (>250 niveaux),en ligne 1 lors de l'accès ou de l'évaluation du << start_of_month,début_du_mois
sur la ligne 1
Un débordement de pile a été détecté.Le nombre maximum de niveaux d'appel a été dépassé.Exécution terminée sur la ligne 1
Re: Définir une intervalle de date entre début de mois jusqu'au la date d'aujourd'hui JMP16Je suppose que le problème vient de votre boucle For. Très probablement, il peut être optimisé et vous n'aurez même pas besoin d'utiliser une boucle. Si vous connaissez déjà les lignes, vous pouvez utiliser par exemple l'indice du tableau de données pour obtenir les valeurs souhaitées dans le tableau. Vous pouvez également très probablement utiliser Subset + Summary pour effectuer les calculs.
Si vous pouvez fournir un petit exemple de vos données (ou une date de simulation) qui peut être utilisée pour démontrer, je peux donner plus de suggestions. De plus, si vous pouvez fournir un exemple, essayez de fournir des informations sur les résultats corrects.
Re: Définir une intervalle de date entre début de mois jusqu'au la date d'aujourd'hui JMP16deux possibilités, la 2ème semble probable.
axe1:get_day_of_month = Function({date},
{ day_of_month },// 1: use local variables
day_of_month = Num(Format(date, "dd"));
day_of_month
);
// Fonction pour récupérer les dates
axe1:get_dates = Function({},
today_date = Format(Today(), "yyyy-mm-dd");
day_of_month = axe1:get_day_of_month(Today());
start_of_month = Format(Today() - (day_of_month - 1), "yyyy-mm-dd");
// 2: use evallist
evallist( {start_of_month, today_date} )
);
1 : day_of_month peut être global et peut être confondu entre les fonctions
2 : la liste que vous retournez contient les noms des variables, pas les valeurs, et elles sont stockées dans...elles-mêmes. Je pense que ce sera la récursion.
(Joli code !)
Re: Définir une intervalle de date entre début de mois jusqu'au la date d'aujourd'hui JMP16Je tiens à vous remercier pour vos suggestions et votre aide.
J'ai fini par modifier ma fonction get_dates où j'ai obtenu la date du jour et la date du début du mois et en utilisant une boucle For différente car j'ai trouvé des erreurs dans la boucle d'origine. Cependant, vos suggestions ont été très utiles
c'est la fonction get_dates :
axe1:get_dates = Function({},
today_date = Format(Today(), "yyyy-mm-dd");
start_of_month = Format(Date Increment(Today(), "Month", 0, "Start"), "yyyy-mm-dd");
evallist({start_of_month, today_date});
);Merci encore pour tout !