Codifica efficiente dello stato delle righeCiao, sto cercando di capire il modo più veloce per cambiare gli stati delle righe in JSL. Normalmente cerco di evitare di selezionare le righe perché è più lento di get rows where(), ma non vedo come utilizzare una matrice o un elenco di righe per modificare gli stati delle righe. È necessario selezionare le righe per modificare lo stato?
Domanda leggermente correlata: la tavolozza dei colori è scriptabile? Vedo la casella di visualizzazione "colorbox()" ma l'indice di scripting dice che è accessibile solo dalla piattaforma. Non ne ho necessariamente bisogno, poiché sono riuscito a trovare un paio di soluzioni alternative. Un esempio di ciò che intendo con questo è mostrato sotto il codice qui.
Grazie,
Mike
//Clear Log();
Names Default To Here( 1 );
dt = open( "$SAMPLE_DATA\Big Class.jmp");
//get rows where; not sure what to do with this
myRows = dt << get rows where(:height == 63);
// use select where works but could be slower
dt << select where(:height == 63);
dt << exclude(1);
dt << colors("Red");Tavolozza dei colori, esempio dalle preferenze dell'utente:

Ri: Codifica efficiente dello stato delle righeSì, tendo a dimenticarlo e me lo ricorda di tanto in tanto quando rivedo la guida in linea di JMP.Probabilmente ho semplicemente usato "seleziona dove()" e successivamente ho ottenuto "righe dove()" per comodità rispetto alla gestione delle righe escluse e rapidamente (in termini di codifica, non in termini di esecuzione) afferrando quelle che sono sopra / sotto i limiti delle specifiche, però Suppongo che potrei ottenere una matrice di colonne separata di escluso() contenente uno e zero e semplicemente moltiplicare. Finché gestisce correttamente i valori mancanti, probabilmente funzionerà bene e verrà eseguito rapidamente.
Ri: Codifica efficiente dello stato delle righeHo lavorato anche nel settore dei semiconduttori e ho scoperto che in molte delle applicazioni di grandi dimensioni, spostare i dati parametrici in matrici e utilizzare le varie funzioni della matrice anziché gestire le funzioni della tabella dati è un metodo molto più veloce.
Ri: Codifica efficiente dello stato delle righeGrazie Jim. L'abitudine di scegliere "ottenere" invece di "selezionare" è un po' radicata dopo anni di risultati di script lenti sia in vba che in jsl, ma suppongo che sto pensando principalmente ai casi in cui devo scorrere non solo attraverso le righe ma attraverso ogni colonna .
Di seguito sono riportati un paio di scenari relativi ai dati di test dei semiconduttori, in cui ogni riga è un dispositivo testato in produzione e ogni colonna (dopo le colonne dell'indice) è un test parametrico sui dispositivi. Ogni colonna dispone di limiti di specifica archiviati come proprietà.Uno script scorre e determina colonna per colonna la resa, le ricadute sul lato alto e sul lato basso, ecc. (Molte altre cose ma sono irrilevanti).Generalmente con i dati dei semiconduttori, vengono testati con l'arresto al primo guasto, quindi le colonne a destra di un guasto potrebbero mancare. Se invece i dati vengono testati continuando in caso di fallimento, potrebbe essere utile convertirli in "stop in caso di fallimento". Quindi ho uno script da convertire anche in dati stop-on-first-fail.In entrambi questi casi, il passaggio a get rows where() e select where() ha migliorato notevolmente il tempo di esecuzione dello script. È possibile che sia più veloce usare select where() se la tabella è invisibile; Non ho controllato questo.
Per gli stati di riga, tuttavia, viene ripetuto solo una volta, quindi ora che faccio un passo indietro e ci penso, probabilmente non è poi così male.
Ecco uno screenshot di due versioni dello script per il mio script stop on fail. Questa modifica ha fatto un'enorme differenza nel tempo di esecuzione.
E tutto un altro argomento potrebbe essere il motivo per cui lo sto analizzando come una stringa. Dovrei tornare indietro e riguardarlo di nuovo, ma anni fa ho scoperto che l'analisi come stringa era molto più veloce, ma potrebbe essere stato mentre avevo ancora le istruzioni select where().

Ri: Codifica efficiente dello stato delle righeNon ho una risposta alla tua domanda sulla tavolozza dei colori, ma ho eseguito una rapida selezione Seleziona dove e Ottieni righe dove e ho riscontrato poca differenza
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "select where", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "get rows", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
e ho ottenuto i risultati:
"seleziona dove";= "2:51:55";
"ottieni righe"; = "2:50:40";