Formule di colonna per rallentare : come attendere fino al termine del calcoloSaluti, mi sono imbattuto in situazioni in cui importi dati grezzi in una tabella di dati (dt1) e quindi apro un'altra tabella di dati che ha limiti di specifica (dt2).La tabella dei limiti delle specifiche ha solo un USL e un LSL.Inserisco una nuova colonna calcolata in dt2 che è il limite delle specifiche di destinazione (mean(USL,LSL)).Quindi eseguo tutte le righe dei miei dati grezzi dt1 e se ottengo una corrispondenza del nome del test e dei limiti delle specifiche, quindi imposto le proprietà della colonna con i limiti delle specifiche (ad es. col << Set Property( "Spec Limits", { LSL( myLSLx ), USL ( myUSLx ), Target ( mytargetx ), );)... Quindi chiudi il file delle specifiche dt2, nessun salvataggio.
Penso che il problema che sto riscontrando sia che la colonna calcolata (dt2:_Target) non è abbastanza veloce e ottengo tutti i valori vuoti quando provo a leggerli, subito dopo aver creato la nuova colonna calcolata ("_Target"...).Se tengo aperto il file dt2, vedo i valori corretti nella colonna calcolata "_Target".Ho giocato con dt2<< Inizio aggiornamento dati; e anche quello non funziona, ma forse lo sto mettendo in una posizione errata nello script?L'unica soluzione che ho è non usare una formula per la nuova colonna, ma calcolare in uno script il valore target e inserirlo nel file delle specifiche indicizzando tutte le righe.
La radice della mia domanda è: posso aspettare che tutte le colonne siano completate con i calcoli prima di provare a leggere un valore specifico in una riga/colonna?
Non funziona
Per esempio,
New Column( "_Target",Numeric,"Continuous",Format( "Best", 12 ),Formula(If( Is Missing( :_LSL ) | Is Missing( :_USL ),
Empty(),
Mean( :_LSL, :_USL )
)
Soluzione alternativa
Per esempio,
dt2 = current data table();
New Column( "_Target", Numeric, "Continuous");
dt2_rows = nrows();
for (i=1, i<=dt2_rows, i++,
if(or(!is missing(dt2:_LSL[i]),!is missing(dt2:_USL[i])),
dt2:_Target[i] = ((dt2:_LSL[i]) + (d2t:_USL[i])) / 2;
,
);
Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloQuesto è un semplice commento "accatastato".@txnelson La formula funzionerà più grassa di quella che hai fornito.Le formule di colonna vengono eseguite più velocemente di un ciclo for. Inoltre, l'istruzione condizionale non è richiesta, poiché JMP restituisce un empty() in qualsiasi calcolo che abbia un valore vuoto. Pertanto, (:USL + :LSL)/2 sarà vuoto se uno o entrambi i valori sono vuoti.
Questo è solo un FYI.
Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloHai ragione sul fatto che questo messaggio non è descritto nella Guida agli script. È descritto nella Guida alla sintassi JSL. Il primo libro non è una descrizione completa di ogni funzione e messaggio in JSL, ma il secondo libro dovrebbe essere completo. I due libri sono pensati per completarsi a vicenda e per essere usati insieme.
Il messaggio è anche coperto dallo Scripting Index, con un collegamento alla guida. Una ricerca per 'formula' restituirebbe un elenco che include i messaggi << Esegui formule e << Ripeti formule.
Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloNon era nemmeno a conoscenza della "riproduzione". Sembra che faccia rivalutare le formule, che ne abbiano bisogno o meno. Se usi numeri casuali nelle tue formule, puoi vedere la differenza. Consiglierei <
Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloBello, funziona anche questo. Le formule di ripetizione non si trovano nella guida agli script JMP V13, mentre le formule di esecuzione lo sono. Entrambi funzionano in questo caso.Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloStupendo! Funziona!Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloDi seguito è una semplice modifica che dovrebbe funzionare per te.In primo luogo, eliminando la clausola If() accelererà l'elaborazione e, in secondo luogo, il
dt << formule di ripetizione;
forzerà JMP a completare l'elaborazione delle formule prima di continuare
dt = Current Data Table();
dt << New Column( "_Target",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( (:LSL + :USL) / 2 )
);
dt << rerun formulas;
Re: Formule di colonna per rallentare: come attendere fino al termine del calcoloProva a inviare alla tua tabella un messaggio "esegui formule":
dt << runFormulas;