Scripting Column Switcher para alcanzar los cambios en la variable Y en un gráfico de controlTengo una tabla de datos con numerosas respuestas (numerosas columnas). Todos son válidos para ser trazados de control.
Cuando agrego un conmutador de columnas puedo, como se esperaba, cambiar fácilmente entre respuestas (diferentes columnas) para actualizar el gráfico de control y poder ver inmediatamente la variable de interés.
El único inconveniente es que el eje x siempre tiene, por defecto, la misma longitud, pero el número de datos en cada columna varía; a veces mucho pero a veces no.
Para adaptar el eje x a la cantidad de datos en cualquier columna determinada, puedo hacer esto:
nData = N Rows() - Col N Missing( Column( 1 ) );
ccReport = cc << Report;
axisbox = ccReport[axis box( 1 )];
axisbox << Max( nData + 3 ) << inc( Ceiling( (nData + 3) / 15 ) );
Esto funciona muy bien para el primer gráfico de control, pero tan pronto como selecciono otra variable usando el conmutador de columnas, el eje x vuelve a ser demasiado largo y vuelve a su configuración predeterminada. (Si N filas() es, por ejemplo, 3000 pero para una variable tengo 60 datos, el gráfico resultante parece tonto porque el eje x es demasiado largo).
Usando JSL, ¿cómo puedo crear una secuencia de comandos para que cada vez que seleccione otra columna usando el conmutador de columnas pueda usar el código anterior (o equivalente) para ajustar el eje x y adaptarlo bien a la cantidad de datos reales para la variable en cuestión?
Veo que esta sintaxis "ColumnSwitcherObject << Get Current;" devuelve el nombre de la columna, pero ¿cómo accedo con JSL cada vez que actualizo usando el conmutador de columnas?
Gracias por cualquier ayuda.
Automatización y secuencias de comandosLa personalización en masaIngeniería de Calidad y ProcesosRe: Scripting Column Switcher para alcanzar cambios en la variable Y en un gráfico de controlGracias, Jim. Funciona muy bien ahora.
Re: Scripting Column Switcher para alcanzar cambios en la variable Y en un gráfico de controlEn lugar de establecer
ccReport = cc << Report;
Creo que deberías consultarlo desde la fuente cuando lo uses.
report(cc)[AxisBox(1)] << max(X+1);
A continuación se muestra un script de muestra que recoge las referencias correctas de cc
names default to here(1);
dt=current data table();
cc = Control Chart Builder(
Size( 534, 464 ),
Show Control Panel( 0 ),
Show Capability( 0 ),
Variables( Y( :weight ) ));
cs = cc << Column Switcher( :weight, {:height, :weight} );
report(cc)[FrameBox(1)]<< add graphics script( show(cs<<GET current=""></GET>Re: Scripting Column Switcher para alcanzar cambios en la variable Y en un gráfico de controlGracias, Jim.
Usando el cuadro de marco, como usted sugiere, puedo mostrar en el registro incrustado la columna seleccionada para actualizar el gráfico de control. (Tengo 12 columnas entre las que me gustaría alternar y cada columna tiene un número de datos diferente, de ahí el deseo de volver a escalar el eje x en cada caso para reflejar el número de datos en la columna seleccionada).
Capturo la columna seleccionada con bastante facilidad:
ccReport[FrameBox(1)]<< add graphics script(
cName = cs << Get Current;
show(cName);
If(cName == "JW004",
show("JW004 selected");
,
cName == "JW001",
show("JW001 selected");
,
);
En otras partes de la sintaxis puedo cambiar fácilmente el eje x usando, por ejemplo
ccReport = cc << Report;
axisbox = ccReport[axis box( 1 )];
axisbox << max(x+1); // where x is the no. of data in the column
El problema llega si pongo la sintaxis de axisbox en el framebox. Uno de los errores es
Send Expects Scriptable Object in access or evaluation of 'Send' , ccReport[axis box( 1 )] << /*###*/Max( 200 ) /*###*/
He intentado algunas cosas pero fue en vano. ¿Tiene algún consejo para poder seguir accediendo al cuadro del eje desde el script de gráficos? Sería muy apreciado.
Re: Scripting Column Switcher para alcanzar cambios en la variable Y en un gráfico de controlCreo que puedes resolver tu problema adjuntando un script de gráficos al FrameBox() en el gráfico de control.El script se ejecutará cada vez que se cambie algo en FrameBox().A continuación se muestra un script simple que creo que deberías poder desarrollar
names default to here(1);
dt=current data table();
cc = Control Chart Builder(
Size( 534, 464 ),
Show Control Panel( 0 ),
Show Capability( 0 ),
Variables( Y( :weight ) ));
cs = cc << Column Switcher( :weight, {:height, :weight} );
report(cc)[FrameBox(1)]<< add graphics script( show(cs<<GET current=""></GET>