*Das Extrahieren spezifischer Informationen aus Ihren Berichten kann eine Herausforderung sein. Für viele von uns haben wir gelernt, uns zurechtzufinden JMP Berichte mithilfe einer Abonnementmethode, um auf die gewünschten Werte zuzugreifen. Das Fenster „Baumstruktur“ war unser Freund (und ist es immer noch), um uns alle Anzeigefelder anzuzeigen, aus denen der Bericht besteht.
Möglicherweise haben Sie zunächst die in Klammern neben den Namen der Anzeigefelder angezeigten Zahlen verwendet, um sicherzustellen, dass Sie das richtige hatten. Und dann hat Ihr Kollege, der andere Präferenzen oder eine andere JMP-Version hatte, Ihr Skript ausgeführt, aber nicht die gleichen Ergebnisse erzielt wie Sie.
Report( ow )[Number Col Box( 8 )][1];
Es war rätselhaft, aber bald lernten Sie einen robusteren Ansatz mit relativer Referenzierung. Das heißt, Sie haben durch den Bericht navigiert, indem Sie den Titel der OutlineBox verwendet haben, die die gewünschten Informationen enthielt.
Report( ow )[Outline Box( "Summary of Fit" )][Number Col Box( 1 )][1];
Warten Sie, es gibt noch eine andere Möglichkeit, JMP-Berichte zu durchlaufen – und ich denke, sie wird Ihnen gefallen!
Das Folgende ist ein Auszug aus Tauchen Sie ein in JMP Scripting, Zweite Ausgabe Darin wird erläutert, wie Sie die XPath-Abfragesprache auf die XML-Darstellung Ihrer JMP-Berichte anwenden können.
XPath
Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Warten Sie, es gibt eine andere Möglichkeit, JMP-Berichte zu durchlaufen! Viele von uns sind mit XML-Dokumenten vertraut. Für diejenigen, die es nicht sind: XML steht für Extensible Markup Language. Dabei handelt es sich um eine Auszeichnungssprache, die eine Reihe von Regeln für Dokumente festlegt, die von Maschinen gelesen und verstanden werden können. XPath ist eine Abfragesprache, die Ihnen die Navigation in Ihren XML-Dokumenten ermöglicht.
Obwohl XML HTML sehr ähnlich sieht, sind ihre Zwecke unterschiedlich. Der Zweck von HTML besteht darin, Inhalte anzuzeigen, während der Zweck von XML eher in der Datenspeicherung und der Übermittlung von Inhalten liegt.
Lassen Sie uns einige der Hauptkomponenten eines XML-Dokuments besprechen:
- Stichworte – Tags sorgen dafür, dass XML ein bisschen wie HTML aussieht. Tags beginnen im Allgemeinen mit einem öffnenden Kleiner-als-Zeichen (<) und enden mit einem schließenden Größer-als-Zeichen (>). Der Tag-Name wird zwischen den Zeichen < und > angegeben und ist kein vordefinierter Wert. Stattdessen muss der Autor des Dokuments die Tag-Namen festlegen. Wie in HTML müssen Tags mit einem Schrägstrich abgeschlossen werden, um ein End-Tag darzustellen (z. B. content ).
- Elemente – Ein Element besteht sozusagen aus einer ganzen Tag-Anweisung. Ein Element beginnt mit dem < des öffnenden Tags bis einschließlich des > des schließenden Tags. Elemente können auch andere Elemente enthalten.
- Attribute – Attribute sind Metadaten oder zusätzliche Details zu einem Element. Ein Attribut wird im öffnenden Tag angegeben und kann nur einen Wert haben, der in doppelten Anführungszeichen angegeben wird. Ein Tag kann mehrere Attribute haben, jedoch nur eines von jedem Typ.
- Inhalt – Inhalt sind die Daten. Es sind der Text, die Zahlen und andere Zeichen zwischen den öffnenden und schließenden Tags, die ein Element bilden.
Betrachten Sie die folgende Beispiel-XML-Datei. Der openTables Element ist das Stammelement, in dem alle anderen Elemente erscheinen. Das Tabellenelement verfügt über ein Attribut namens aktuell , der einen Wert von 0 oder 1 hat. In jedem Tabellenelement befinden sich drei zusätzliche Elemente: Name , numCols , Und numRows . Die Daten werden zwischen den Tags angezeigt.
Big Class
5
40
Fitness
9
31
Nachdem wir nun die Struktur eines XML-Dokuments verstanden haben, können wir dieses Wissen auf die Struktur eines JMP-Berichts als XML-Dokument anwenden. Um die XML-Darstellung eines JMP-Berichts anzuzeigen, senden Sie die Holen Sie sich XML Nachricht an die Berichtsschicht. Das XML wird im Protokoll angezeigt ( Ansicht > Protokoll ).

Schauen wir uns ein Beispiel an. Angenommen, Sie möchten programmgesteuert ermitteln, wie viele Gliederungsfelder in einem Verteilungsbericht angezeigt werden.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dist = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :height ),
Horizontal Layout( 1 ),
Vertical( 0 )
)
);
Sie könnten JSL verwenden, um durch die Anzeigefelder zu blättern und ihren Typ zu überprüfen, aber das wäre eine ziemlich mühsame Aufgabe. Schauen wir uns stattdessen die XML-Darstellung an.
Write( Report( dist ) << Get XML );
Das im Protokoll angezeigte Ergebnis ist eine Zeichenfolge mit einer Länge von fast 180 Zeilen. Seien Sie nicht überfordert! Scrollen Sie zum Anfang des Protokolls und sehen Sie sich nur das erste Tag an:
Das Tag ist benannt OutlineBox und es hat vier Attribute: Breite , Höhe , helpKey , Und ist offen . Alles, was als nächstes kommt, ist der Inhalt des Elements, also der Titel der Outline Box und anderer Elemente. Beachten Sie beim Betrachten der anderen Elemente, dass die Elementnamen mit den Anzeigefeldnamen in der Baumstruktur identisch sind, jedoch im XML-Format vorliegen.
Abbildung 7.5 XML-Elemente im Vergleich zur Baumstruktur
< OutlineBox Attribute> Titel < ListBox Attribute> < DropBox Attribute> < SpacerBox Attribute> DropBox > < OutlineBox Attribute> Titel usw… |
 |
Nachdem wir nun den Tag-Namen des gesuchten Elements kennen, wollen wir untersuchen, wie wir XPath verwenden können, um herauszufinden, wie viele Outline Boxes es gibt.

In JMP ist die XPath() Die Nachricht wird entweder an das Plattformobjekt oder das Berichtsobjekt gesendet. Sein Argument ist ein XPath-Ausdruck, der zum Abrufen von Informationen aus der XML-Darstellung des Berichts verwendet wird. Sie müssen es nicht verwenden Holen Sie sich XML bevor Sie das verwenden können XPath() Nachricht. Es kann jedoch hilfreich sein, die Struktur und die verfügbaren Attribute zu überprüfen.
Im Folgenden wird der Bericht nach Gliederungsboxen durchsucht und eine Liste mit Verweisen auf jede Gliederungsbox zurückgegeben.
obList = Report( dist ) << XPath( "//OutlineBox" );
Show( obList );
/*: obList = {DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[OutlineBox]}; |
Wir könnten einfach das nutzen NItems() Funktion eingeschaltet obList um die Anzahl der in der Liste gespeicherten Outline-Box-Referenzen zu ermitteln. Wenn Sie mehr über die XPath-Sprache erfahren, können Sie die verwenden XPath Count() Funktion, um die Anzahl anstelle eines Verweises auf jede Gliederungsbox zurückzugeben.
obCount = N Items( Report( dist ) << XPath( "//OutlineBox" ) );
//OR
obCount = Report( dist ) << XPath( "count(//OutlineBox)" );
Schauen wir uns nun ein interessanteres Beispiel an. Angenommen, wir wollten nur die Spalten „Mittelwert“ und „Standardabweichung“ in der Tabelle „Mittelwerte und Standardabweichungen“ eines Oneway-Berichts anzeigen.
Abbildung 7.6 Einweg mit Mittelwerten und Standardabweichungen
 |
dt = Open( <BR /> "$SAMPLE_DATA\Big Class.jmp" <BR />);
ow = dt << Oneway(
Y( :height ),
X( :age ),
Means and Std Dev( 1 ),
Mean Error Bars( 1 ),
Std Dev Lines( 1 ),
Mean of Means( 1 )
);
|
Mit können wir eine Liste nur der Number Col Box-Referenzen unter der Tabelle „Mittelwerte und Standardabweichungen“ zurückgeben
eine Kombination aus Subskription und XPath:
/* Return a list of NumberColBox references */
ncbList = Report( ow )["Means and Std Deviations"] << XPath( "//NumberColBox" );
Verwendung einer JSL Für() Schleife können wir die Überschrift der Spalte überprüfen und die Sichtbarkeitseigenschaft in ändern
wird ausgeblendet, wenn die Überschrift etwas anderes als „Mittelwert“ oder „Standardabweichung“ lautet.
/* Loop through each item to show only the Mean, Std Dev columns */
For( i = 1, i <= N Items( ncbList ), i++,
rptColName = ncbList[i] << Get Heading;
If( !Contains( {"Mean", "Std Dev"}, rptColName ),
ncbList[i] << Visibility( "Collapse" )
);
);
Aber auch hier gibt es in XPath eine Möglichkeit, das gleiche Ergebnis zu erzielen, ohne dass dies erforderlich ist Für() Schleife. Suchen
an einem Auszug der XML-Darstellung einer Number Col Box aus dem Bericht:
Nummer
Beachten Sie, dass es ein Element innerhalb gibt NumberColBox Element aufgerufen NumberColBoxHeader . Das
Das Element enthält die Spaltenüberschrift des Berichts. Mit XPath können wir diesen Text erfassen und ausführen
Vergleiche. Nur Verweise auf Nummernspaltenfelder, deren Überschrift etwas anderes als „Mittelwert“ ist
oder Std Dev werden in einer Liste zurückgegeben.
colsToHide = Report( ow )["Means and Std Deviations"] << XPath(
"//NumberColBox[NumberColBoxHeader[not(text() = 'Mean')
and not(text() = 'Std Dev')]]"
);
Diese XPath-Abfrage betrachtet NumberColBoxHeader Elemente, die innerhalb eines erscheinen NumberColBox Element. Die Textfunktion extrahiert den Text aus dem NumberColBoxHeader Element. Wenn in diesem Beispiel der Text die Kriterien erfüllt, das heißt, dass der Text nicht „mean“ und „Std Dev“ ist, wird die Referenz in einer Liste zurückgegeben.
Senden der Sichtweite() Wenn Sie eine Nachricht an diese Liste senden, wird die Einstellung auf jedes Element in der Liste angewendet.
colsToHide << Visibility( "Collapse" );
Abbildung 7.7 Einweg nach dem Ausblenden von Spalten

Rosemary Lucas und ich hoffen, dass Ihnen diese Beispiele beim Navigieren in Ihren JMP-Berichten hilfreich waren. Weitere Informationen zum programmgesteuerten Navigieren in Ihren Berichten finden Sie unter Tauchen Sie ein in JMP Scripting, Zweite Ausgabe .

*Hinweis: ClipArt-Quelle: Leere Verkehrsschilder Clipart
Von welcher Art von Gliederungsrahmen sprechen Sie? Sie können mit OutlineBox() Umrissrahmen erstellen und beispielsweise mit << Set Menu Script Optionen für rote Dreiecke festlegen.
Names Default To Here(1);
New Window("Example",
fontobj = ob = Outline Box("Outline Box",
V List Box(
ob2 = Outline Box("Outline Box 2",
H List Box(
Text Edit Box("Top Left"),
Text Edit Box("Top Right")
)
),
ob3 = Outline Box("Outline Box 3",
H List Box(
Text Edit Box("Bottom Left"),
Text Edit Box("Bottom Right")
)
)
)
)
);
ob << Set Menu Script(
{"Beep", Beep(), "Beep Twice", Beep() ; Wait(1.0) ; Beep() ; ,
"", 0, "Get Menu Script", Print(ob << Get Menu Script)}
);
Wenn Sie nur genau dieses Anzeigefeld replizieren möchten, können Sie „Box klonen“ verwenden und dann alle untergeordneten Boxen entfernen. Eine solche Vorgehensweise könnte jedoch möglicherweise viele Probleme verursachen
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dist = dt << Distribution(Nominal Distribution(Column(:sex)), Histograms Only);
obs = dist << XPath("//OutlineBox[@helpKey = 'Distrib']");
ob = obs[1];
obc = ob << Clone Box;
While(!IsEmpty(curchild = obc << child),
curchild << delete box;
);
obc << get xml;