Colonna Formule per rallentare: come aspettare fino a quando non hanno finito di calcolareSaluti, mi sono imbattuto in situazioni in cui importo dati grezzi in una tabella dati (dt1) e quindi apro un'altra tabella dati che ha limiti di specifica (dt2).La tabella dei limiti delle specifiche ha solo una USL e una LSL.Inserisco una nuova colonna calcolata in dt2 che è il limite delle specifiche di destinazione (mean(USL,LSL)).Quindi eseguo il ciclo di 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 esempio, col << Set Property( "Spec Limits", { LSL( mioLSLx ),USL( mioUSLx ),Target( miotargetx ), );)... Quindi chiudi il file spec 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 il dt2<< Begin data Update; e neanche questo funziona, ma forse lo sto inserendo in una posizione errata nello script?L'unica soluzione che ho è non utilizzare 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;
,
);
Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareQuesto è un semplice commento "pila su".@txnelson la formula di sarà 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 ha un valore vuoto. Pertanto, (:USL + :LSL)/2 sarà vuoto se uno o entrambi i valori sono vuoti.
Questo è solo un FYI.
Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareHai ragione che questo messaggio non è descritto nella Guida allo scripting. È 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 relativa guida. Una ricerca per 'formula' restituirebbe un elenco che include i messaggi << Esegui formule e << Riesegui formule.
Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareNon ero nemmeno a conoscenza della "ripetizione". Sembra che faccia rivalutare le formule, che ne abbiano bisogno o meno. Se usi numeri casuali nelle tue formule, puoi vedere la differenza. Consiglierei <
Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareBello, funziona anche questo. Le formule di riesecuzione non si trovano nella guida agli script di JMP V13, mentre le formule di esecuzione lo sono. Entrambi funzionano in questo caso.Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareEccezionale! Funziona!Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareDi seguito è una semplice modifica che dovrebbe funzionare per te.Innanzitutto, eliminando la clausola If() accelererà l'elaborazione e, in secondo luogo, il file
dt << riesegue le formule;
costringerà 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;
Ri: Formule di colonna da rallentare: come aspettare fino a quando non hanno finito di calcolareProva a inviare alla tua tabella un messaggio "esegui formule":
dt << runFormulas;