Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abHallo, ich benötige Hilfe beim Erstellen einer Formel, um anhand von Bedingungen eine aktuellste Zeile zu finden und einen anderen Spaltenwert abzurufen bzw. Berechnungen zwischen zwei Zeilenparametern (DateTime) durchzuführen.
Die folgende Datentabelle (ebenfalls im Anhang) enthält die Spalten „Asset“, „DateTime“, „Discrete“ und „Action“.
Die Daten werden zuerst nach Asset und dann nach DateTime (aufsteigend) sortiert.
Es gibt auch eine Tabellenvariable days_threshold = 4.
Aktion (Gewünscht) ist die gewünschte Form der Aktion, in der die aktuelle Formel enthalten ist

muss geändert werden.
Jede Zeile, die a erhält Diskret = 1 (was normalerweise durch eine hier übersprungene Formelregel bestimmt wird und stattdessen Beispielwerte bereitgestellt werden), Aktion muss anfangen, auf seine eigenen vorherigen Zeilen zu schauen (in Terminzeit absteigende Form). Zwei Bedingungen bei dieser Suche sind:
1- Auf der Suche nach dem Gleichen Anlage wofür Diskret =1 (also entweder XY01 oder XY02)
2- Schauen Sie bis zum letzten Wert von Aktion = 1 gefunden .
Berechnen Sie die Anzahl der Tage zwischen dem letzten Mal, als die Aktion 1 war, und der Datum/Uhrzeit der aktuellen Zeile.
Wenn die Differenz (in Tagen) >= days_threshold = 4 ---> ist, dann ist die Aktion der aktuellen Zeile = 1
Andernfalls ist die Differenz (in Tagen) < days_threshold --->, dann ist die Aktion der aktuellen Zeile = 0
Ich bin nur daran interessiert, den letzten Zeitpunkt zu finden, an dem die Aktion „1“ war ... Sobald dieser einzelne Wert gefunden wurde (falls vorhanden), kann die Suche an diesem Punkt beendet werden. Die Suche ist auf das erste Vorkommen dieses Assets (d. h. den ältesten Datensatz) beschränkt. Wenn die Aktion noch nie auf „1“ gesetzt wurde, kann die Aktion der aktuellen Zeile auf „1“ gesetzt werden.
Zeile 2 ist beispielsweise das erste Mal, dass XY01 Action =1 erhält (basierend auf Discrete, das selbst an einige Regeln gebunden ist und in diesem Beispiel nur mit Werten angezeigt wird).
Als nächstes wird in Zeile 3 „Diskret“ wieder auf 1 gesetzt, aber dieses Mal muss „Aktion“ 0 sein, da die Anzahl der Tage Unterschied zwischen vorherigen und aktuellen Zeilen 0 ist (< Tage_Schwelle).
In ähnlicher Weise bleibt die Aktion für Zeile 5 immer noch 0, da seit dem letzten Mal, als die Aktion 1 war, nur drei Tage vergangen sind.
Schließlich wird Action in Zeile 6 auf „1“ gesetzt.
Es wurden zwei Assets bereitgestellt, die dieser Idee folgen: Legen Sie die gewünschten Werte auf „Aktion (Gewünscht)“ fest.
Mir ist es lieber, wenn es sich um eine Formel handelt, nicht um ein Skript.
Vielen Dank im Voraus, JMP-Team.
Altug Bayram

Datenmischung und -bereinigungQualitäts- und VerfahrenstechnikBetreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abJarmo
Das hat hervorragend funktioniert.Es hat auch mein Verständnis dafür erweitert, dass Formeln eine komplexere Logik enthalten, wenn sie durch „;“ getrennt werden.
Interessant ist auch, dass 0 in diesem Fall als Start-Reset für einen DateTime-Parameter fungiert.
Jarmo/Jim – vielen Dank für die extrem schnelle Hilfe in diesem Zusammenhang... danke für die Unterstützung.
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abAußerdem verwende ich in Formeln häufig Verzögerung und Datumsdifferenz. Da dies jedoch als Code etwas komplizierter wird und ich keine Erfahrung mit der Integration von Skripten in Formeln habe, fällt mir das etwas schwer. Wenn die Absicht eher auf der Anzahl der Datensätze als auf den Kalendertagen lag, könnte ich dies aufgrund der verfügbaren Indexfunktion problemlos tun. Die „Tages“-Anforderung macht es schwieriger.
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abDies wäre nur der Formelteil, und Sie sollten ihn direkt über die Spalteninformationen zur Formel hinzufügen können, nachdem Sie eine neue Spalte erstellt haben
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
Ich habe auch die Tabelle beigefügt. Und wenn Sie mit Formeln noch nicht so vertraut sind, können Sie einige Teile davon lesen Verwenden von JMP > Formeln in JMP erstellen
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abHallo, könnten Sie bitte Ihre Version anhängen, damit ich sehen kann, wie das Skript in die Formel integriert ist? Ich bin ein Neuling darin, Skripte in Formeln einzufügen.
Danke.
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abMeine Formel sollte immer noch einwandfrei funktionieren, da sie bereits Tage statt Monate verwendet (ich habe die Umrechnung in meiner Testtabelle durchgeführt, sie aber vergessen). Aktion2 ist das Ergebnis der von mir bereitgestellten Formel und es gibt keinen Unterschied zwischen ihr und der Spalte „Aktion (Gewünscht)“:

Ich schlage vor, den Scripting-Index für „As Constant“, „Date Difference“ und „Lag“ zu prüfen. Diese sollen zum Verständnis der Formel beitragen
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abBitte sehen Sie sich unten meine nächste Version mit dem korrigierten DateTime-Format an (es hätte M/D/Y sein sollen ...)
Ich suche nach einer Formel, die dies nach Möglichkeit kann. Danke.
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abIch habe das Format von DateTime in dieser nächsten Version korrigiert. Vielen Dank für Ihre Hilfe.
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abDie Einschränkung „Tage“ misst die Kalenderzeit – „wie viele Tage sind vergangen, seit die Aktion 1 war“ ist die Frage.
Mir ist klar, dass ich das Format der DateTime-Spalte falsch als D/M/Y eingegeben habe
Es hätte M/D/Y sein sollen ...
Ich entschuldige mich für den Fehler.
Die Reihen 3 und 5 befinden sich also am 2. bzw. 5. Juni.
Wäre es möglich, hierfür eine Formel zu erstellen?
Vielen Dank an das JMP-Team.
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abIch habe eine Frage zu Ihrer DateTime-Kolumne.Wie Sie es definiert haben, wurden alle Werte für das Asset = „XY01“ am 6. Tag verschiedener Monate für das Jahr 2022 gemessen.
Zeile 3 = 6. Februar 2022
Zeile 5 = 6. Mai 2022
Das ist ein Abstand von 89 Tagen, Sie geben jedoch an, dass die gewünschte Aktion 0 ist.
@jthi Die Antwort zeigt eine Aktion von 1, ebenso wie meine eigene unabhängige Berechnung.
Was fehlt uns?
Betreff: Formel – So finden Sie die aktuellste Zeile (basierend auf Bedingungen) und rufen den Wert aus einer anderen Spalte abSo etwas könnte funktionieren:
dt << New Column("Action", Numeric, Nominal, Formula(
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
));