Kontrolldiagramme in einer Tabbox-SchleifeHallo, ich arbeite an einem automatisierten Skript zur Ausgabe von Regelkarten basierend auf einer Liste von Parametern. Ich habe eine gestapelte Datentabelle wie unten

von denen ich versuche, Regelkarten aus zu generieren. Was das Scripting angeht, so habe ich das bisher
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));Ich weiß, dass ich wahrscheinlich nicht der beste Weg bin, dies zu tun, aber das ist letztendlich das, was ich tun muss:
- Teilmenge dt_final von der Gruppierung
- Ändern Sie die Datumsspalte in numerisch -> kontinuierlich -> Zeit -> m / d / yh: m (nur für die Einheitlichkeit)
- Sortieren Sie die Subsets nach date_time_start
- Erzeugen Sie für jede Spalte Steuerkarten für Levey-Kennzeichnungen und hängen Sie sie an die Tab-Box an
- und da nicht in jeder Gruppe alle Spalten die Diagramme ohne Daten löschen
Hier fehlen noch einige Schritte, wie zum Beispiel das Ändern des Datums-Datentyps, wenn mir jemand eine Richtung in dieser Schleife geben könnte.
Vielen Dank.
Re: Control Charts in einer Tabbox-SchleifeSorry, das liegt daran, dass das Originalskript sowohl Cols als auch Rcols im Script hatte (die gleich waren). Ich habe Spalten gelöscht, aber vergessen, den Teil des Skripts zu aktualisieren, in dem die Liste der Kontrolldiagrammspalten erstellt wird. Ich hatte immer noch Cols im Gedächtnis, also hat es dann funktioniert. Ich werde das Skript in meiner vorherigen Antwort aktualisieren, um das zu beheben.
Re: Control Charts in einer Tabbox-SchleifeWow, das ist großartig. Ich danke allen Renovierungsarbeiten. Ich erhalte eine Fehlermeldung, wenn ich versuche, das auszuführen, und ich bin mir nicht sicher, was es bedeutet. Hoffentlich können Sie mir helfen, es zu verstehen.
Error
Indexbereich beim Zugriff oder bei der Bewertung von 'Index', Spalte [/ * ### * / j]
Re: Control Charts in einer Tabbox-Schleife[UPDATE] Fehler im Skript behoben.
Dies scheint alle Ihre Kriterien zu erfüllen, aber es ist ein bisschen ein anderer Ansatz, der meiner Meinung nach am Ende viel sauberer ist, da Sie nicht für jede ID eine ganze Reihe von Tabellen erstellen. Anstatt die Tabelle zu subsets, verwenden Sie eine Where () - Klausel für die Steuerungsdiagramme auf jeder Registerkarte, um die Daten für jede ID zu subsetieren.
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))));
);
Hier gibt es viel zu erklären, also lassen Sie mich wissen, worüber Sie Fragen haben.
Re: Control Charts in einer Tabbox-SchleifeJa, natürlich, hier ist eine Datentabelle, von der ich Namen abgewischt habe.
Re: Control Charts in einer Tabbox-SchleifeKönnen Sie eine Tabelle posten (wenn nötig, bereinigen Sie sie), die Sie mit Ihrem Skript verwenden können?
Das erste, was mir auffällt, ist "<< Get Kets". Soll das "Schlüssel erhalten" sein? Wenn ja, müssen Sie dies mit einem Array und nicht mit einer Datentabelle verwenden. Ich vermute, Sie möchten nur eine Liste aller eindeutigen Werte von GROUPING. Das kannst du damit machen:
id = Associative Array(dt_final:GROUPING << Get Values) << Get Keys;
Ich sehe viel mehr in Ihrem Skript, aber ich werde nicht versuchen, es ohne eine Tabelle zu debuggen, mit der ich arbeiten kann.