non importa, l'ho capito da solo:
populateSpecs = Function({dt, dt1}, {Default Local},
// Loop over rows of dt1, and iff there is a matching column in dt set its property
clist = dt << GetColumnNames(Numeric, String);
for (r=1, r<=NRows(dt1), r++,
name = Column(dt1, "Variable")[r];
lsl = Column(dt1, "LSL")[r];
usl = Column(dt1, "USL")[r];
tar = Column(dt1, "Target")[r];
Eval(
Eval Expr(
if (Contains(clist, name), Column(dt, name) << Set Property ( "Spec Limits",
{LSL( Expr(lsl) ), USL( Expr(usl) ), Target( Expr(tar) ), Show Limits( 1 )})
)
)
)
)
);
PopulateSpecs non funziona più con JMP 13 (a meno che non stia facendo qualcosa di sbagliato). Ho provato a "ripararlo", ma non funziona. Presumo che abbia a che fare con la valutazione dei valori correnti di lsl, usl e tar nel ciclo, ma non riesco a capire come farlo funzionare. Suggerimenti?
// ******************************************************************************************
// Given a table dt, and a table dt1 containing spec limits, populates spec limit properties in dt
// ******************************************************************************************
populateSpecs = Function({dt, dt1}, {Default Local},
// Loop over rows of dt1, and iff there is a matching column in dt set its property
clist = dt << GetColumnNames(Numeric, String);
for (r=1, r<=NRows(dt1), r++,
name = Column(dt1, "Variable")[r];
lsl = Column(dt1, "LSL")[r];
usl = Column(dt1, "USL")[r];
tar = Column(dt1, "Target")[r];
if (Contains(clist, name), Column(dt, name) << Set Property ( "Spec Limits",
{LSL( lsl ), USL( usl ), Target( tar ), Show Limits( 1 )})
)
)
);
Nel seguente codice 'dt' ('dt1') è un riferimento alla tabella contenente i dati (i limiti delle specifiche). Per usare il codice, fai 'File> Nuovo> Nuovo script', taglia e incolla nella finestra che appare, quindi fai 'Modifica> Esegui script'.
NamesDefaultToHere ( 1 ) ;
// Stabilisci dei limiti per le specifiche con cui lavorare
dt1 =
Nuova tabella ( "Limiti delle specifiche" ,
Aggiungi righe ( 3 ) ,
Nuova colonna ( "Processi" ,
Personaggio ,
"Nominale" ,
Imposta valori ( { "NPN1" , "PNP1" , "PNP2" } )
) ,
Nuova colonna ( "LSL" ,
Numerico ,
"Continuo" ,
Imposta valori ( [ 104,412948990151 , 164,389518443879 , - 136,122122529984 ] )
) ,
Nuova colonna ( "Bersaglio" ,
Numerico ,
"Continuo" ,
Imposta valori ( [ 118,153221027253 , 297,017932186294 , 465,441998810449 ] )
) ,
Nuova colonna ( "USL" ,
Numerico ,
"Continuo" ,
Imposta valori ( [ 131,893493064355 , 429,64634592871 , 1067,00612015088 ] )
)
) ;
// Crea alcuni dati con cui lavorare
dt =
Nuova tabella ( "Dati" ,
Aggiungi righe ( 10 ) ,
Nuova colonna ( "NPN1" ,
Numerico ,
"Continuo" ,
Imposta valori (
[ 114,555760105678 , 120,043693059459 , 114,926510466106 , 111,756445551183 ,
111,545085144313 , 113,52359591958 , 111,749308571209 , 114,411433304976 ,
118,48975048042 , 113,171122695149 ]
)
) ,
Nuova colonna ( "PNP1" ,
Numerico ,
"Continuo" ,
Imposta valori (
[ 322,616751775796 , 333,128079728678 , 348,978757216574 , 268,548094462492 ,
295,073165929223 , 323,833298568833 , 369,320490694357 , 342,987400315929 ,
315,52243608245 , 288,978183718528 ]
)
) ,
Nuova colonna ( "PNP2" ,
Numerico ,
"Continuo" ,
Imposta valori (
[ 469,390289765043 , 437,781112798903 , 532,12814730405 , 373,058628529111 ,
338,900737368942 , 469,992171436316 , 563,084459366587 , 479,378108668814 ,
530,265608347575 , 421,454501563007 ]
)
)
) ;
// ************************************************ ******************************************
// Dato un riferimento alla colonna, imposta la proprietà spec liomits
// ************************************************ ******************************************
setSpecLimits = funzione ({ c , lsl , USL , catrame } ,
cmd = expr ( c << SetProperty ( "Limiti delle specifiche" , { LSL ( espr ( lsl )) , USL ( espr ( USL )) , Bersaglio ( espr ( catrame ))})) ;
eval ( evalexpr ( cmd )) ;
) ;
// ************************************************ ******************************************
// Data una tabella dt e una tabella dt1 che contiene i limiti delle specifiche, popola le proprietà limite delle specifiche in dt
// ************************************************ ******************************************
populateSpecs = Funzione ({ dt , dt1 } , { Locale predefinito } ,
// Passa sopra le righe di dt1 e se c'è una colonna corrispondente in dt ne imposta la proprietà
CLIST = dt << GetColumnNames ( Numerico , Stringa ) ;
per ( r = 1 , r <= nRows ( dt1 ) , r ++,
nome = Colonna ( dt1 , "Processi" ) [ r ] ;
lsl = Colonna ( dt1 , "LSL" ) [ r ] ;
USL = Colonna ( dt1 , "USL" ) [ r ] ;
catrame = Colonna ( dt1 , "Bersaglio" ) [ r ] ;
Se ( contiene ( CLIST , nome ) , SetSpecLimits ( Colonna ( dt , nome ) , lsl , USL , catrame )) ;
)
) ;
// Definisce le proprietà della colonna del limite di specifiche in dt usando dt1
Aspettare ( 3 ) ;
populateSpecs ( dt , dt1 ) ;
// Avvia la piattaforma Capability (che utilizza automaticamente le proprietà della colonna)
Cols = dt << getColumnNames ;
dt << Capacità ( Y ( Eval ( Cols ))) ;