Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Ho una tabella dati con circa 100.000 righe e 2000 colonne.Decine di queste colonne contengono formule.Quando apporto una modifica da qualche parte, noto che la barra di stato dice "valutazione ##column_xyz" e procede valutando ogni formula nella tabella dati.Poiché la tabella è piuttosto grande e le formule sono numerose, sono necessari fino a 60 secondi per valutarle tutte.Di conseguenza, sono molto sensibile all'esecuzione di azioni che attivano la valutazione della formula, perché l'interfaccia utente non risponde finché non viene completata e questo può essere piuttosto fastidioso quando accade inaspettatamente.D'altra parte, non voglio "Sopprimere Formula Eval" continuamente perché a volte me ne dimenticherò e i dati non verranno aggiornati quando avrebbero dovuto essere.
Quindi su questa tabella di dati di grandi dimensioni ho uno script JSL che genera una serie di grafici utilizzando la piattaforma Graph Builder, applica alcuni filtri di dati locali ed esegue alcune evidenziazioni selettive dei dati.Essenzialmente lo scopo dello script è generare dinamicamente grafici e prepararli per il taglia e incolla in un'e-mail o in un report.
Ho notato che questo script sembra richiedere molto tempo per essere eseguito.Più a lungo di quanto dovrebbe.L'interfaccia utente non risponde per quasi 60 secondi prima che i grafici vengano finalmente visualizzati.Ho passato un po' di tempo cercando di capire cosa stava succedendo durante quei 60 secondi.Poi mi sono reso conto che in qualche modo la valutazione della formula viene attivata da questo script.Ciò non era immediatamente evidente perché la barra di stato della tabella dati non mostra il normale messaggio "valutazione in corso..."; rimane vuoto, presumibilmente perché la valutazione viene avviata da uno script anziché dall'azione dell'utente.Quando ho eseguito lo script mentre la finestra Registro script era aperta, la barra di stato del registro diceva "valutazione ##column_with_formula".La barra di stato del registro era bloccata su quel messaggio anche se la durata del ritardo mi porta a credere che, in effetti, stesse valutando ogni colonna formula nella tabella.E poi ho confermato che la valutazione della formula era il colpevole abilitando "Elimina valutazione formula" per l'intera tabella ed eseguendo nuovamente lo script: i grafici sono comparsi quasi istantaneamente.
Attraverso tentativi ed errori ho ristretto il campo a una riga nello script: un "Seleziona dove" viene utilizzato per evidenziare alcuni dati nei grafici generati.Sembra qualcosa del genere:
myDT << Select Where( :Name("##column_with_formula") == "value" );Ho pensato che fosse strano; forse aveva qualcosa a che fare con la parte "dove".Quindi ho sostituito questa riga con qualcosa di più semplice:
myDT << Select Rows( {1,3,5,7} );Anche questa linea sembra ancora innescare una valutazione della formula dietro le quinte.Poi ho fatto qualche ulteriore sperimentazione:
- Con il task manager aperto, ho attivato le valutazioni delle formule nel modo normale (modifica un valore in una colonna).La barra di stato mostrava le formule in fase di valutazione e immediatamente l'utilizzo della CPU è aumentato fino al 30% (un core della CPU massimizzato).
- Ho aspettato che l'attività si interrompesse e ho provato a selezionare una riga nella tabella dati utilizzando l'interfaccia utente.La barra di stato non è cambiata; mostrava ancora "valutazioni fatte".Ma il task manager ha mostrato esattamente la stessa attività della CPU come se fosse in corso la valutazione della formula.
- Ho abilitato "Elimina valutazione formula" per la tabella dati e ho selezionato una riga diversa nella tabella dati.L'utilizzo della CPU non è aumentato.
Riassumendo, attraverso la sperimentazione ho dimostrato quanto segue:
- JMP esegue la valutazione della formula della colonna in modo superfluo; le interazioni di base con l'interfaccia utente fanno sì che il calcolo avvenga in background anche se nessuno dei dati di input è stato effettivamente modificato.
- JMP non è trasparente riguardo al momento in cui esegue queste valutazioni delle formule.La barra di stato a volte visualizza un messaggio ma nella maggior parte dei casi non fornisce alcuna indicazione che ciò stia accadendo.Ciò si manifesta spesso come ritardo / balbuzie / mancata risposta dell'interfaccia utente senza una ragione apparente.
- Sembra che se una colonna viene attivata per la valutazione, TUTTE le colonne vengono valutate, indipendentemente dal fatto che ne abbiano bisogno o meno.
Con set di dati più piccoli e meno formule meno complesse, l'eccessiva valutazione delle formule non sembra essere un problema.Ma con formule sufficientemente complesse e un set di dati di grandi dimensioni, questo diventa davvero un ostacolo.Nel mio caso, immagino che dovrò adattarmi a lasciare sempre soppressa la valutazione delle formule e valutare solo le formule manualmente.Ma questo è soggetto a errori, proprio come in Excel quando il ricalcolo della cartella di lavoro è impostato su manuale.Almeno Excel ha un albero delle dipendenze che gli consente di valutare solo le formule necessarie per i dati che sono cambiati e, se l'utente progetta le formule in modo appropriato, il calcolo può essere lasciato sempre in automatico con un sovraccarico minimo.Certo, non ho familiarità con JMP quanto con Excel, quindi potrebbero esserci modi per gestire questo problema in JMP che non ho ancora imparato.
Qualcuno ha qualche suggerimento su come gestire un gran numero di formule complesse SENZA sopprimere continuamente eval?
Inoltre, come indicato nel titolo del mio post, sarei interessato a sapere PERCHÉ una modifica nella formula di attivazione della selezione delle righe eval.Inoltre, perché JMP a volte ti dice che sta valutando le formule e talvolta lo nasconde?
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?@Chris_Rodrigues ha scritto:
Inoltre, la parte più sorprendente per me è stata che il semplice selezione di una riga ha attivato una rivalutazione completa della tabella (come evidenziato dall'utilizzo della CPU e dalla reattività dell'interfaccia utente).Se una formula può essere influenzata dall'esclusione di una riga, perché non attivare la valutazione quando l'utente effettivamente esclude una riga ?Immagino che sia teoricamente possibile che un utente possa scrivere una formula di colonna che dipende dallo stato corrente di selezione della riga, ma mi sembra un raro caso limite.
Anche questo mi confonde. Perché Jmp non distingue tra gli stati delle righe: escluso E selezionato ?
Anche se il RowState è stato modificato: potrebbe esserci un controllo successivo per vedere se il file escluso() gli stati cambiarono.
Sono d'accordo con @Chris_Rodrigues - verrà utilizzata la maggior parte delle formule di colonna Escluso() e non Selezionato() .
[Tuttavia, quelli con Selezionato() sono i più belli
]
Non sembra una questione di nicchia. Per i dati campione con 5-1000 righe di dati, questo non è un grosso problema.
Ma per set di dati più grandi, un utente che utilizza Escluso() nelle formule in colonna deve pagare una penalità enorme!
Names Default to Here(1);
dt = new table("test", add rows(5),
New Column( "again"),
New Column( "excluded",
Formula(
:again[1] = 1;
Excluded();
),
));
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Beh, è bello sapere finalmente che non sono l'unico ad aver lottato con questo.Quasi quattro anni dopo la situazione non è ancora migliorata.Esistono tutti i tipi di situazioni strane che attivano la valutazione della formula sull'intera tabella di dati, anche quando la valutazione della formula è presumibilmente soppressa a livello di tabella.La soppressione della valutazione della formula su singole colonne è impraticabile perché non è possibile gestire le dipendenze.Tutte le colonne devono essere riattivate affinché JMP le valuti nell'ordine corretto.Inoltre, in JMP16 il motore di valutazione delle formule sembra essere diventato ancora più lento.Ora ci vuole una quantità di tempo irragionevole per valutare il mio tavolo completo.
Tra questo e i continui suggerimenti in questi forum di eliminare semplicemente tutte le formule e memorizzare solo valori fissi, sono giunto alla conclusione che JMP semplicemente non è pensato per gestire formule dinamiche, ma solo dati statici.Le formule sono utili all'inizio, quando la tabella è piccola e funzionano ancora correttamente, ma quando il conteggio delle formule, la complessità della formula o il conteggio delle righe superano un certo limite, ti imbatterai in un muro di mattoni.Dovrò rielaborare completamente questo progetto utilizzando qualche altro strumento e utilizzare JMP solo per grafici/presentazioni/statistiche.
Lo contrassegnerò come risolto.La soluzione è che non esiste una soluzione.Se riscontri questo problema, JMP non è lo strumento giusto per il lavoro.Elimina le formule dinamiche e archivia solo i dati statici.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Ho avuto problemi simili con una tabella dati di grandi dimensioni.
Le valutazioni delle formule venivano attivate più e più volte.
Dopo aver salvato la tabella e riaperto, tutto era OK.
Quindi, forse la rivalutazione è stata innescata da un conflitto di nomi di variabili. UE il problema è scomparso dopo aver reimpostato il nome della variabile.
Se altri utenti hanno problemi simili, ecco un desiderio di abilitare e disabilitare rapidamente le singole formule:
modo rapido per abilitare/disabilitare i calcoli delle formule
Un'altra idea: disabilitare le valutazioni delle formule per impostazione predefinita, per avere un Jmp fluido senza tali rivalutazioni delle formule spurie.
Se aggiungi alcuni dati alla tabella dati, attiva semplicemente una valutazione della formula una tantum. Ecco l'augurio:
un modo rapido per attivare la valutazione una tantum della formula per una formula specifica
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Questa tabella non è stata creata in una versione precedente di JMP.Ha forse un anno, quindi era JMP 13 o 14.
Ho utilizzato il menu del triangolo rosso per selezionare la casella di soppressione della valutazione per la tabella, quindi l'ho salvato e chiuso.Alla riapertura della tabella, la casella di soppressione della valutazione non è più selezionata, quindi apparentemente l'impostazione dell'intera tabella non è stata preservata salvando la tabella.Quando la tabella si apre, la barra di stato visualizza immediatamente "valutazione in corso xyz...".Non sono sicuro di cosa stia facendo sì che ciò accada.
Avevo uno script OnOpen che veniva utilizzato per popolare i dati in alcuni array associativi utilizzati in alcune funzioni di ricerca dei dati.Ho rinominato OnOpen in qualcos'altro per disabilitarlo in modo che non si attivi quando apro la tabella, ma le valutazioni vengono comunque eseguite.
Ho scritto uno script JSL per accedere alle proprietà della colonna per la maggior parte delle colonne formula e sopprimere eval lì, perché so che questa opzione viene mantenuta quando la tabella viene salvata. Quindi ora la valutazione dell'intero tavolo non richiede così tanto tempo.Immagino che questo sia il modo in cui lo gestirò da ora in poi: sopprimerò eval su singole colonne e quando importerò nuovi dati che necessitano dell'esecuzione delle formule, li riattiverò temporaneamente utilizzando uno script.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Non sono stato in grado di creare una tabella con formule che valutano quando si apre.@chungwei
La preferenza potrebbe avere effetto sulle tabelle JMP create in JMP 5 o giù di lì.Non riesco a vedere che faccia qualcosa al momento.
È possibile utilizzare le opzioni del triangolo rosso della tabella dati per sopprimere la valutazione della formula e salvare una tabella in quello stato (con colonne parzialmente valutate). Puoi utilizzare rerunFormulas dallo stesso triangolo rosso per forzare l'aggiornamento (o da JSL). (Questo potrebbe essere quello che stai chiedendo.)
Il motivo lo dice il prefetto non consigliato diventa molto confuso quando le tabelle ottengono il bit di soppressione impostato... o lo ha fatto contemporaneamente.
Se ti rivolgi al supporto tecnico, inseriranno e tracceranno un difetto (o scopriranno perché esiste la preferenza e cosa ha fatto/fa per le tabelle di formato precedente).
Non esiste un framework di debug/logging.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Craige, è una buona idea scrivere nel registro durante la valutazione di una formula.Utilizzerò questa tecnica per risolvere ulteriormente i problemi relativi al ritardo dell'interfaccia utente e ai ritardi nel mio progetto correlati alla valutazione della formula.Il mio metodo non era così preciso.Ma ho una domanda: esiste una modalità di "debug" o una funzione di "registrazione dettagliata" in JMP che potrei attivare?Sarebbe bello se non dovessi inserire così tante istruzioni Write nel mio codice solo per capire cosa sta facendo JMP in un dato momento.
Tuttavia, per ora, devo ancora utilizzare questo progetto così com'è per il mio lavoro attuale.Voglio solo sopprimere completamente la valutazione delle formule ed eseguire nuovamente le formule manualmente secondo necessità.Anche se ho abilitato "Elimina valutazione all'apertura" nel menu delle preferenze, JMP valuta comunque le formule immediatamente quando apro la tabella.Esiste un modo per impedire completamente tutta la valutazione automatica delle formule su questa tabella?Se questa preferenza dovrebbe fare questo ma non funziona, c'è un modo per inviare una segnalazione di bug?
Per tua informazione, sto utilizzando JMP PRO 14.1 su Windows 10 x64.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Quale versione di JMP stai utilizzando?
Per quanto ne so, 14 sta facendo quello che mi aspetto; ecco il mio JSL di prova
New Table( "Untitled", add rows(3),
// EVERYTHINGCOL depends on everything. it evaluates last.
New Column( "EVERYTHINGCOL", Formula( Write( "\!nEVERYTHINGCOL,row" || Char( Row() ) ); :ROWSTATECOL + :INDEPCOL + :DEPONINDEP; ) ),
// DEPONINDEP depends on INDEPCOL, but not ROWSTATECOL.
New Column( "DEPONINDEP", Formula( Write( "\!nDEPONINDEP,row" || Char( Row() ) ); :INDEPCOL + 1; ) ),
// INDEPCOL is independent. It evaluates early, maybe first.
New Column( "INDEPCOL", Formula( Write( "\!nINDEPCOL,row" || Char( Row() ) ); 17; ) ),
// ROWSTATECOL is directly dependent on row state information. It evaluates early, maybe first.
New Column( "ROWSTATECOL", Formula( Write( "\!nROWSTATECOL,row" || Char( Row() ) ); Selected( Row State() ); ) ),
)
Guarda il registro; le colonne riportano mentre valutano. La selezione delle righe determina la valutazione di due colonne, ma delle altre due no.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Nel menu Preferenze sotto "Tabelle" è presente un'opzione per "Elimina valutazione formula all'apertura (non consigliato)".Ho attivato questa opzione ma non sembra funzionare.Quando apro una tabella dati, inizia con la valutazione della formula non soppressa e devo ancora sopprimerla manualmente.Questa opzione è interrotta o ho frainteso cosa dovrebbe fare?
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Craige, il punto è che tutte le formule vengono ricalcolate se dipendono o meno dallo stato della riga .La stragrande maggioranza delle formule non ha nulla a che fare con lo stato della riga, ma una modifica nello stato della riga ne comporta comunque il ricalcolo.Immagino che JMP calcoli tutto, in ogni momento, se succede qualcosa che potrebbe influenzare qualsiasi tipo di formula che potrebbe esistere.Nella mia mente questo è inutile e inefficiente.Come usare un'ascia da battaglia quando basterebbe un bisturi.Sono sicuro che sia più semplice codificare il programma in questo modo; sembra semplicemente un approccio non sofisticato e sono rimasto sorpreso quando ho appreso che questo è il modo in cui JMP gestisce la valutazione delle formule.
Ora che ho capito meglio come vengono calcolate le formule, posso certamente aggirare il problema mantenendo la formula eval soppressa e inserendo dt << runFormulas; e Aspetta(0); dichiarazione in tutti i miei script.Non sarà carino, ma suppongo che funzionerà.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Sì, se una formula dipende dalle informazioni sullo stato della riga, la modifica della selezione della riga rivaluterà quella colonna e tutte le colonne che dipendono da essa.
Potresti essere in grado di accelerare molto la valutazione utilizzando dt<
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?Jim, grazie per la risposta.Questa tabella contiene dati di serie temporali e importo regolarmente i dati più aggiornati.Vorrei preservare le formule in modo che vengano calcolate sui nuovi dati dopo che sono stati aggiunti alla tabella.
Per la maggior parte di queste formule, il valore dipenderebbe solo dagli altri dati nella stessa riga.L'esclusione dei dati precedenti nella tabella non avrebbe alcun effetto sui valori seguenti, quindi il ricalcolo dell'intera colonna non è necessario, ma avviene comunque.Sarebbe bello se ciò accadesse solo se la formula contenesse Col Maximum() o Lag() o un'altra funzione simile che farebbe sì che la formula venga influenzata dai valori in altre righe.
Inoltre, la parte più sorprendente per me è stata che il semplice selezione di una riga ha attivato una rivalutazione completa della tabella (come evidenziato dall'utilizzo della CPU e dalla reattività dell'interfaccia utente).Se una formula può essere influenzata dall'esclusione di una riga, perché non attivare la valutazione quando l'utente effettivamente esclude una riga ?Immagino che sia teoricamente possibile che un utente possa scrivere una formula di colonna che dipende dallo stato corrente di selezione della riga, ma mi sembra un raro caso limite.
Ri: Perché la selezione/deselezione delle righe attiva la rivalutazione delle formule delle colonne?La ricalcolo viene eseguita, perché una formula potrebbe essere influenzata da un cambiamento nella selezione/esclusione di una cella per una determinata colonna.Data la dimensione della tabella dati, esaminerei la modifica di tutte le colonne in cui i valori della formula non verranno modificati, quindi rimuoverei la proprietà "Formula", trasformandole solo in una tipica colonna numerica.