Registrazioni dello Scripters Club: suggerimenti e trucchiVideo 1 @thickey1 : Gestione delle tabelle dati.
- Modifica i nomi delle colonne.
- Metodo alternativo per fare riferimento ai nomi delle colonne.
- Aggiungi/Incorpora uno script nella tabella. Un utente può quindi eseguirlo quando vuole.
(File: Suggerimenti e trucchi e sonda)
Video 2 @Georg : Suggerimenti generali su come scrivere script e utilizzare JMP Script Editor
- piegatura del codice
- gestione delle espressioni
- JSL nelle formule
- eval (eval expr(un codice con expr(da valutare prima)))
- test sul tipo di variabili
- matrice associativa
(File: 20241120_Scripters_Club_suggerimenti_e_trucchi-inspec)
Video 3 @Mauro_Gerber : Apertura per importazione multipla e ottenimento del percorso di uno script corrente
(File: SC-2024_ini e SC-2024_multi-import)
Video 4 @Daniel_Valente : Panoramica di JMP Marketplace
https://marketplace.jmp.com/
Non ho osato impostare Ndoubled a 10 : )
Il mio sogno: un veloce, dinamico e facile da usare :folded_hands: è nelle specifiche (valore)
Per quanto riguarda l'idea di "tostare il nostro codice", avete qualche idea per migliorare la velocità?
E come rendere questo approccio accessibile anche ad altri utenti con meno esperienza con JSL?


Re: Registrazioni dello Scripters Club: suggerimenti e trucchiquesta è più veloce, ma non attiva un aggiornamento quando vengono modificate le specifiche.
Quindi al momento: nessun beneficio reale rispetto a
per ogni (... dt[0,nomecolonna] = ...)
o nuova colonna(imposta valori())
Names Default To Here( 1 );
Ndoubled = 10;
dynamic = 1;
Try( Close( cdt, NoSave ) );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
Wait( 0 );
bigger = Expr(
cdt = cdt << concatenate( cdt, append to first table( 1 ) )
);
For( I = 1, i <= Ndoubled, i++, bigger );
col_lst = cdt << get column group( "Processes" );
Wait( 0 );
cdt << New Table Variable( "trigger update", 1 ); // can this be used to force an update?
cdt << begin data update();
t0 = HP Time();
If( dynamic,
col_lst = cdt << get column group( "Processes" );
For Each( {col}, col_lst,
col_Name = col << get name() || "_inSpecDynamic";
colnew = New Column( col_Name, Nominal );
col_Name = colnew << get name();
Eval(
Substitute(
Expr(
Column( col_Name ) << set Formula(
Local(
{t0 = As Constant(
dt = Current Data Table();
limits = _col_ << get property( "Spec Limits" );
nr = nrows(dt);
usl = limits["USL"];
lsl = limits["LSL"];
myRows = Where( _col_ > lsl & _col_ < usl );
NmyRows = N Items( myRows );
dt[0, _col_Name_] = J( nr, 1, 0 );
If( NmyRows,
dt[myRows, _col_Name_] = J( NmyRows, 1, 1 )
);
1
)},
Stop();
)
)
),
Expr( _col_ ), Name Expr( col ), Expr(_col_name_), col_name
)
);
cdt << move selected columns( {Column( col_name )}, after( col ) );
);
);
cdt << run formulas() << end data update();
Show( (HP Time() - t0) / 1000000 );
Wait( 0 );
Caption( "Process screening - don't dare ..." );
Stop();
// TEST THE RESULT
// check result in table visually
ps = cdt << Process Screening( Process Variables( Eval( col_lst ) ), Spec Limits Dialog( "No (skip columns with no spec limits)" ) );
ps << Color Out Of Spec Values( 1 );
ps << Close Window;
cdt << Clear Select << Clear Column Selection;
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiDer @hogi , grazie per aver esaminato il codice e l'implementazione aggiuntiva. Per la presentazione non ho guardato troppo alla velocità ecc., il mio obiettivo era mostrare modi e approcci diversi. Nella vita reale la migliore implementazione dipende dalle tue condizioni al contorno, quindi è specifica del caso, come penso.
Se si guarda il flusso del programma, potrebbe non essere l'ideale estrarre i limiti di specifica in ogni riga usando l'approccio formula, ma in alcuni casi potrebbe essere utile. Tuttavia JMP potrebbe migliorare internamente il programma in fase di esecuzione evitando calcoli non necessari. È impossibile per me conoscere tutti questi dettagli, ma è per questo che dobbiamo provare approcci diversi.
In genere, quando si tratta di velocità, utilizzerei le opzioni della piattaforma, ad esempio tramite i colori nello screening dei processi, perché presumo che siano ottimizzate per grandi quantità di dati.
Forse potremo riesaminarlo durante la serie di roasting. E sì, di nuovo, penso che in_spec sarebbe una funzione integrata molto carina. Solo l'implementazione potrebbe diventare difficile quando ci si prende cura di tutti i dettagli: spero che gli sviluppatori trovino un buon modo.
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiPer confrontare le prestazioni con quelle della piattaforma ufficiale, eliminare o commentare stop().
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiUna cosa da ricordare con i limiti delle specifiche sono le specifiche unilaterali. Possono causare tutti i tipi di problemi divertenti
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiSì, certo.
Per semplicità, penso che sia accettabile usare specifiche bifacciali.
La contabilizzazione delle specifiche laterali (o colonne senza specifiche) è piuttosto semplice, ma in effetti non bisogna dimenticarsene.
Conosci un trucco per velocizzare il calcolo e renderlo dinamico?
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiMolto probabilmente dipenderà molto dal problema che si vuole risolvere (quindi la soluzione dipende molto dal caso d'uso).
Re: Registrazioni dello Scripters Club: suggerimenti e trucchicaso d'uso:
una nuova colonna con una formula per generare valori 0/1 per valori fuori specifica/conforme alle specifiche.
Se c'è un errore di battitura nelle specifiche o se l'utente desidera modificarle, i valori della colonna dovrebbero aggiornarsi automaticamente (non dovrebbero rimanere bloccati con le vecchie impostazioni).
forse per 10-30 colonne.
100k - 10 milioni di righe.
Una soluzione che può essere facilmente condivisa con nuovi colleghi che desiderano utilizzare JMP per analizzare le informazioni di superamento/fallimento.
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiQuesto potrebbe andare un po' fuori tema:
Mancano alcune specifiche(?) (Mi considero un risolutore professionista di problemi XY e non credo proprio che tu voglia diventarlo):
- Input: solo una tabella dati
- Utilizzare TUTTE le colonne per cui sono impostati limiti di specifiche?
- Ma tieni presente che potrebbero essere impostati in modo errato (un problema molto più grande, secondo me)
- Quanto in modo errato? Possiamo avere valori mancanti su entrambi? Stessi valori su entrambi anche se abbiamo una misurazione continua? O solo valori "buggati" (in passato si potevano avere valori "non valutati" come limiti di specifica in JMP che venivano comunque visualizzati come valori numerici corretti. Non sono sicuro che sia ancora così con JMP18).
- Un caso a parte è che l'utente potrebbe voler modificare questi parametri (considererei questo un caso d'uso diverso rispetto alla singola colonna con 0/1)
- Qual è il caso d'uso? Sono abbastanza sicuro che gli utenti non analizzeranno visivamente 30 colonne e 10 milioni di celle da una tabella
- Come stanno usando i risultati? Il calcolo potrebbe essere implementato lì? -> Hanno una piattaforma personalizzata per questo tipo di lavoro?
Se dovessi "risolvere un problema" in questo caso, inizierei prima a risolvere i limiti di specifica non corretti, o forse piuttosto la situazione in cui vengono modificati. Cosa stai cercando di vedere veramente? Dubito fortemente che sia avere una colonna con 0/1 basata sui limiti di specifica quando hai 10 milioni di righe di dati.
Potresti (o potrei) creare una funzionalità per creare una colonna del genere (non sono sicuro di quanto velocemente potresti farlo) ma è davvero la soluzione al problema ? Se vuoi solo avere una colonna 0/1 basata sui limiti delle specifiche correnti per TUTTE le colonne, non penso che debba essere dinamica (aggiorna immediatamente). L'utente può premere un singolo pulsante nel menu per aggiornare i risultati (penso a un componente aggiuntivo che utilizzi nomi di colonna specifici o forse variabili di tabella). Se lo scopo è quello di regolare le specifiche, non ha alcun valore (secondo me) vedere 0 cambiare in 1 quando hai 10 righe (crea una piattaforma speciale SOLO per quel caso d'uso, se non altro e ti interessa "solo" la velocità, molto probabilmente sarà più veloce).
Oppure è solo una questione teorica su come velocizzare questa operazione?
Re: Registrazioni dello Scripters Club: suggerimenti e trucchiCiao Jarmo, grazie per i tuoi commenti.
Hai ragione, con un semplice "clicca qui per aggiornare" tutti i problemi scompaiono.
Ma, ad essere sincero, adoro l'approccio "Graph Builder: basta configurarlo e JMP si occuperà dei dettagli".
Non c'è bisogno di discutere/implementare i dettagli tramite la community (è chiaro come estendere una formula in modo che funzioni anche per specifiche unilaterali). Qui preferisco persino un codice breve che mostra il concetto.
Oltre a ciò, non c'è bisogno di dubitare che un :folded_hands: veloce, dinamico e intuitivo sia nelle specifiche (valore) e verrà utilizzato per qualcosa di utile.
Quindi, finché :folded_hands: è in spec (valore) è disponibile -- Se qualcuno ha una soluzione migliore, come impostarla manualmente, sarò estremamente felice e la userò subito. Non è una questione teorica:)