Looping Through Columns [Range Check]Vorrei alcune indicazioni per applicare un controllo di intervallo basato su limiti di specifiche già popolate.
Questo test ha 87 limiti di screening e vorrei applicare un controllo di intervallo per aiutare a stabilire i limiti delle specifiche.
So che posso usare la sceneggiatura per quello che voglio realizzare, ma non riesco a capire come applicare il controllo di intervallo (LELE (16, 46)), per esempio ..
Grazie per il tuo tempo
// dtsplitmeas is the table that is split
cols = dtsplitmeas << get Column names( string );
// dtlim is _SPEC LIMITS_ .jmp attached to this thread
// dtrange is _RANGE CHECK_ .jmp attached to this thread
// Assign Spec Limit script
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
limrow = Try( (dtlim << get rows where( dtlim:SPEC_COL_NAMES == cols[i] ))[1], . );
If( Is Missing( limRow ) == 0,
specs = {LSL( . ), USL( . ), Target( . ), Show Limits( 1 )};
specs["LSL"] = dtlim:LSL[limrow];
specs["USL"] = dtlim:USL[limrow];
Column( dtsplitmeas, Char( cols[i] ) ) << set property( "spec limits", Eval( specs ) );
);
);
Ri: Loop Through Columns [Controllo intervallo]Questo funziona per me. Ho cambiato il tentativo di controllare che abbia delle righe nel caso in cui per qualsiasi motivo fallirebbe, non vorrei passare in silenzio gli errori.
Names default to here(1);
dtsplitmeas = Data Table("sample data");
dtlim = Data Table("_ SPEC LIMITS_");
dtrange = Data Table( "_ RANGE CHECK_" );
// dtsplitmeas is the table that is split
cols = dtsplitmeas << get Column names( string );
// dtlim is _SPEC LIMITS_ .jmp attached to this thread
// dtrange is _RANGE CHECK_ .jmp attached to this thread
// Assign Spec Limit script
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
limrow = dtlim << get rows where( dtlim:SPEC_COL_NAMES == cols[i] );
If( nrows(limrow),
specs = {LSL( . ), USL( . ), Target( . ), Show Limits( 1 )};
specs["LSL"] = dtlim:LSL[limrow[1]];
specs["USL"] = dtlim:USL[limrow[1]];
Column( dtsplitmeas, Char( cols[i] ) ) << set property( "spec limits", Eval( specs ) );
//this assumes that the spec_col_names are exactly the same in both tables
Eval(EvalExpr(
Column( dtsplitmeas, char(cols[i])) << Set Property("Range Check",
LELE(Expr(dtrange:rangeA[limrow[1]]), Expr(dtrange:rangeB[limrow[1]]))
)
));
);
);Ri: Loop Through Columns [Controllo intervallo]Ecco un esempio su come farlo:
Names Default To Here( 1 );
dtsplitmeas = Data Table( "sample data" );
dtrange = Data Table( "_ RANGE CHECK_" );
// dtsplitmeas is the table that is split
cols = dtsplitmeas << get Column names( string );
// dtlim is _SPEC LIMITS_ .jmp attached to this thread
// dtrange is _RANGE CHECK_ .jmp attached to this thread
// Assign Spec Limit script
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
rangerow = Try( (dtrange << get rows where( dtrange:SPEC_COL_NAMES == cols[i] ))[1], . );
If( Is Missing( rangeRow ) == 0,
Eval(
Substitute(
Expr(
Column( dtsplitmeas, Char( cols[i] ) ) <<
Range Check( LELE( __low__, __high__ ) )
),
Expr( __low__ ), dtrange:rangeA[rangerow],
Expr( __high__ ), dtrange:rangeB[rangerow]
)
)
);
);Ri: Loop Through Columns [Controllo intervallo]Davvero apprezzato. Lo proverò AL PIÙ PRESTO ..
D.
Ri: Loop Through Columns [Controllo intervallo]Dato che SPEC_COL_NAMES è lo stesso in ogni tabella, puoi semplicemente aggiungere l'intervallo A e l'intervallo B alla stessa tabella e tirarla da lì oltre a spec_limits?
Ri: Loop Through Columns [Controllo intervallo]@txnelson
Da un po 'di tempo mi hai fornito un grande script che itera colonne diverse, crea un diario, grafici e poi appende quel diario.
Sto cercando di fare la stessa cosa con le tabelle di controllo, tuttavia, si potrebbero fare 87 espressioni diverse per un Yaxis, ma mi chiedo se è possibile applicare lo stesso concetto con i limiti e il controllo della gamma? I nostri test sono sempre più elaborati e, nel caso di questo post originale, ho 504 condizioni di screening. 87 uscite di prova actaul con 417 uscite calcolate.
Grazie in anticipo
doDistrPlot = Function(
{dtsplitmeas, Yaxis },
Eval(
Substitute(
Expr(
gb = Control Chart Builder(
Size( 734, 854 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables(
Y( Eval( Yaxis )) // Is evaluated in the same manner as the limits and range check.
),
Chart( Position( 1 ), Limits( Sigma( "Moving Range" ) ) ),
Chart( Position( 2 ), Limits( Sigma( "Moving Range" ) ) )
)
)
)
);
(gb << Top Report )[Text Box( 1 )] << Delete;
Report( gb )[Outline Box( 1 )] << Set Title( Eval Insert( Yaxis ) );
);
cols = dtsplitmeas << get Column names( string );
jjr1 = New Window( "Journal Window", << Journal );
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
Yaxis = dtlim << Get Rows Where( dtlim:SPEC_COL_NAMES == cols[i] );
doDistrPlot( dtsplitmeas, Yaxis );
jjr1 << Append( Report( gb ) );
gb << Close Window;
);Ri: Loop Through Columns [Controllo intervallo]Se si esegue la funzione per un solo valore di Yaxis, ti dà la tabella di controllo desiderata? Sospetto che non sia così. Si dispone di un'istanza Eval (sostitutiva (Expr ()), che non sembra che dovrebbe funzionare, dal momento che non sono specificati elementi di sostituzione.
È necessario eseguire i piccoli passaggi per eseguire la funzione, quindi iniziare a aggiungere il ciclo.
Ma prima, penso che sia necessario passare una buona parte del tempo leggendo la Guida agli script
Guida ==> Libri ==> Guida di scripting
Ri: Loop Through Columns [Controllo intervallo]Ancora una volta, grazie per il tuo aiuto. Tuttavia, visualizzo questo errore "I dati fuori campo per la colonna" RF_IN_4_LPF_THRU in BM_A_OUT S21 State 1 @ 10.25GHz "verranno impostati su mancanti. Continua?
Ricordo di averlo visto quando ho impostato manualmente l'intervallo ... E 'successo quando l'hai eseguito dalla tua parte?
Nota: sto ancora ricevendo l'errore ...