
Me encuentro con un problema en el que quiero ver cómo se verían mis límites de control anteriores en relación con los límites de control fijos actuales o nuevos para un conjunto de gráficos de control. Por lo general, agregaría líneas de referencia a cada gráfico, pero creo que podría haber una mejor manera, usando un mensaje de plataforma olvidado (al menos para mí).
A principios de este año estaba jugando con la idea de cómo sería agregar una nueva propiedad de columna, en este caso Límites de acción y alerta para los gráficos de monitoreo ambiental y luego use esa propiedad de columna como una línea de referencia en los gráficos de control.
Mientras buscaba algo completamente diferente en el índice de secuencias de comandos, encontré una función llamada "Agregar límites". Por lo que puedo decir, esta función existe desde hace mucho tiempo, al menos antes de JMP 14, y se puede usar para enviar límites de control superior e inferior a un gráfico de control. Estos límites se muestran como líneas discontinuas y se enumeran en una tabla junto al gráfico. Me tomaría mucho JSL para que eso suceda, por lo que es bueno descubrir una utilidad tan útil.
El uso básico de "Agregar límites" se parece a esto, donde la última línea de JSL envía un mensaje al gráfico que incluye los valores para usar como límites de línea discontinua:
//Example of adding limits to a control chart
ccb = dt << Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) );
ccb << chart( position( 1 ), Add Limits( {LCL( 20 ), UCL( 30 )} ) );
Por supuesto, me gustaría usar "Agregar límites" dinámicamente con cualquier columna, por lo que requiere un poco más de trabajo de pies.
Primero, configuremos una tabla para usarla como ejemplo.Tenga en cuenta que al configurar la tabla, elimino la fórmula que genera algunos datos aleatorios para trabajar justo después de construir la tabla. Esto corrige los valores en la tabla.
dt=New Table( "old and new control limits",Add Rows( 50 ),
New Column( "Column 1",Numeric,"Continuous",Format( "Best", 12 ),
Formula( Round( Random Normal( 25, 3 ), 0 ) )));
column(dt, 1)<< Delete Formula;
El siguiente paso es agregar un nuevo tipo de propiedad de columna, algo personalizado que no existe de forma nativa en JMP.Después de ejecutar esta línea, la columna de la tabla de datos ahora tiene una propiedad llamada Límites de control antiguos .
Column( dt, 1 ) << set property( "Old Control Limits", {LCL( 20 ), UCL( 30 )} );
Luego, solo para verificar si el script funcionó, puede ver los valores de la propiedad de la columna.La nueva variable, OCL , tiene dos valores, LCL(20) , y LUC(30) . Puedo usar esos valores en un nuevo gráfico de control:
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
Las siguientes dos líneas pueden parecer realmente extrañas, pero son súper sólidas y aprovechan la estructura basada en funciones de JSL.
Primero, definiré un par de argumentos vacíos o casi vacíos y luego los anidaré.Al configurar estas expresiones, puedo manejar cada parte sin evaluarlas.ccbe , la expresión del generador de gráficos de control es una función, Generador de gráficos de control con dos argumentos, Variables y Mostrar panel de control .
A continuación, quiero agregar un nuevo argumento llamado c ciervo() a la función Creador de gráficos de control.
- La nueva variable, ce es una expresión con el argumento c ciervo y el gráfico incluye un argumento, posición (1) .
- Quiero agregar, agregar límites a la cuadro argumento por lo que tengo variable ae , para hacer referencia a un vacío añadir límites expresión.
- Por último, hago una lista vacía llamada le , que contendrá los límites que obtuve de Obtener propiedad en el OCL variable del paso anterior.
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
Luego, coloco las piezas juntas para hacer esto:
- Primero, tomo la lista de cosas en OCL e insértelo en le .
- En segundo lugar, tomo le e insértelo en ae , seguido de la inserción ae en ce . En el segundo caso envolví ae dentro de una Nombre Expr() . Esto me da la expresión evaluada de ae sin evaluarlo. Este NombreExpr() El método es muy práctico.
- En tercer lugar, inserto ce en el ccbe , que es la expresión completa del gráfico de control.
- También incluí un Espectáculo después de cada paso para que pueda ver cómo se está construyendo la función en el registro.
- El último paso es obtener un gráfico. con solo correr ccbe solo, se evalúa esa variable que contiene la expresión completa, y obtengo un gráfico de control con líneas discontinuas que representan los límites de control anteriores, que provienen de las propiedades de las columnas
Insert Into( le, OCL );show( le );
Insert Into( ae, le );Show( ae );
Insert Into( ce, Name Expr( ae ) );Show( ce );
Insert Into( ccbe, Name Expr( ce ), 2 );
ccbe;
Con un poco más de esfuerzo, estoy bastante seguro de que sería posible comenzar con una tabla que incluya los límites de control actuales y anteriores, que podría usarse para completar todas las propiedades de columna para una tabla completa de variables de proceso.
Se adjunta el guión completo.