Tentativo di estrarre i limiti delle specifiche dalle colonne<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO,
Sto cercando di estrarre i limiti delle specifiche delle colonne in modo da poterli utilizzare in un report personalizzato, ma riscontro un comportamento strano. Di seguito è riportato uno snippet di ciò che sto facendo:
Cancella valori globali();
dt = Tabella dati ("blah");
cols1 = dt << Ottieni i nomi delle colonne (numerico, continuo);
For( jj = 1, jj <= N elementi( cols1 ), jj++,
spec_x = cols1[jj] << Ottieni proprietà("Limiti specifiche");
Stampa(
Char( jj ) || ": Col è " || Char( cols1[jj] << ottieni nome ) ||
", LSL è " || Char( spec_x["lsl"] ) ||
", USL è " || Char( spec_x["usl"] )
);
);
La dichiarazione print non è il vero utilizzo finale, ma serve a mostrare se ho estratto i limiti in modo utile!
Ora, questo codice funziona bene per una piccola tabella di test di 2 colonne:
"1: Col è X, LSL è 1, USL è 2"
"2: Col è Y, LSL è 3, USL è 7"
Che corrisponde a ciò che c'è nella mia tabella. Ma per una tabella più grande di 73 colonne (numeriche, continue), per qualche motivo non riesce a inserire nulla in spec_x, ottengo solo:
"1: Col è Rc_N+PO (N/.09/280), LSL è ., USL è ."
"2: Col è Rc_V1 (N/.1/1260), LSL è ., USL è ."
"3: Col è Rc_V2 (N/.1/1188), LSL è ., USL è ."
"4: Col è Rc_V3 (N/.1/1188), LSL è ., USL è ."
"5: Col è Rc_V4 (N/.1/1188), LSL è ., USL è ."
... eccetera
Ci sono sicuramente dati limite nella tabella, ho ricontrollato! Quindi c'è qualche motivo per cui potrebbe non funzionare? La tabella è aperta, lo script sta chiaramente ottenendo i nomi delle colonne OK, non riesco proprio a far sì che rilevi i limiti.
Quando eseguo lo script e arrivo a spec_x = cols1[jj] << Get Property( "Spec limit" ); il registro mostra:
Limiti delle specifiche (LSL(10), USL(50), Obiettivo(30))
ma poi quando eseguo l'istruzione print, dice semplicemente:
"1: Col è Rc_N+PO (N/.09/280), LSL è ., USL è ."
Qualsiasi aiuto apprezzato!
Grazie,
Matteo.
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneAdesso funziona, grazie per l'aiuto 
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneOk, sembra che, a seconda di come sono stati creati i limiti delle specifiche, <
dt = Nuovo tavolo ( "Esempio" ) ;
dt << Nuova colonna ( "Nessun limite di specifica" , Numerico , Continuo ) ;
dt << Nuova colonna ( "Rc_N+PO (N/.09/280)" ,
Numerico ,
Continuo ,
Imposta proprietà ( "Limiti delle specifiche" , Limiti delle specifiche ( LSL ( 10 ) , USL ( 50 ) , Bersaglio ( 30 ) ) ) ,
Imposta valori ( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt << Nuova colonna ( "Test" ,
Numerico ,
Continuo ,
Imposta proprietà ( "Limiti delle specifiche" , { LSL ( 1 ) , USL ( 5 ) , Bersaglio ( 3 ) , Mostra limiti ( 0 )} ) ,
Imposta valori ( [ 2 , 3 , 4 ] )
) ;
cols1 = dt << Ottieni nomi di colonne ( numerico , continuo ) ;
Per ( jj = 1 , jj <= N articoli ( cols1 ) , jj ++,
Q = cols1 [ jj ] << Ottieni proprietà ( "Limiti delle specifiche" ) ;
specifica_x = Elenco di valutazione ( { Arg ( Q , 1 ) , Arg ( Q , 2 ) , Arg ( Q , 3 )} ) ;
Se ( Riga N ( Loc ( specifica_x , Vuoto () ) ) ,
Stampa (
Car ( jj ) || ": Col" || Car ( cols1 [ jj ] << ottenere il nome ) ||
", non ha limiti di specifiche"
) ,
Stampa (
Car ( jj ) || ": Col è" || Car ( cols1 [ jj ] << ottenere il nome ) || ", LSL è "
|| Car ( specifica_x [ "LSL" ] ) || ", L'USL è " || Car ( specifica_x [ "USL" ] )
)
) ;
) ;
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneGrazie ad entrambi per le risposte, ma ancora niente. A proposito, sto usando JMP 11.2 a 64 bit su Win7.
MS: il tuo codice ha funzionato bene per me durante la creazione di una nuova tabella di test, ma non durante l'utilizzo della mia tabella.
dkeshock: la tua modifica non è stata d'aiuto, ma mi ha dato un utile suggerimento su come estrarre facilmente i nomi delle colonne, grazie 
Penso che potrei avere una causa principale ora, ma non sono ancora sicuro di come risolverla. Ho copiato una delle mie colonne in una nuova tabella, quindi ho creato una nuova colonna di test con i limiti immessi manualmente. Lo script funziona per la nuova colonna di test:
"1: Col è Rc_N+PO (N/.09/280), LSL è ., USL è ."
"2: Col è Test, LSL è 1, USL è 5"
Quindi ho guardato gli script per le due colonne (volutamente limitate a poche righe):
Nuova colonna( "Rc_N+PO (N/.09/280)",
Numerico, Continuo, Formato( "Migliore", 10 ),
Imposta proprietà ("Limiti specifiche", Limiti specifiche (LSL (10), USL (50), Obiettivo (30))),
Imposta valori ([18.306, 18.937, 17.979])
)
Nuova colonna("Test",
Numerico, Continuo, Formato( "Migliore", 12 ),
Imposta proprietà("Limiti specifiche", {LSL( 1 ), USL( 5 ), Target( 3 ), Mostra limiti( 0 )}),
Imposta valori ([2, 3, 4])
)
Sembra che il codice per la proprietà dei limiti di specifica sia diverso. L'unico motivo per cui riesco a pensare è che per i miei dati reali ho importato i limiti delle specifiche da una tabella dati utilizzando la piattaforma di capacità, mentre per la colonna di test li ho inseriti manualmente.
Potrebbe essere questa la fonte del mio problema? Esiste un modo per aggirare questo problema o devo inserire manualmente i limiti delle specifiche (o con uno script come quello di MS)?
Grazie,
Matteo.
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneQuando l'ho testato per la prima volta, ha funzionato su 58 delle 81 colonne che avevo in una tabella esistente.Ho scoperto che i nomi delle colonne cambiavano convenzione nella variabile Cols1 nello stesso punto (le prime 58 erano ":ColumnName" e il resto era senza ":"), quindi sono passato all'uso dei nomi delle stringhe e ha funzionato bene per me.
Nel tuo esempio sopra, non viene eseguito da me finché non cambio i due "Cols1[jj]" in "Column(cols1[jj])".C'è una ragione per questo?
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneDovrebbe funzionare e funziona (JMP 11) nell'esempio seguente, basato sul codice. Prova a inserire i comandi Wait(0) per verificare se si tratta di un problema di prestazioni.
//Crea una tabella di esempio
dt = nuova tabella ( "esempio" ) ;
Per ( io = 1 , io <= 100 , io ++,
col = dt << nuova colonna ( "test" , numerico , continuo ) ;
eval ( evalexpr ( col << impostare la proprietà ( "Limiti delle specifiche" , { LSL ( espressione ( io ) ) , USL ( espressione ( io + 2 ) ) , Bersaglio ( espressione ( io + 1 ) ) , Mostra limiti ( 0 )})))
) ;
//Limiti delle specifiche di stampa
cols1 = dt << Ottieni nomi di colonne ( numerico , continuo ) ;
Per ( jj = 1 , jj <= N articoli ( cols1 ) , jj ++,
specifica_x = cols1 [ jj ] << Ottieni proprietà ( "Limiti delle specifiche" ) ;
Stampa (
Car ( jj ) || ": Col è" || Car ( cols1 [ jj ] << ottenere il nome ) || ", LSL è " || Car ( specifica_x [ "lsl" ] ) || ", L'USL è "
|| Car ( specifica_x [ "usl" ] )
) ;
) ;
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneQuesto funziona?
Cancella globali () ;
dt = tabella dati ("blah") ;
cols1 = dt << Ottieni nomi di colonne ( numerico , continuo , "Corda" ) ;
Elementi = N articoli ( cols1 ) ;
Per ( jj = 1 , jj <= Elementi , jj ++,
specifica_x = Colonna ( cols1 [ jj ]) << Ottieni proprietà ( "Limiti delle specifiche" ) ;
Stampa (
Car ( jj ) || ": Col è" || Car ( cols1 [ jj ] ) ||
", LSL è " || Car ( specifica_x [ "lsl" ] ) ||
", L'USL è " || Car ( specifica_x [ "usl" ] )
) ;
) ;
Ri: Tentativo di estrarre i limiti delle specifiche dalle colonneIn relazione a questa discussione: ecco una piccola funzione carina che ho scritto per gestire l'estrazione delle specifiche. Utilizza la gestione delle espressioni e un array associativo per creare un piccolo dizionario carino che può essere utilizzato in seguito:
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
L'uso sarebbe simile a questo:
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);