Cómo utilizar JSL para obtener límites en el gráfico de control de IRHola,
Suponiendo que tengo una tabla de límites guardada con varias columnas de parámetros como se muestra a continuación. ¿Hay alguna manera de leer este archivo y aplicar los límites a un gráfico IR para los parámetros coincidentes usando JSL?

Según la siguiente publicación, no hay forma de invocar la función "Obtener límites" desde el cuadro de diálogo Gráfico de control usando JSL. En este caso, se sugirió codificar los límites.
Cómo-obtener-límites-de-capacidad-en-el-gráfico-de-control-IR-IR
Estoy pensando que necesito leer el archivo de límites, capturar Sigma, Avg, LCL y UCL como variables y luego pasarlas al Chart Col para cada parámetro.Si esta es la única manera de hacerlo, ¿cuál sería la forma más eficiente de abordarlo?
Vea a continuación el ejemplo del código para un único parámetro del gráfico de control con nivel de fase y límites codificados:
Control Chart(
Sample Label( :WEEK ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
:P1,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( 0.0106958422036977 ),
Avg( 5.59766666666667 ),
LCL( 5.56557914005557 ),
UCL( 5.62975419327776 )
)
)
)
);
Gracias de antemano.
ry
Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IR¡Excelente! Eso me puso en el camino correcto.
¡Gracias!
Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IRPuede utilizar JSL con el comando Obtener límites para un gráfico de control IR.La publicación a la que hizo referencia trataba sobre límites de especificación y no sobre límites de control.Si tiene límites de control, puede utilizar el siguiente JSL con el comando Obtener límites.
dt = Open("$SAMPLE_DATA/Quality Control/Coating.jmp");
obj = Control Chart(
Sample Size( Column(dt, "Sample") ),
Chart Col( :Weight, XBar, R ),
Get Limits(
"$SAMPLE_DATA/Quality Control/CoatingLimits.jmp"
)
);
Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IR
Not Found in access or evaluation of 'Control Chart' , Bad Argument( {:Month Alerted, :YEAR} ), Control Chart(/*###*/Sample Label( :Month Alerted ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
:Grand Total,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( 9843.52246062887 ),
Avg( 54802.5935983333 ),
LCL( 25272.0262164467 ),
UCL( 84333.1609802199 )
)
)
)
)
Mis columnas reciben alerta por mes, el contenido de los datos de la columna es de 12 meses en este formato 2019-04, por lo que cambié la etiqueta de muestra a: alerta por mes.
La siguiente parte es el AÑO y la Fase que no coinciden con mis datos, así que creo que ahí es donde no funciona.
Los límites son varias columnas, pero cada una con un encabezado diferente. Idealmente, no quiero escribir cada encabezado de columna.
También necesito el tamaño (500,175), pero no estoy seguro de dónde encaja en el código y lo guardo en la tabla de datos.
Intenté usar el generador de gráficos de control, pero no pude agregar los límites. Seleccioné el archivo pero no hizo nada después. Lo que significaba que no podía conseguir algún tipo de guión.
Muchas gracias. Adjunto el guión.
Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IR¿Qué mensajes de error recibe en el registro?Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IRHola, me encontré con esta solución y traté de implementarla, pero no me funciona. Abre los archivos que especifico en la parte superior del script pero no continúa con el resto del script. Puede que tenga algo que ver con la parte de Fase pero no entiendo completamente de dónde viene. gracias por su ayudaRe: Cómo utilizar JSL para obtener límites en el gráfico de control de IRGracias por la rápida respuesta Jim.Estaba intentando establecer los límites de control y la propiedad Sigma y recibía un error para:
too many arguments in access or evaluation of 'Expr' , Expr/*###*/(Column( finalDt, colNamesList[i] ) <<
Set Property(
"Control Limits",
{Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ) )}
), Column( finalDt, colNamesList[i] ) << Set Property( "Sigma", __sigma__ ))El problema era que estaba intentando definir dos propiedades de columna diferentes en la misma expresión sustituta.Después de dividirlo en 2 evaluaciones, funciona.Vea abajo.
Current Data Table( finalDt );
Wait(0);
// Get list of columns to chart
colNameList = finalDt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 2, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
// sigma
theSigma = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_Std Dev" ))[1]];
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr( __process__ << Set Property("Control Limits", {Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ))})),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
Eval(
Substitute(
Expr( __process__ << Set Property("Sigma", __sigma__)),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __sigma__ ), theSigma,
)
);
)
);Gracias de nuevo por tu rápida ayuda.
ry
Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IRSi establece interactivamente los límites de control para un gráfico IR y luego usa el siguiente JSL para recuperar los límites,
:columnname <<GET property=""></GET>
Se mostrará la estructura almacenada para la propiedad de columna.
{Individual Measurement(
Avg( 62.55 ),
LCL( 51.574420384821 ),
UCL( 73.525579615179 )
)}
Entonces, todo lo que hay que hacer es leer la información de la tabla de datos de límites y luego construir la estructura anterior y pasarla a la columna de la tabla de datos de medición.A continuación se muestra una modificación de mi script anterior, excepto que completa los límites de control, en lugar de ejecutar los gráficos de control.
Names Default To Here( 1 );
dt = Open( "path to data table" );
dtLimits = Open( "path to limits table" );
// Get list of columns to chart
colNameList = dt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 1, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr(
__Process__ << set property(
"Control Limits",
{Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ) )}
)
),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
)
);Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IRHola Jim,
¿Puedes mostrarme cómo abordar el primer método que mencionaste? Leer los límites de la tabla de límites y luego aplicarlos como propiedades de columna.
Gracias,
ry
Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IRGracias Jim. Tuve que hacer una pequeña edición en las secciones Obtener filas donde (_LimitsKey == ...). Simplemente agregué los dos puntos ":" para que se convierta en Obtener filas donde (:_LimitsKey == ...) y luego todo funcionó. Pero una pregunta. El script genera ventanas individuales para cada gráfico de control de parámetros. ¿Hay alguna manera de generar una ventana con los gráficos de control de cada parámetro apilados (como si seleccionara varios parámetros en el cuadro de diálogo del gráfico de control IR)?Re: Cómo utilizar JSL para obtener límites en el gráfico de control de IRHay 2 formas básicas de hacer esto.
- Lea los datos de la tabla de límites y luego guarde los límites como Propiedades de columna. Luego ejecute los gráficos deseados.
- Recorra las columnas que se van a graficar, lea los límites de la tabla de límites e insértelos en el JSL para generar los gráficos.
Es el segundo de estos métodos que he utilizado para el siguiente script.Debería ser un script que funcione, pero sin tener realmente la tabla de límites y la tabla de datos real, es posible que haya algunos fallos.
Names Default To Here( 1 );
dt = Open( "path to data table" );
dtLimits = Open( "path to limits table" );
// Get list of columns to chart
colNameList = dt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 1, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
// sigma
theSigma = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_Std Dev" ))[1]];
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr(
Control Chart(
Sample Label( :WEEK ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
__process__,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( __sigma__ ),
Avg( __avg__ ),
LCL( __LCL__ ),
UCL( __UCL__ )
)
)
)
)
),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __sigma__ ), theSigma,
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
)
);