Formula: come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaSalve, ho bisogno di aiuto per inserire una formula per trovare una riga più recente in base alle condizioni e recuperare un valore di colonna diverso/eseguire calcoli tra due parametri di riga (DateTime).
Sotto la tabella dei dati (anch'essa allegata) sono presenti: colonne Asset, DateTime, Discrete e Action.
I dati vengono ordinati prima in base all'asset e poi a DateTime (crescente)
C'è anche una variabile di tabella days_threshold = 4.
Action(Desired) è la forma desiderata di Action in cui la formula corrente

necessita di essere modificato.
Qualsiasi riga che ottiene a Discreto = 1 (che normalmente è determinato da regole di formula saltate qui e invece vengono forniti valori di esempio) , Azione bisogno di iniziare a cercare le proprie righe precedenti (in Appuntamento forma discendente). Due condizioni in quella ricerca sono:
1- Alla ricerca dello stesso Risorsa per cui Discreto =1 (ovvero XY01 o XY02)
2- Guarda fino al valore più recente di Azione = 1 è stato trovato .
Calcola il numero di giorni tra l'ultima volta che Action era 1 rispetto a DateTime della riga corrente.
Se la differenza (in giorni) >= days_threshold = 4 ---> allora Action of current row = 1
Altrimenti se la differenza (in giorni) < days_threshold ---> allora Azione della riga corrente = 0
Interessato solo a trovare l'ora più recente in cui Azione era "1"... Una volta trovato quel singolo valore (se esiste), la ricerca può fermarsi a quel punto. Il limite per la ricerca è fino alla prima occorrenza di quell'Asset (cioè il record più vecchio). Se l'azione non è mai stata impostata su "1" in precedenza, l'azione della riga corrente può essere impostata su "1"
ad esempio la riga 2 è la prima volta che XY01 ottiene Action =1 (basato su Discrete, che a sua volta è legato ad alcune regole, mostra solo w/ valori in questo esempio).
accanto alla riga 3, Discrete è nuovamente impostato su 1, ma questa volta Action deve essere 0 poiché il numero di giorni di differenza tra la riga precedente e quella corrente è 0 (< days_threshold).
Allo stesso modo, per la riga 5, Action rimane ancora 0 poiché sono trascorsi solo 3 giorni dall'ultima volta che Action era 1.
Infine Azione viene impostata su "1" alla riga 6.
Fornite due risorse seguendo questa idea: impostare i valori desiderati su Action(Desired).
Preferisco che questa sia una formula piuttosto che una sceneggiatura.
grazie in anticipo team JMP.
Altug Bayram

Miscelazione e pulizia dei datiQualità e ingegneria di processoRe: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaJarmo
Questo ha funzionato in modo eccellente.Ha anche aperto la mia comprensione delle formule per contenere una logica più complessa se separate da ";".
Inoltre, è interessante notare che 0 in questo caso funziona come ripristino iniziale per un parametro DateTime.
Jarmo/Jim - grazie per l'aiuto estremamente rapido su questo... apprezzo il supporto.
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaInoltre, utilizzo Lag, Date Difference molte volte nelle formule. Ma poiché questo diventa un po 'complicato come codice ea causa della mia mancanza di esperienza nell'integrazione di script in formule, faccio un po' fatica su quel fronte. Se l'intento era sul numero di record anziché sui giorni di calendario, potrei farlo facilmente grazie alla funzione di indice disponibile. Il requisito del "giorno" lo rende più difficile.
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaSolo la parte della formula sarebbe questa e dovresti essere in grado di aggiungerla direttamente alla formula dalle informazioni sulla colonna dopo aver creato una nuova colonna
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;
Allego anche la tabella. E se non hai molta familiarità con le formule, puoi leggere alcune parti di questo Utilizzo di JMP > Crea formule in JMP
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaCiao, potresti allegare la tua versione in modo che io possa vedere come lo script è integrato nella formula. Sono un principiante nel mettere gli script in formule.
Grazie.
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaLa mia formula dovrebbe ancora funzionare bene, poiché utilizzava già i giorni anziché i mesi (ho eseguito la conversione nella mia tabella di test, ma me ne sono dimenticato). Action2 è il risultato della formula che ho fornito e non c'è differenza tra essa e la colonna Action(Desired):

Suggerisco di controllare l'indice di scripting per As Constant, Date Difference e Lag. Quelli dovrebbero aiutare con la comprensione della formula
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaPls vedi sotto per la mia prossima versione con il formato DateTime corretto (avrebbe dovuto essere M/D/Y ...)
Sto cercando una formula che possa farlo, se possibile. grazie.
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaHo corretto il formato di DateTime in questa prossima versione. Grazie per l'aiuto.
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaIl vincolo "giorni" misura il tempo del calendario: "quanti giorni sono trascorsi da quando Action era 1" è la domanda.
Mi rendo conto di aver inserito il formato nella colonna DateTime sbagliato come D/M/Y
Doveva essere M/D/Y....
Mi scuso per l'errore.
quindi le righe 3 e 5 sono rispettivamente il 2 e il 5 giugno.
Sarebbe possibile creare una formula per questo?
grazie al team JMP.
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaHo una domanda sulla tua colonna DateTime.Come hai definito, tutti i valori per Asset = "XY01" sono stati misurati il 6° giorno di vari mesi per l'anno 2022.
riga 3 = 6 febbraio 2022
riga 5 = 6 maggio 2022
ovvero 89 giorni a parte, tuttavia indichi che l'azione desiderata è 0.
@jthi la risposta mostra un'azione di 1, così come il mio calcolo indipendente.
Cosa ci manca?
Re: Formula - Come trovare la riga più recente (in base alle condizioni) e recuperare il valore da una colonna diversaQualcosa del genere potrebbe funzionare:
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;
));