In dieser Demonstration verwenden wir ein vorgefertigtes Skript, um zu sehen, wie ein benutzerdefinierter Bericht erstellt wird. So gibt es im Vorlesungsverzeichnis unter Abschnitt ein Skript namens NOx-Daten für die Stickoxiddaten. Und wir haben sechs verschiedene Präparate. Und dann haben wir das Log der Stickoxidkonzentration für jede der Wiederholungen der sechs verschiedenen Präparate aufgezeichnet. Das Skript ist also vorgefertigt. Und im Kursjournal heißt es Custom NOx Report Script. Und ich werde das Stück für Stück angehen. Aber ich möchte eigentlich das ganze Ding ausführen, damit wir das Endergebnis sehen können, bevor wir es durchgehen und uns ansehen, was jeder Teil des Skripts tut. Also lasse ich das Ganze laufen. Dieses Skript erstellt eine Übersichtstabelle, die im Graph Builder verwendet wird. Wir werden das durchgehen, damit wir nicht nur die Rohdaten verwenden. Der benutzerdefinierte Bericht ist jedoch ein Bericht mit Registerkarten. Auf der ersten Registerkarte namens %CV haben wir diese Live-Graph-Builder-Plattform. Dieses rote Dreieck ist also das typische Menü mit roten Dreiecken, das ich im Graph Builder sehen würde. Und dann haben wir die berechneten Variationskoeffizienten oder %CV für jede Stufe. Und hier haben wir ein benutzerdefiniertes rotes Dreiecksmenü, das unser Skript erstellt hat und mit dem ich die Anzahl der Dezimalstellen angeben kann, die ich für die Zahlenspalten in meinem Bericht haben möchte. Und auf der zweiten Registerkarte namens Hintergrundinformationen habe ich die Rohdaten für jede Ebene, den Mittelwert und die Standardabweichung, die zur Berechnung des Variationskoeffizienten verwendet werden, und den berechneten Wert. Und wenn ich in diesem roten Dreiecksmenü eine Auswahl getroffen habe – was ich eigentlich nur tun werde. In %CV, der vorderen Registerkarte, gehe ich zum roten Dreieck und wähle zwei Dezimalstellen aus. Das Skript prüft alle Zahlenspaltenfelder in diesem Bericht. Schauen wir uns also an, wie es konstruiert wurde. Das erste, was das Skript tut, ist also, dass es die unidirektionale Nachricht an die ursprüngliche Datentabelle mit dem Log des Stickoxids sendet – Log der Konzentration des Stickoxids in der Y-Rolle und der Vorbereitung in der X-Rolle. Und was ich brauche, um den Variationskoeffizienten zu berechnen, ist die Berichtstabelle für Mittelwerte und Standardabweichung. Also bitte ich um Aktivierung. Ich möchte erwähnen, dass es viele Möglichkeiten gibt, den Variationskoeffizienten von JMP zu erhalten, ohne ihn von Hand zu berechnen. Aber wir veranschaulichen noch einmal einige der Ideen, Werte als Matrix zu erhalten und diese Matrixberechnungen zu verwenden. Also werde ich die Zeilen durchlaufen lassen. Und hier ist die Einwegausgabe mit der Tabelle, die ich angefordert habe. Jetzt sehen wir im Einklang diese andere Syntax zum Abrufen der Berichtsebene. Und ein Vorteil der Verwendung dieser Syntax besteht darin, dass ich, wenn ich nicht alles benötige, was in diesem Bericht enthalten ist, in diesem Fall einfach das Gliederungselement für die gewünschte Tabelle anfordern kann – die Mittelwerte und Standardabweichungen. Damit ich meinen Code ein wenig vereinfachen kann, wenn ich auf Anzeigeboxen zugreife. Und das speichere ich in der Variablen ob. Unsere Konvention verwendet hier einfach die Abkürzung für Outline Box. Und Sie haben gesehen, als ich den Mauszeiger bewegte, dass bereits ein Wert gespeichert wird, da ich bereits das gesamte Skript ausgeführt habe. Aber ich werde das neu zuweisen. Jetzt rufen Zeilen und die Spalte der Niveaus und dann die Spalten der Mittelwerte und Standardabweichungen ab. Für die Ebenen muss ich die Werte in dieser Spalte überhaupt nicht manipulieren. Ich möchte das nur in meinem benutzerdefinierten Bericht für die Tabelle "Schätzungen" und in den Hintergrundinformationen - der Tabelle "Alle Ergebnisse". Eine nette Sache, die ich also mit einer Display-Box machen kann, von der ich nur eine Kopie brauche, ist, die Nachricht "Clone Box" zu senden. Und das wird nur einen Klon dieser Anzeigebox in Levels speichern, selbst nachdem ich das Einwegfenster geschlossen habe. Also subskriptieren wir die Variable ob mit String Col Box Jetzt könnten wir auch hier wieder die Spaltenüberschriften verwenden, und das würde sicherlich nicht schaden. Aber da wir nur dieses eine Anzeigefeld gespeichert haben in-- oder die Referenz darauf in ob gespeichert haben, ist es einfach genug, die einfache Syntax mit den Indexwerten zu verwenden. Also führe ich line aus. Und so speichert Levels jetzt ein Display-Feld, und zwar ein String-Spalten-Feld, das Sie hier im Protokoll sehen können. Zeile I muss die Mittelwerte und Standardabweichungen bei der Berechnung verwenden. Ich kann also nicht einfach eine Kopie davon haben. Ich muss die Werte als Matrix erhalten und sie in der Variablen mMeans oder Mittelwertmatrix speichern. Und Sie können im Protokoll sehen, oder wenn Sie mit der Maus über mMeans fahren, was diese Werte sind. Und das Gleiche gilt für die Standardabweichungen. Also führe ich das aus, und wieder können Sie - ich werde es etwas kleiner machen - Sie können diese Werte im Protokoll sehen. Line erstellt eine Variable namens mCVs, und das ist wieder nur die Berechnung für diesen Variationskoeffizienten. Das ist ein relatives Maß für die Variabilität, bei dem wir die Standardabweichungen durch die Mittelwerte dividieren und das dann mit multiplizieren. Also führe ich die Linie aus. Jetzt habe ich also die Variationskoeffizienten. Und an dieser Stelle brauche ich nichts anderes von der Plattform. Also werde ich die Nachricht an ow senden – diese wird an die Objektreferenz des Analyse-Layers gesendet –, um dieses Fenster zu schließen. Und ich empfehle immer, wenn Ihr Skript Fenster schließen kann, egal ob Analysen oder Datentabellen, die nicht mehr benötigt werden, lassen Sie Ihr Skript diese Fenster schließen. Denn wenn wir sie nicht länger offen brauchen, brauchen wir sie auch nicht, um Erinnerungen zu beanspruchen. Als nächsten Schritt wollte ich den Graph Builder in meinem benutzerdefinierten Bericht verwenden. Und der Graph Builder berechnet derzeit keinen Variationskoeffizienten als eine seiner zusammenfassenden Statistiken. Die Problemumgehung bestand also darin, diese Übersichtstabelle mit dem Variationskoeffizienten zu erstellen, der in den Befehl Übersichtstabellen integriert ist, und diese dann als Grundlage für den Graph Builder zu verwenden. Bevor ich also die Zusammenfassungstabelle erhalte, möchte ich die Tabelle schließen, die angezeigt wurde, als ich das gesamte Skript ausgeführt habe. Und wenn ich das schließe, erhalte ich die Warnung, dass ein weiteres Fenster offen ist, also werde ich sagen, machen Sie weiter und schließen Sie alle. Und das hat den Graph Builder sofort aus meinem benutzerdefinierten Bericht entfernt. An diesem Punkt gibt es also keinen wirklichen Grund, diesen benutzerdefinierten Beispielbericht geöffnet zu lassen. Wir werden es neu erstellen, während wir mit dem Skript fortfahren. Also schließe ich auch diesen. Line sendet also "Summary" als Nachricht an die ursprüngliche Datentabelle, wo wir nach Vorbereitung gruppieren. Und die Statistik wird dieser Variationskoeffizient sein. Also führe ich line aus. Und jetzt habe ich alles, was ich brauche, um meinen benutzerdefinierten Bericht zu erstellen. Also verwenden wir Neues Fenster. Und ich werde die dadurch erstellte Anzeigebox in der Variablen nw speichern, damit ich damit kommunizieren kann. Ich nenne mein neues Fenster Custom Report und möchte dann diese Registerkarten skripten. Also spezifizieren wir Tab Box. Und dann wird die Anzahl der Registerkarten nur dadurch bestimmt, wie viele Argumente für Registerkartenseitenfelder Sie dafür angeben. Also werden wir in diesem Fall haben. Das erste Argument für Tab Page Box ist der Titel. Und so heißt der erste %CV. Und dann gibt mir H List Box ein horizontales Listenfeld, das den Graph Builder enthält. Und so starte ich das tatsächlich live. So bekomme ich diese Live-Plattform in dieses Fenster, indem ich diesen Start einfach in der Anzeigebox erscheinen lasse. Dies ist eine Syntax, die ich möglicherweise aus der interaktiven Erstellung des Graph Builder und dem Senden an die Summarize-Tabelle entnommen habe. Und dann, das andere, was ich in der H List Box ausrichte, ist die Gliederungsbox namens Estimates, in der die Tabellenbox mit der String-Spaltenbox in Levels gespeichert wird. Und mein Skript erstellt ein Zahlenspaltenfeld mit den %CV-Werten. Das Feld der zweiten Registerkarte enthält die Hintergrundinformationen, wobei ein Gliederungsfeld verwendet wird, um es als Alle Ergebnisse zu bezeichnen. Und innerhalb der Gliederungsbox reiht eine Tabellenbox vier Zahlenspaltenboxen horizontal aneinander. Also werde ich das größer machen, nur damit ich sicherstellen kann, dass ich die Linien ergreife, die ich will, die durch sind, und ich werde diesen Teil laufen lassen. Das ist also nicht vollständig. Dies ist der Ausgangspunkt für meinen benutzerdefinierten Bericht. Und ich denke, ich kann das Skriptfenster jetzt etwas schmaler machen, damit wir beide nebeneinander sehen können. Graph Builder hat also standardmäßig keine Linie bei, also ist das eines der Dinge, die ich hinzufügen möchte. Ich möchte die Größe ändern, weil ich das Diagramm nicht so groß brauche. Und ich möchte dieses rote Dreiecksmenü zum Gliederungselement "Schätzungen" hinzufügen. Beachten Sie, dass ich im Skript, als ich das Gliederungsfeld der Schätzungen auf der ersten Registerkarte des benutzerdefinierten Berichts erstellt habe, dieses Ergebnis in ob gespeichert habe. Und das war ein Variablenname, den ich zuvor verwendet hatte, als ich die Mittelwerte und Standardabweichungen von der Einwegplattform erhielt. Also habe ich auch hier wieder einfach die Abkürzung verwendet und diesen Wert überschrieben, weil ich den vorherigen Wert nicht benötigte. Wenn ich also jetzt nach unten scrolle, um den Rest des Skripts zu sehen, sende ich eine Nachricht "Set Menu Script" an das Anzeigefeld, das in ob gespeichert ist, das ist das Übersichtsfeld für Schätzungen. Und Set Menu Script nimmt als Argument eine Liste von Menüpunkten, die sich mit dem Ausdruck abwechseln, der ausgeführt wird, wenn dieser Menüpunkt ausgewählt wird. Der Ausdruck durchläuft also einfach die Zahlenspaltenfelder im Bericht und legt das Format fest. Wir haben eine Feldbreite von maximal darstellbaren Zeichen – und dann die Anzahl der Dezimalstellen. Je nachdem, welche dieser roten Dreieck-Menüoptionen wir auswählen, bestimmt dies, welcher dieser Ausdrücke ausgeführt wird. Also werde ich Linien durchziehen. Und im benutzerdefinierten Bericht sehen Sie jetzt, dass wir das Menü mit dem roten Dreieck haben. Line ändert die Größe des Rahmenfelds aus dem Graph Builder. Und das ist etwas, das, wenn ich zu-- ich würde mit der rechten Maustaste auf die Offenlegungsschaltfläche klicken und unter Bearbeiten Baumstruktur anzeigen auswählen würde-- ich nach unten scrollen könnte. Wenn Sie sich einen ganzen Bericht ansehen, gibt es hier viele Konstruktoren, die wir nicht verwenden, wenn wir unsere eigenen Skripte schreiben. Aber ich scrolle nach unten. OK, da ist PictureBox, noch etwas runterscrollen, da ist dieser Titel, noch etwas runterscrollen. Sie können den Mauszeiger bewegen, um die Achsenfelder anzuzeigen. Und schließlich sehe ich die FrameBox, und daher kann ich sehen, dass dies das ist, was ich in der Größe ändern möchte. Wenn Sie sich mit Plattformen vertraut machen, müssen Sie sich möglicherweise nicht mehr die Baumstruktur ansehen. Zeile I subskriptiere also das neue Fenster mit und sende die Nachricht „Frame Size“, die in Pixeln angegeben ist, und ich werde fortfahren und Zeile So ausführen, die die Größe des Graph Builder-Rahmenfelds geändert hat. Auch jetzt können Sie den Scripting-Index verwenden, um zu sehen, welche Arten von Nachrichten verschiedene Anzeigeboxen empfangen können. Wenn ich also zum Hilfemenü gehe und Scripting Index auswähle, könnte ich von All Categories zu Display Boxes wechseln und nach unten scrollen, um FrameBox zu finden und die Nachrichten zu sehen, die an diese gesendet werden können. Ich werde den Scripting-Index schließen. Das andere, was wir tun wollten, ist, auf der AxisBox eine Referenzlinie hinzuzufügen. Und wieder würde ich - wenn ich nicht mit dem vertraut wäre - wenn ich mit der Anzeigebaumstruktur für Graph Builder nicht vertraut wäre, würde ich mir dieses Baumstrukturfenster ansehen. in einigen Plattformen ist die vertikale Achse. Bei einigen Plattformen ist es die Horizontale. In diesem Fall ist es die horizontale Achse. Ich sende die Nachricht, um die Referenzzeile hinzuzufügen. Und die Argumente hier sind, welchen Wert soll die Referenzlinie haben? Ich möchte es in Welchem Linienstil? Ich will solide. Die Farbe? Ich werde schwarz. Das vierte Argument ist eine Beschriftung auf der Achse. Wenn wir also nur eine leere Zeichenfolge haben, sagen wir, dass wir kein Label wollen. Tatsächlich könnte ich das löschen, solange ich dieses Komma habe, um JMP mitzuteilen, dass dies das fünfte Argument und nicht das vierte Argument ist. Wenn ich dieses Komma nicht hätte, würde JMP die Achse mit a beschriften. Aber weil ich dort das Komma gesetzt habe, versteht JMP, dass dies die Linienbreite ist, nicht die Beschriftung. Also werde ich eine Linie laufen lassen Und das zeichnet meine Bezugslinie. Und dann ist der allerletzte Teil dieses Skripts, "Save Journal" an das in nw gespeicherte Anzeigefeld zu senden und es Custom CV Report.jrn zu nennen. Nun könnte Ihr Skript hier enden, indem es diesen Bericht mit dem Live-Graph Builder-Fenster und dem roten Dreiecksmenü erstellt, mit dem der Benutzer interagieren kann. Und tatsächlich wähle ich dieses Mal eine Dezimalstelle aus. In einigen Fällen möchten Sie diesen Bericht möglicherweise auch als Journal speichern. Und Sie verlieren das rote Dreiecksmenü, wenn Sie das tun. Und Ihr Graph Builder ist kein Live-Bericht mehr. Aber die letzte Option hier zeigt, wie Sie einen benutzerdefinierten Bericht als Journal mit der Meldung "Save Journal" speichern können. In diesem Skript haben wir also die Analyseebene gestartet. Wir haben das Berichtsebenenobjekt abgerufen und dann die Elemente dieser Berichtsebene erhalten, die wir entweder als Kopien oder als Matrizen für Manipulationen benötigten. Wir haben eine separate Datentabelle für die Plattform erstellt, die wir verwenden wollten, und dann den benutzerdefinierten Bericht mit „Neues Fenster“ erstellt, in diesem Fall mit Registerkarten und horizontalen Listenfeldern und Gliederungsfeldern als Anzeigefelder zusätzlich zur Zeichenfolgenspalte Box gespeichert in Levels und die verschiedenen Nummernspaltenboxen. Und dann haben wir gesehen, wie Nachrichten an Komponenten dieses benutzerdefinierten Berichts gesendet werden.