JSL berechnet die verstrichene Zeit innerhalb der Spalte anhand einer VariablenHallo,
Ich frage mich, ob es möglich ist, eine JSL-Spaltenformel zu erstellen, um die Anzahl der Tage zwischen der Beobachtung einer ID INNERHALB derselben DATUM-Spalte zu berechnen (z. B. „Nach ID, verstrichene Tage nach DATUM berechnen“).Die Ausgabe würde das/die Auftreten(s) derselben ID auswerten und die verstrichene Zeit zwischen jedem Auftreten derselben ID berechnen.Dies ist kein Vergleich von Spalte A mit Spalte B, sondern eine Auswertung innerhalb von Spalte A (innerhalb derselben Spalte).
Beachten Sie, dass die erste Beobachtung einer beliebigen ID leer ist, da kein Vergleich vorliegt (erste Beobachtung).Nach der ersten Beobachtung würden die Berechnungen wie folgt funktionieren: 1. vs. 2. ... 2. vs. 3. ... und so weiter.
Nachfolgend finden Sie einen Konzeptentwurf.Vielen Dank für jede Hilfe.
| AUSWEIS | DATUM | ELAPSED_DAYS |
| ABC123 | 01.01.2021 | |
| ABC123 | 31.10.2021 | 303 |
| ABC123 | 30.06.2023 | 607 |
| EFG567 | 30.06.2021 | |
| EFG567 | 31.10.2021 | 123 |
| XYZ901 | 31.05.2021 | |
Automatisierung und SkripterstellungSkripterstellungBetreff: JSL berechnet die verstrichene Zeit innerhalb der Spalte anhand einer VariablenVerwenden Sie Col Min() und Date Difference. Wenn Sie wirklich möchten, dass die erste Beobachtung einen fehlenden Wert aufweist, können Sie eine if-Anweisung hinzufügen, um dies zu überprüfen
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(6),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values({"ABC123", "ABC123", "ABC123", "EFG567", "EFG567", "XYZ901"})
),
New Column("DATE",
Numeric,
"Continuous",
Format("m/d/y", 12),
Input Format("m/d/y"),
Set Values([3692304000, 3718483200, 3770928000, 3707856000, 3718483200, 3705264000])
),
New Column("ELAPSED_DAYS",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([., 303, 607, ., 123, .])
)
);
dt << New Column("elapseddays", continuous, numeric, Formula(
Date Difference(Col Min(:Date, :ID), :Date, "day"))
);

Betreff: JSL berechnet die verstrichene Zeit innerhalb der Spalte anhand einer VariablenJarmo,
Danke, wenn ich die Col Min-Funktion in Ihrer Formel richtig interpretiere, würde sie die erste Beobachtung (frühestes Datum) der ID ermitteln.
Dies kann für die Gesamtzeit zwischen der ersten Beobachtung und der „n-ten“ Beobachtung hilfreich sein.
Ich möchte jedoch auch die letzte Beobachtung im Vergleich zur vorherigen Beobachtung (verstrichene Zeit zwischen den einzelnen Beobachtungen) berechnen. Zum Beispiel „n-te“ Beobachtung vs. „n-te – 1“ Beobachtung. Im folgenden Beispiel ist „Zeile 2 vs. Zeile 3“ eine verstrichene Zeit von 607 Tagen (zweite Beobachtung von ID vs. dritte Beobachtung von ID).
Irgendwelche Gedanken? Ihr Feedback wird geschätzt. Danke schön.

Betreff: JSL berechnet die verstrichene Zeit innerhalb der Spalte anhand einer VariablenWenn Sie dies in einer Spaltenformel tun müssen, benötigen Sie eine lokale Variable. Verwenden Sie diese Spalten-JSL:
New Column( "Elapsed_days",
Numeric,
"Nominal",
Format( "Best", 9 ),
Formula(
Local( {ResetRow = 1},
If(
Row() == 1, .,
:ID != Lag( :ID ), ResetRow == Row(),
(:Date - Lag( :Date )) / In Days( 1 )
)
)
)
)Betreff: JSL berechnet die verstrichene Zeit innerhalb der Spalte anhand einer VariablenDiese Formel sieht möglicherweise etwas kompliziert aus, verwendet jedoch den gleitenden Spaltendurchschnitt, um den vorherigen Wert für die ID zu ermitteln
dt << New Column("elapseddays_new", continuous, numeric, Formula(
Date Difference(Col Moving Average(:Date, 1, 1, 0, :ID) * 2 - :Date, :Date, "day"))
);

Eine andere gute Option wäre die Verwendung von Lag() und der if-Anweisung, um zu überprüfen, ob sich die ID geändert hat
Betreff: JSL berechnet die verstrichene Zeit innerhalb einer Spalte anhand einer VariablenAm einfachsten ist es wahrscheinlich, wenn Sie Ihre Datumsspalte nach ID aufteilen, dann die gesamte Datumsberechnung in jeder der neuen Spalten durchführen und dann alles erneut stapeln.