Contrôler les graphiques dans une boucle de tabulationBonjour, je travaille sur un script automatisé pour la sortie de cartes de contrôle basées sur une liste de paramètres. J'ai un tableau de données empilé comme ci-dessous

que j'essaie de générer des cartes de contrôle. En ce qui concerne les scripts, j'ai ceci jusqu'à présent
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));Je sais que je suis probablement loin de la meilleure façon de procéder mais c'est finalement ce que je dois faire:
- Sous-ensemble dt_final par le groupement
- changer la colonne de date en numérique -> continu -> heure -> m / j / yh: m (juste pour l'uniformité)
- trier les sous-ensembles par date_time_start
- générer des graphiques de contrôle levey jennings pour chaque colonne et l'ajouter à la boîte à onglets
- et comme chaque groupe n'a pas toutes les colonnes supprimer les graphiques sans données
Il manque encore quelques étapes ici pour changer le type de données de date, cependant, si quelqu'un peut me donner une indication sur cette boucle.
Merci.
Re: Control Charts dans une boucle TabboxDésolé, c'est parce que le script d'origine avait à la fois des colonnes et des symboles dans le script (qui étaient identiques). J'ai supprimé les colonnes, mais j'ai oublié de mettre à jour la partie du script où il construit la liste des colonnes du graphique de contrôle. J'avais encore des cols en mémoire, alors ça a marché. Je mettrai à jour le script dans ma réponse précédente pour résoudre ce problème.
Re: Control Charts dans une boucle TabboxWow, c'est génial, j'apprécie toutes les rénovations, merci. Lorsque j'essaie d'exécuter ceci, je reçois un message d'erreur indiquant que je ne suis pas sûr de ce que cela signifie. J'espère que vous pourrez m'aider à le comprendre.
Erreur
Indice Indice d'accès ou d'évaluation de 'Indice', cols [/ * ### * / j]
Re: Control Charts dans une boucle Tabbox[UPDATE] Correction d'un bug dans le script.
Cela semble répondre à tous vos critères, mais c’est une approche légèrement différente qui, à mon avis, sera beaucoup plus propre à la fin, car vous ne créez pas tout un tas de tables pour chaque ID. Au lieu de sous-définir la table, vous utilisez une clause Where () pour les graphiques de contrôle de chaque onglet afin de sous-définir les données de chaque 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))));
);
Il y a beaucoup à expliquer ici, alors laissez-moi savoir sur quoi vous avez des questions.
Re: Control Charts dans une boucle TabboxOui, bien sûr, voici un tableau de données que j'ai effacé des noms.
Re: Control Charts dans une boucle TabboxPouvez-vous poster un tableau (le désinfecter si nécessaire) que nous pouvons utiliser avec votre script?
La première chose que je remarque est "<< get kets". Est-ce que c'est supposé être "obtenir les clés"? Si c'est le cas, vous devez utiliser cela avec un tableau, pas une table de données. Je suppose que vous voulez juste une liste de toutes les valeurs uniques de GROUPING. Vous pouvez le faire avec ceci:
id = Associative Array(dt_final:GROUPING << Get Values) << Get Keys;
Il y en a beaucoup plus dans votre script, mais je ne vais pas tenter de le déboguer sans table.