JSL Calcola il tempo trascorso all'interno della colonna da una variabileCiao,
Mi chiedo se sia possibile creare una formula di colonna JSL per calcolare il numero di giorni tra l'osservazione di un ID ENTRO la stessa colonna DATE (ad esempio "Per ID, Calcola i giorni trascorsi per DATA").L'output valuterà l'aspetto o gli aspetti dello stesso ID e calcolerà il tempo trascorso tra ogni aspetto dello stesso ID.Questo non è un confronto tra la colonna A e la colonna B, questa è una valutazione all'interno della colonna A (all'interno della stessa colonna).
Nota, la prima osservazione di qualsiasi ID sarà vuota perché non c'è confronto (prima osservazione).Dopo la prima osservazione, i calcoli funzionerebbero 1a contro 2a... 2a contro 3a... e così via.
Di seguito è riportato un progetto di concetto.Grazie per tutto l'aiuto.
| ID | DATA | GIORNI_TRASCORSI |
| ABC123 | 1/1/2021 | |
| ABC123 | 31/10/2021 | 303 |
| ABC123 | 30/06/2023 | 607 |
| EFG567 | 30/06/2021 | |
| EFG567 | 31/10/2021 | 123 |
| XYZ901 | 31/05/2021 | |
Automazione e scriptingScriptingRi: JSL Calcola il tempo trascorso all'interno della colonna da una variabileUsa Col Min() e Differenza data. Se hai davvero bisogno che la prima osservazione manchi di valore, puoi aggiungere l'istruzione if per verificarla
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"))
);

Ri: JSL Calcola il tempo trascorso all'interno della colonna in base a una variabileJarmo,
Grazie, se interpreto correttamente la funzione Col Min nella tua formula stabilirei la prima osservazione (prima data) dell'ID.
Ciò può essere utile per un tempo totale tra la prima osservazione e l'"ennesima" osservazione.
Tuttavia, vorrei anche calcolare l'osservazione più recente rispetto all'osservazione precedente (tempo trascorso tra ciascuna osservazione). Come l'osservazione "ennesima" contro l'osservazione "ennesima - 1". Nell'esempio seguente, "riga 2 vs riga 3" è un tempo trascorso di 607 giorni (seconda osservazione di ID rispetto a terza osservazione di ID).
qualche idea? Il tuo feedback è apprezzato. Grazie.

Ri: JSL Calcola il tempo trascorso all'interno della colonna in base a una variabileSe devi farlo in una formula di colonna, allora hai bisogno di una variabile locale. Usa questa colonna 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 )
)
)
)
)Ri: JSL Calcola il tempo trascorso all'interno della colonna in base a una variabileQuesta formula potrebbe sembrare un po' complicata, ma utilizza Col Moving Average per ottenere il valore precedente per ID
dt << New Column("elapseddays_new", continuous, numeric, Formula(
Date Difference(Col Moving Average(:Date, 1, 1, 0, :ID) * 2 - :Date, :Date, "day"))
);

Un'altra buona opzione sarebbe quella di utilizzare Lag() e l'istruzione if per verificare se l'ID è cambiato
Re: JSL calcola il tempo trascorso all'interno della colonna tramite una variabileProbabilmente è più semplice se dividi la colonna delle date per ID, poi esegui tutti i calcoli delle date in ciascuna delle nuove colonne e poi impila di nuovo il tutto.