Definieren Sie ein Datumsintervall zwischen Monatsanfang und heutigem Datum JMP16Guten Morgen,
Seit heute Morgen habe ich ein Problem mit meinem Skript auf JMP und benötige bitte Ihre Hilfe.
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– Diese Funktion verwendet ein Datum als Eingabe und gibt den Tag des Monats als Zahl zurück.
axe1:get_dates– Diese Funktion ruft das Startdatum des aktuellen Monats und das heutige Datum ab.
Dann eine Funktion zur Berechnung:
//nb_total_ict und nb_total_fct: ermöglichen es Ihnen, die Gesamtzahl der durchgeführten Tests zu zählen
//nb_nok_ict und nb_nok_fct: ermöglichen es Ihnen, die Anzahl der Noks unter allen Tests zu zählen
Zur Berechnung des NOK-Prozentsatzes für ICT und FCT zwischen Monatsanfang und heutigem Datum.
Im Anhang finden Sie eine Kopie eines Teils meines Codes.
Ich danke Ihnen im Voraus.
Aufrichtig,
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)) || "%")
)
)
)
);
);
Automatisierung und SkriptingWindowsBetreff: Definieren Sie ein Datumsintervall zwischen Monatsanfang und heutigem Datum JMP16Was ist Ihr Problem (die Übersetzung in der Community ist möglicherweise falsch, da ich das Problem nicht so leicht finden konnte)? Höchstwahrscheinlich möchten Sie Date Difference() oder Date Increment() verwenden. Verwenden Sie „month“ als Intervallnamen und „start“ als Ausrichtung, um das erste Datum des Monats zu erhalten. Zum Beispiel das erste Datum dieses Monats
Date Increment(Today(), "Month", 0, "start");
JMP verfügt auch über Month(), um den Monat des Datums abzurufen, und viele weitere Datums-/Uhrzeitfunktionen , die für diese Art von Arbeit nützlich sein könnten

Betreff: Definieren Sie ein Datumsintervall zwischen Monatsanfang und heutigem Datum JMP16Ich habe versucht, zwei Funktionen zu definieren, um das Startdatum des Monats und das heutige Datum abzurufen, um den Prozentsatz der NOK-Ergebnisse in einer Tabelle für ICT und FCT basierend auf einer Datumstabelle (dt) zu berechnen.
ich habe verwendet
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.
aber jedes Mal bekomme ich diese Fehlermeldung:
JMP-Alarm
Die Symbolauswertung ist zu rekursiv (>250 Ebenen),in Zeile 1 beim Zugriff oder bei der Auswertung von << start_of_month,Monatsanfang
in Zeile 1
Es wurde ein Stapelüberlauf erkannt.Die maximale Anzahl an Anrufebenen wurde überschritten.Die Ausführung wurde in Zeile 1 beendet.
Betreff: Definieren Sie ein Datumsintervall zwischen Monatsanfang und heutigem Datum JMP16Ich vermute, das Problem liegt an Ihrer For-Schleife. Höchstwahrscheinlich kann sie optimiert werden und Sie müssen nicht einmal eine Schleife verwenden. Wenn Sie die Zeilen bereits kennen, können Sie beispielsweise die Indizierung von Datentabellen verwenden, um die gewünschten Werte aus der Tabelle abzurufen. Sie können höchstwahrscheinlich auch Subset + Summary verwenden, um die Berechnungen durchzuführen.
Wenn Sie ein kleines Beispiel Ihrer Daten (oder ein Modelldatum) zur Verfügung stellen können, das zur Demonstration verwendet werden kann, kann ich Ihnen weitere Vorschläge machen. Wenn Sie ein Beispiel zur Verfügung stellen können, versuchen Sie auch, einige Informationen zu den korrekten Ergebnissen bereitzustellen.
Betreff: Definieren Sie ein Datumsintervall zwischen Monatsanfang und heutigem Datum JMP16zwei Möglichkeiten, die zweite scheint wahrscheinlich.
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 kann global sein und zwischen den Funktionen verwechselt werden
2: Die Liste, die Sie zurückgeben, enthält die Namen der Variablen, nicht die Werte, und sie werden in ... sich selbst gespeichert. Ich denke, das wird die Rekursion sein.
(Gut aussehender Code!)
Betreff: Definieren Sie ein Datumsintervall zwischen Monatsanfang und heutigem Datum JMP16Ich möchte mich für Ihre Anregungen und Hilfe bedanken.
Ich habe meine get_dates-Funktion geändert, mit der ich das heutige Datum und das Datum des Monatsanfangs erhalten habe, und eine andere For-Schleife verwendet, da ich in der ursprünglichen Schleife einige Fehler gefunden habe. Ihre Vorschläge waren jedoch sehr hilfreich
das ist die get_dates-Funktion:
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});
);Nochmals vielen Dank für alles!