Cuadros de control en un cuadro de TabboxHola, estoy trabajando en un script automatizado para generar gráficos de control basados en una lista de parámetros. Tengo una tabla de datos apilada como abajo

Estoy tratando de generar gráficos de control desde. En cuanto a las secuencias de comandos tengo esto hasta ahora
Rcols = dt_final << Get Column Names();
id = dt_final << get kets;
tb = tabbox();
for(i, i<=nitems(id), i++,
cols = Rcols;
dt = dt_final << subset(by(id[i]));
dt << sort(by(dt, :DATE_TIME_START), Order(Ascending), Replace Table);
ccExpr = Expr(Control Chart(
Sample Label( column(dt,:DATE_TIME_START) ),
KSigma( 3 ),
For( i = 1, i <= N Items( cols ), i++,
insert into(ccExpr, EvalExpr(Chart Col( Column( dt_final, Expr(cols[i]) ), Levey Jennings )))
);
cc = Eval(EvalExpr(
platform(dt_final,
Expr(
nameexpr(ccExpr)
)
)
));
);
tb << Append(group, cc);
// Create the display window
));
nw = New Window( "Control Charts", Outlinebox("Control Charts By Process ID", tb));Sé que probablemente estoy fuera de la mejor manera de hacer esto, pero esto es, en última instancia, lo que necesito hacer:
- Subconjunto dt_final por la agrupación
- cambie la columna de fecha a numérica -> continua -> hora -> m / d / yh: m (solo para uniformidad)
- ordena los subconjuntos por fecha_estación_tiempo
- genere los gráficos de control de levey jennings para cada columna y adjúntelos a la caja de tabulación
- y dado que no todos los grupos tienen todas las columnas, elimine los gráficos sin datos
Sin embargo, todavía faltan algunos pasos para cambiar el tipo de datos de fecha, si alguien me puede dar alguna dirección en este ciclo.
Gracias.
Re: Gráficos de control en un bucle TabboxLo siento, es porque el script original tenía tanto cols como Rcols en el script (que eran los mismos). Borré cols pero olvidé actualizar la parte del script donde se construye la lista de columnas del gráfico de control. Todavía tenía cols en memoria, así que funcionó entonces. Voy a actualizar el script en mi respuesta anterior para arreglar eso.
Re: Gráficos de control en un bucle TabboxWow, esto es genial. Aprecio todas las renovaciones y gracias. Recibo un error cuando intento ejecutar esto y no estoy seguro de lo que significa, espero que pueda ayudarme a entenderlo.
Error
Rango de subíndices en el acceso o evaluación de 'Subíndice', cols [/ * ### * / j]
Re: Gráficos de control en un bucle Tabbox[ACTUALIZACIÓN] Se corrigió un error en la secuencia de comandos.
Esto parece cumplir con todos sus criterios, pero es un enfoque un poco diferente que creo que encontrará mucho más limpio al final porque no crea un montón de tablas para cada ID. En lugar de subcontratar la tabla, utilice una cláusula Where () para los gráficos de control en cada pestaña para subcontratar los datos para cada ID.
dt_final = Current Data Table();
//Sort by Grouping and Start Time
dt_final << Sort(
By( :GROUPING, :DATE_TIME_START ),
Order( Ascending, Ascending ),
Output Table( "Final Sorted" ),
Replace Table
);
//List of Columns and Individual IDs
Rcols = dt_final << Get Column Names();
id = Associative Array(dt_final:GROUPING) << get keys;
//Initialize the window
nw = New Window("Control Charts",
Outlinebox("Control Charts By Process ID",
tb = tabbox();
)
);
//Create expression for control charts - use same expression for each subset of the data table
//We'll substitute different values for GroupID and col_list for each grouping
ccExpr = "Control Chart(
Sample Label( :DATE_TIME_START ),
KSigma( 3 ), col_list, Where(:GROUPING == \!"GroupID\!"))";
//Loop through each ID and add control charts to a new tab
for(i=1, i <= N Items(id), i++,
//If column has data, add it to the control chart report
cols_temp = ""; //will hold list of control charts for the current ID
//Loop through each column, determine if column has data for current ID
For( j = 3, j <= N Items( Rcols ), j++,
If(Sum(!Is Missing(Column(dt_final, j)[dt_final << Get Rows Where(:GROUPING == id[i])])) > 0,
cols_temp = cols_temp || Eval Insert("\[, Chart Col( Column( "^Rcols[j]^" ), Levey Jennings )]\");
)
);
//Substitute in the current ID for GroupID in ccExpr
ccExpr_temp = Substitute(ccExpr, "GroupID", id[i]);
//Substitute in the list of control chart columns for col_list in ccExpr
ccExpr_temp = Substitute(ccExpr_temp, "col_list", cols_temp);
//Add results to the tab box by parsing the string ccExpr_temp into an expression and evaluating it
tb << Add(id[i], platform(dt_final, Eval(Parse(ccExpr_temp))));
);
Hay mucho que explicar aquí, así que solo déjeme saber sobre qué tiene preguntas.
Re: Gráficos de control en un bucle TabboxSí, por supuesto, aquí hay una tabla de datos que borré los nombres.
Re: Gráficos de control en un bucle Tabbox¿Puede publicar una tabla (desinfectarla si es necesario) que podemos usar con su script?
Lo primero que noté es "<< obtener kets". ¿Se supone que eso es "conseguir llaves"? Si es así, necesita usar eso con una matriz, no con una tabla de datos. Supongo que solo desea una lista de todos los valores únicos de GROUPING. Puedes hacer eso con esto:
id = Associative Array(dt_final:GROUPING << Get Values) << Get Keys;
Hay mucho más que veo en su script, pero no voy a intentar depurarlo sin una tabla con la que trabajar.