Definire un intervallo di date tra l'inizio del mese e la data odierna JMP16Buongiorno,
Da stamattina ho riscontrato un problema con il mio script su JMP e ho bisogno del tuo aiuto, per favore.
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- Questa funzione accetta una data come input e restituisce il giorno del mese come numero.
axe1:get_dates- Questa funzione recupera la data di inizio del mese corrente e la data odierna.
Quindi una funzione per calcolare:
//nb_total_ict e nb_total_fct: permettono di contare il numero totale di test effettuati
//nb_nok_ict e nb_nok_fct: permettono di contare il numero di nok tra tutti i test
Per calcolare la percentuale di NOK per ICT e FCT tra l'inizio del mese e la data odierna.
In allegato c'è una copia di parte del mio codice.
Ti ringrazio anticipatamente.
Cordiali saluti,
Sì
// 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)) || "%")
)
)
)
);
);
Automazione e scriptingfinestreRi: Definire un intervallo di date tra l'inizio del mese e la data odierna JMP16Qual è il problema che stai riscontrando (la traduzione nella community potrebbe non essere corretta poiché non sono riuscito a trovare facilmente il problema)? Molto probabilmente desideri utilizzare Date Difference() o Date Increment() . Utilizza "mese" come nome intervallo e "inizio" come allineamento per ottenere la prima data del mese. Ad esempio il primo appuntamento di questo mese
Date Increment(Today(), "Month", 0, "start");
JMP dispone anche di Month() per ottenere il mese della data e molte altre funzioni datetime che potresti trovare utili per questo tipo di lavoro

Ri: Definire un intervallo di date tra l'inizio del mese e la data odierna JMP16Ho provato a definire due funzioni per ottenere la data di inizio del mese e la data odierna per calcolare la percentuale dei risultati NOK in una tabella per ICT e FCT basata su una tabella di date (dt).
ho usato
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.
ma ogni volta ricevo questo messaggio di errore:
Avviso JMP
La valutazione dei simboli è troppo ricorsiva (>250 livelli),sulla riga 1 durante l'accesso o la valutazione di << inizio_del_mese,inizio_del_mese
sulla linea 1
È stato rilevato un overflow dello stack.È stato superato il numero massimo di livelli di chiamata.Esecuzione terminata sulla linea 1
Ri: Definire un intervallo di date tra l'inizio del mese e la data odierna JMP16Immagino che il problema riguardi il tuo ciclo For. Molto probabilmente può essere ottimizzato e non avrai nemmeno bisogno di usare un loop. Se hai già la conoscenza delle righe puoi utilizzare ad esempio l'indice della tabella dati per ottenere i valori desiderati dalla tabella. Molto probabilmente potresti anche utilizzare Sottoinsieme + Riepilogo per eseguire i calcoli.
Se puoi fornire un piccolo esempio dei tuoi dati (o una data di aggiornamento simulato) che può essere utilizzato per dimostrare, posso dare ulteriori suggerimenti. Inoltre, se puoi fornire un esempio, prova a fornire alcune informazioni sui risultati corretti.
Ri: Definire un intervallo di date tra l'inizio del mese e la data odierna JMP16due possibilità, la seconda sembra probabile.
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: giorno_del_mese può essere globale e può essere confuso tra le funzioni
2: l'elenco restituito ha i nomi delle variabili, non i valori, e vengono memorizzati in... se stessi. Penso che questa sarà la ricorsione.
(Codice carino!)
Ri: Definire un intervallo di date tra l'inizio del mese e la data odierna JMP16Vorrei ringraziarvi per i vostri suggerimenti e aiuto.
Ho finito per modificare la mia funzione get_dates in cui ho ottenuto la data di oggi e la data di inizio mese e ho utilizzato un ciclo For diverso perché ho trovato alcuni errori nel ciclo originale. Comunque i tuoi suggerimenti sono stati molto utili
questa è la funzione 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});
);Grazie ancora per tutto!