Das Ziel besteht hier darin, eine Reihe von Kontrolldiagrammen (oder einen anderen Bericht) als Grafikdatei zu speichern, die an anderer Stelle verwendet werden kann.
Ich habe zum Beispiel ein PowerPoint-Foliendeck mit 10 Kontrolldiagrammen darin. Jeden Montag muss ich die Kontrollkarten im Dia-Deck aktualisieren. Ich könnte die Diagramme in JMP erstellen und sie dann jede Woche kopieren und in das Deck einfügen, oder ich könnte die Funktion „Einfügen und Verknüpfen“ nutzen, die in den meisten MS-Produkten verfügbar ist.

Dazu könnte ich das Kontrolldiagramm erstellen, es als „figure1.png“ speichern und dann PowerPoint öffnen, wo ich das Bild mit der Option „Einfügen und Verknüpfen“ (kleiner Abwärtspfeil auf der Schaltfläche „Einfügen“) einfügen würde. Ich würde dies für jede der 10 Folien tun. Nächste Woche würde ich einfach jedes Kontrolldiagramm erstellen und jedes in einer Grafikdatei speichern (z. B. Abbildung1.png, Abbildung2.png...). Wenn ich dann den Folienstapel in PowerPoint öffne, wird die neue Version von „figur1.png“ usw. in den Stapel gezogen.
Klingt langweilig? Ja, das wäre schrecklich. Es wäre einfacher, alle 10 Diagramme einfach als PowerPoint-Datei in JMP zu speichern und die Diagramme zu kopieren und einzufügen. Jedoch! Mit ein wenig JSL wird das alles ganz einfach und ich zeige Ihnen, wie es geht.
Bevor wir beginnen, schauen wir uns ein einfaches Skript an, um ein Kontrolldiagramm zu erstellen und zu verstehen, was vor sich geht:
Kontrollkarte ( Gruppengröße( 1 ), Diagrammspalte ( :Metrik 1, Einzelmessung ))
Lassen Sie uns das auseinandernehmen:
Die äußerste Schicht ist Kontrolldiagramm() , und innerhalb dieser Schicht gibt es zwei Teile, Gruppengröße(1) , Und Diagrammspalte() .
Jedes der Elemente hat Argumente, zum Beispiel hat die Gruppengröße ein Argument, „1“. Chart Col() hat zwei Argumente. Das erste ist eine Spaltenreferenz und der Typ des Kontrolldiagramms, das mit dieser Spalte erstellt werden soll. Konzeptionell gibt es Schichten von Funktionen, und eine Möglichkeit zum Skripten besteht darin, Ihre „Zwiebel“ von innen nach außen aufzubauen.
Es gibt wahrscheinlich 100 und 1 Möglichkeiten, dieses Skript zu schreiben, und einige sind möglicherweise einfacher und weniger ausführlich als das, was ich hier tun werde. Der Ansatz, den ich hier verwende, funktioniert in der Regel mit fast jeder Plattform in JMP, erfordert jedoch eine etwas andere Denkweise über Skripterstellung ... Skripterstellung von innen nach außen.
1. alist={}; Hier stelle ich eine Liste mit Spaltennamen bereit, aus denen ich Kontrolldiagramme erstellen möchte. Ein komplexeres Beispiel könnte einen Dialog haben, der zum Generieren der Liste verwendet wird, oder vielleicht einen Logikfilter, um fortlaufende Spalten aus einer Tabelle auszuwählen, aber das ist für einen anderen Blog-Beitrag.
2. a=expr(); Hier nehme ich einfach jede der im Kontrolldiagramm verwendeten Funktionen und definiere sie, lasse sie aber leer.
a=expr(Kontrolldiagramm()); gibt mir die Möglichkeit, Argumente vorzubringen. b=expr(Gruppengröße(1)); ist ein Element, in das ich einfügen werde Kontrollkarte( ) , Und c=expr(Diagrammspalte(... wird auch in „a“ eingefügt. Der " expr( ) „Funktion ist wichtig zu verstehen. Was auch immer darin ist, wird nicht bewertet, nicht „gelesen“ und zu etwas gemacht. Zum Beispiel wenn Sprechen ( "Hallo" ); Wären in Ihrem Skript JMP würde „Hallo“ sagen, aber wenn s=expr( Sprechen ( "Hallo" ) ); wären in Ihrem Skript, würde nichts passieren, bis Sie „s“ ausgewertet oder explizit eval(s) in einem Skript geschrieben hätten. (Genauer gesagt: Wenn „s;“ in einer Zeile Ihres Codes stünde, würde JMP es auswerten und „Hallo“ sagen). Hier verwende ich expr( ) um Teile festzuhalten, die ich später verwenden möchte.
3. Einfügen in (c, alist[i],1); Hier ist „c“ ein unbewertetes Argument, chartcol( Einzelmessung).Einfügen in fügt das erste Ding in der Listenvariablen „alist“ in den Inhalt von „c“ ein. Also jetzt ist c chartcol(:Metrik 1, Einzelmessung).
Dies ist ein guter Ort, um einen Schritt zurückzutreten und zu erklären, woher das „i“ in „alist[i]“ kommt.
Für (i=1, i<=nitems(alist), i++ ist der Anfang einer For Next-Schleife, oder machen Sie dies für diesen Satz von Bedingungen so lange, bis die Bedingung nicht mehr wahr ist. Also, i=1, und solange i kleiner oder gleich der Anzahl der Dinge in „alist“ ist, machen Sie den nächsten Schritt. Die Variable „i“ wird in jeder Schleife um eins erhöht, und wir können diese Zählervariable für andere Dinge in der Schleife verwenden. In der ersten Schleife ist i=1, also verwenden wir es, um das erste Ding in „alist“ zu erhalten, indem wir „alist, subscript, i“ sagen. Später im Skript verwenden wir i im Namen der Datei, die wir speichern. Ich möchte eine fortlaufende Liste von Dateinamen (Abbildung1, Abbildung2, Abbildung3...) Um dies zu erreichen, verkette ich das Präfix mit I. Sofern es kein Problem gibt, können wir eine Zahl nicht verketten, also müssen wir sagen: „ Pfad/Figur"||char(i)||".png „Das numerische i muss eingepackt werden char( ) , dann kann es als Zeichen mit anderen Zeichen verkettet werden. (Dinge in Anführungszeichen gesetzt.)
4. obj=eval(a); An dieser Stelle im Skript die Kontrolldiagramm() Die Funktion wurde gepackt, enthält alle Argumente, die ich benötige, und es ist Zeit, sie auszuwerten. Beachten Sie, dass „obj“, eine Variable, als „Handle“ verwendet werden kann, um mit dem gerade generierten Kontrolldiagramm zu kommunizieren.
5. obj< In diesem letzten Schritt wird der Inhalt von obj als PNG-Bilddatei gespeichert. Beachten Sie, dass der Dateiname die Erweiterung .png hat und dass direkt nach dem Dateinamen das nächste Argument „png“ ist. Dies bedeutet, dass es möglich ist, eine Datei mit der Erweiterung .gif, aber als Dateityp .png zu speichern. Ich empfehle sehr nicht Die Erweiterung und der Dateityp stimmen nicht überein.
6. obj< Das ist nur Aufräumen. Wenn Sie die von Ihnen erstellten JMP-Berichte sehen möchten, wird dies auskommentiert.
7. Das letzte Bit ist „);“ Dies ist die schließende Klammer für den Anfang von For(. In der Praxis ist es beim Codieren eine gute Idee, am Ende der Schleife einen Kommentar zu hinterlassen, etwa „//Ende der i-Schleife“. Dies ist besonders wichtig, wenn Sie innerhalb anderer Schleifen iterieren , es hilft, zu verhindern, dass die Dinge durcheinander geraten.
alist={:Metric 1, :Metric 2, :Metric 3};
for(i=1, i<=nitems(alist), i++,
a=expr(control chart());
b=expr(group size(1));
c=expr(chart col(individual measurement));
insert into(c,alist[i],1);
insert into(a,nameexpr(b));
insert into(a,nameexpr(c));
obj=eval(a);
obj<< Save Picture( "/Users/bywing/Byron Wingerd/Examples/example"||char(i)||".png", "png" );<BR /> obj<< Close Window;
);