Grafici di controllo in un loop TabboxCiao, sto lavorando a uno script automatico per l'output dei grafici di controllo basato su un elenco di parametri. Ho una tabella di dati in pila come sotto

che sto cercando di generare grafici di controllo da. Per quanto riguarda lo scripting, ho questo finora
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));So che probabilmente sono fuori dal modo migliore di fare questo, ma questo è in definitiva ciò che devo fare:
- Sottoinsieme dt_final dal raggruppamento
- cambia la colonna della data in numerica -> continua -> ora -> m / g / aa: m (solo per uniformità)
- ordina i sottoinsiemi per data_time_start
- genera diagrammi di controllo di levey jennings per ogni colonna e aggiungilo alla tabbox
- e poiché non tutti i gruppi hanno tutte le colonne, eliminano i grafici senza dati
Ci sono ancora alcuni passaggi mancanti in questo testo, almeno per quanto riguarda la modifica del tipo di dati della data, tuttavia, se qualcuno potrebbe darmi qualche indicazione su questo ciclo.
Grazie.
Ri: Controlli grafici in un loop TabboxScusa, è perché lo script originale aveva sia cols che Rcols nello script (che erano gli stessi). Ho cancellato le colonne ma ho dimenticato di aggiornare la parte dello script in cui crea l'elenco delle colonne del diagramma di controllo. Avevo ancora dei cols in memoria, quindi ha funzionato allora. Aggiornerò lo script nella mia precedente risposta per risolverlo.
Ri: Controlli grafici in un loop TabboxWow, è grandioso, apprezzo anche tutti i lavori di ristrutturazione, grazie. Ricevo un errore quando cerco di eseguire ciò che non sono sicuro di cosa significhi sperare che tu possa aiutarmi a capirlo.
Errore
Abbonamento Intervallo in accesso o valutazione di 'Pedice', colonne [/ * ### * / j]
Ri: Controlli grafici in un loop Tabbox[UPDATE] Risolto un bug nello script.
Questo sembra soddisfare tutti i tuoi criteri, ma è un approccio un po 'diverso che penso che troverai molto più pulito alla fine perché non crei un intero gruppo di tabelle per ogni ID. Invece di inserire la tabella, si utilizza una clausola Where () per i grafici di controllo su ciascuna scheda per sottoporre a sottoinsieme i dati per ciascun 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))));
);
C'è molto da spiegare qui, quindi fammi sapere di cosa hai domande.
Ri: Controlli grafici in un loop TabboxSì, certo, ecco una tabella dati che ho cancellato i nomi.
Ri: Controlli grafici in un loop TabboxPuoi pubblicare un tavolo (sanitizzarlo se necessario) che possiamo usare con il tuo script?
La prima cosa che noto è "<< get kets". Dovrebbe essere "prendi le chiavi"? In tal caso, è necessario utilizzarlo con un array, non con una tabella di dati. Immagino che tu voglia solo un elenco di tutti i valori unici di GROUPING. Puoi farlo con questo:
id = Associative Array(dt_final:GROUPING << Get Values) << Get Keys;
C'è molto di più che vedo nella tua sceneggiatura, ma non ho intenzione di provare a eseguirne il debug senza un tavolo con cui lavorare.