Hallo,
Ich habe eine Datentabelle mit Hunderttausenden von Zeilen.Es gibt eine Lauf-ID-Spalte, eine Spalte mit Gerätenamen (29 derzeit von Interesse) und eine Spalte mit zugeordneten Werten.Für jeden Lauf gibt es also mehrere Geräte, die Daten aufzeichnen, und ich möchte Laufdiagramme für jedes Gerät mit der Lauf-ID als X-Achse erstellen.Ich habe jedoch zwei Probleme, die ich teilweise einzeln lösen kann, aber nicht zusammen.
Zunächst verwende ich JMP 13.Ich habe Zugriff auf JMP 16, aber derzeit nicht installiert.Ich habe eine ganze Reihe bestehender Skripts, die ich nicht beschädigen möchte, indem ich zu einer anderen Version von JMP wechsele, und was ich tun möchte sollte leicht zu machen sein.
Zweitens ist der allgemeine Ansatz, den ich zu verfolgen versuche, folgender:
- Durchlaufen Sie die Liste der eindeutigen Gerätenamen und erstellen Sie ein Ablaufdiagramm; in jedes einzelne Laufdiagramm Kontroll- und Spezifikationsgrenzen eingeben, die aus den Daten für jedes Gerät bestimmt wurden (ich kann die Kontroll- und Spezifikationsgrenzen einfach genug in die Kontrolldiagramme eingeben)
- Aggregieren Sie alle Diagramme in einem neuen Fenster
Das Skript, das ich zum Zeichnen habe, lautet wie folgt:
curDev = devices[i]<BR />dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :DeviceName == curDev ),
Chart Col( Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ), // lims list found separately
SendToReport(
Dispatch(
{"Levey Jennings of Value"},
curDev,
TextEditBox,
{Set Text( curDev )} // Ensures y-axis title is device name rather than column name of "Value"
)
)
);Dadurch werden mehrere Diagrammfenster mit jeweils einem Kästchen oben mit der Aufschrift „Where Device == curDev“ erstellt.
So können Diagramme gezeichnet werden, wenn auch mit einem unnötigen und hässlichen Kästchen, aber ich bekomme 29 Diagrammfenster geöffnet.
Jetzt muss ich sie alle in einem Fenster zusammenfassen und das obere Feld "Where Device ==" entfernen.
Es gibt diese Antwort im Forum, die ich für hilfreich hielt: So entfernen Sie „Where“ aus dem Graph Builder-Berichtsfenster – JMP User Community .In der Tat wird das Kästchen oben entfernt, wenn ich 29 einzelne Diagramme spawne, also:
Build_Chart = Function({var},
cco = dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
for(i=1, i<=NItems(devices), i++,
curDev = devices[i]; //probably unnecessary
Build_Chart(curDev);
)Wenn ich jedoch versuche, das Gleiche zu tun, wie im verlinkten Forenbeitrag beschrieben, bekomme ich 1 Diagramm im Fenster und dann die Skriptfehler mit "Send erwartet skriptfähiges Objekt{75240} bei Zugriff oder Auswertung von 'Send' , tp[Text Box( 1 )] << delete/*###*/"
Build_Chart = Function({var},
// same function as above
)
pb = Panel Box();
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
pb <<APPEND></APPEND>Warum ist das Anhängen des Diagramms an eine Panelbox mit dem tp << delete in der Build_Chart-Funktion ein Problem?
Ein anderer Ansatz, den ich ausprobiert habe, ist etwa der folgende, bei dem ich ein Berichtsobjekt erhalte:
nw = New Window("Charts",
lub = Lineup Box(NCol(2));
);
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
cco = dtRecLog << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Device == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
rep = cco << Report;
lub << Append(rep);
);Dadurch wird das separate Fenster mit 29 Diagrammen ohne das Feld "Where == " erstellt, aber es Auch erzeugt 29 separate Diagrammfenster.cco << Delete Window funktioniert nicht, da cco kein Verweis auf ein Fenster ist.ich könnte do a Window() << Delete Window, aber ich weiß nicht, wie die Fensternamen lauten, und offensichtliche Vermutungen funktionieren nicht, daher kann ich die Fenster in JSL nicht löschen.
Also, wobei ich Hilfe brauche, ist folgendes:
- Erstellen Sie ein Fenster mit allen Diagrammen ohne das Feld „Where :Device == curDev“ über dem Diagrammfenster
- Fassen Sie alle Diagramme in einem einzigen Fenster zusammen
- Spawnen Sie nicht 29 verschiedene Fenster.
Vielen Dank im Voraus für Ihre Hilfe.