Bucle a través de columnas [Control de rango]Me gustaría recibir orientación sobre la aplicación de una verificación de rango basada en límites de especificaciones ya completados.
Esta prueba tiene 87 límites de detección y me gustaría aplicar una verificación de rango para ayudar a establecer límites de especificaciones.
Sé que puedo usar el script para lo que quiero lograr, pero no puedo averiguar cómo aplicar el Control de rango (LELE (16, 46)), por ejemplo ...
Gracias por tu tiempo
// 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 ) );
);
);
Re: Looping Through Columns [Range Check]Esto funciona para mi Cambié el intento a solo comprobar que tiene filas en caso de que falle por alguna razón, no querría pasar errores en silencio.
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]]))
)
));
);
);Re: Looping Through Columns [Range Check]Aquí hay un ejemplo de cómo hacerlo:
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]
)
)
);
);Re: Looping Through Columns [Range Check]Muy apreciado. Lo intentaré lo antes posible ...
RE.
Re: Looping Through Columns [Range Check]Ya que SPEC_COL_NAMES es el mismo en cada tabla, ¿puedes agregar el rango A y el rango B a la misma tabla y hacer que salga de allí además de los spec_limits?
Re: Looping Through Columns [Range Check]@txnelson
Hace un tiempo, me proporcionó un excelente script que itera diferentes columnas, crea un diario, traza gráficos y luego agrega ese diario.
Estoy buscando hacer lo mismo con los Gráficos de control. Sin embargo, se podrían hacer 87 expresiones diferentes para un Yaxis, pero me pregunto si puede aplicar el mismo concepto con los límites y la verificación de rango. Nuestras pruebas se están volviendo más elaboradas y, en el caso de este post original, tengo 504 condiciones de detección. 87 salidas de prueba actaul con 417 salidas calculadas.
Gracias por adelantado
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;
);Re: Looping Through Columns [Range Check]Si ejecuta su función para un solo valor de Yaxis, ¿le proporciona el gráfico de control deseado? Sospecho que no es así. Tiene una instancia de Eval (Substitute (Expr ())) que no parece que funcione, ya que no tiene ningún elemento de sustitución especificado.
Debe seguir los pasos del bebé para que la función se ejecute y luego comenzar a agregar el bucle.
Pero primero, creo que necesitas pasar mucho tiempo leyendo la Guía de Scripting
Ayuda ==> Libros ==> Guía de scripting
Re: Looping Through Columns [Range Check]Nuevamente, gracias a ambos por su ayuda. Sin embargo, recibo este error "Los datos fuera de rango para la columna 'RF_IN_4_LPF_THRU a BM_A_OUT S21 Estado 1 a 10.25GHz' se configurarán como faltantes. ¿Continuar?
Recuerdo haber visto esta ventana emergente cuando configuro manualmente el rango ... ¿Ocurrió esto cuando lo corriste de tu lado?
Nota: Todavía estoy recibiendo el error ...