*Estrarre informazioni specifiche dai rapporti può essere difficile. Per molti di noi, abbiamo imparato a navigare nel nostro JMP report utilizzando un metodo di sottoscrizione per accedere ai valori desiderati. La finestra Tree Structure è stata nostra amica (e lo è tuttora) per mostrarci tutte le caselle di visualizzazione che compongono il report.
Potresti aver iniziato utilizzando i numeri mostrati tra parentesi accanto ai nomi della casella di visualizzazione per assicurarti di avere quello giusto. E poi il tuo collega, che aveva preferenze diverse o una versione diversa di JMP, ha eseguito il tuo script ma non ha ottenuto i tuoi stessi risultati.
Report( ow )[Number Col Box( 8 )][1];
Era sconcertante, ma presto hai imparato un approccio più robusto usando il riferimento relativo. In altre parole, hai esplorato il report sottoscrivendo il titolo dell'OutlineBox che conteneva le informazioni desiderate.
Report( ow )[Outline Box( "Summary of Fit" )][Number Col Box( 1 )][1];
Aspetta, c'è un altro modo per esaminare i report JMP e penso che ti piacerà!
Quello che segue è un estratto da Entra in JMP Scripting, seconda edizione che illustra come applicare il linguaggio di query XPath alla rappresentazione XML dei report JMP.
XPat
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!Aspetta, c'è un altro modo per esaminare i report JMP! Molti di noi hanno familiarità con i documenti XML. Per coloro che non lo sono, XML sta per Extensible Markup Language. È un linguaggio di markup che stabilisce una serie di regole per documenti leggibili e compresi dalle macchine. XPath è un linguaggio di query che ti consente di navigare nei tuoi documenti XML.
Sebbene l'XML assomigli un po' all'HTML, i loro scopi sono diversi. Lo scopo dell'HTML è visualizzare il contenuto, mentre lo scopo dell'XML riguarda più l'archiviazione dei dati e la trasmissione del contenuto.
Discutiamo alcuni dei componenti principali di un documento XML:
- Tag – I tag sono ciò che rende XML un po' simile all'HTML. I tag generalmente iniziano con un segno di apertura minore di (<) e terminano con un segno di chiusura maggiore di (>). Il nome del tag è specificato tra i segni < e > e non è un valore predefinito. Invece, l'autore del documento deve stabilire i nomi dei tag. Come in HTML, i tag devono essere chiusi con una barra per rappresentare un tag finale (ad esempio, content ).
- Elementi – Un elemento è costituito da un'intera istruzione tag, se vuoi. Un elemento inizia con il < del tag di apertura fino a includere il > del tag di chiusura. Gli elementi possono contenere anche altri elementi.
- Attributi – Gli attributi sono metadati o dettagli aggiuntivi su un elemento. Un attributo è specificato nel tag di apertura e può avere un solo valore, specificato tra virgolette doppie. Un tag può avere più attributi, ma solo uno per tipo.
- Contenuto – Il contenuto sono i dati. Sono il testo, i numeri e altri caratteri tra i tag di apertura e chiusura che compongono un elemento.
Si consideri il seguente file XML di esempio. IL openTables element è l'elemento radice in cui compaiono tutti gli altri elementi. L'elemento table ha un attributo chiamato attuale , che ha valore 0 o 1. All'interno di ogni elemento della tabella sono presenti tre elementi aggiuntivi: nome , numCol , E numRows . I dati vengono visualizzati tra i tag.
Big Class
5
40
Fitness
9
31
Ora che abbiamo compreso la struttura di un documento XML, possiamo applicare tale conoscenza alla struttura di un report JMP come documento XML. Per visualizzare la rappresentazione XML di un report JMP, inviare il file Ottieni XML messaggio al livello di report. L'XML verrà visualizzato nel registro ( Visualizza > Registro ).

Diamo un'occhiata a un esempio. Si supponga di voler determinare in modo programmatico quante caselle di struttura sono visualizzate in un report di distribuzione.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dist = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :height ),
Horizontal Layout( 1 ),
Vertical( 0 )
)
);
Potresti usare JSL per scorrere le caselle di visualizzazione e controllarne il tipo, ma sarebbe un compito piuttosto noioso. Invece, diamo un'occhiata alla rappresentazione XML.
Write( Report( dist ) << Get XML );
Il risultato mostrato nel registro è una stringa lunga quasi 180 righe. Non lasciarti sopraffare! Scorri fino all'inizio del registro e guarda solo il primo tag:
Il tag è denominato OutlineBox e ha quattro attributi: larghezza , altezza , helpKey , E è aperto . Tutto ciò che viene dopo è il contenuto dell'elemento, che è il titolo della Outline Box e di altri elementi. Osservando gli altri elementi, si noti che i nomi degli elementi sono gli stessi dei nomi delle caselle di visualizzazione nella struttura ad albero, ma in formato XML.
Figura 7.5 Elementi XML confrontati con la struttura ad albero
< OutlineBox attributi> Titolo < Casella di riepilogo attributi> < DropBox attributi> < SpacerBox attributi> DropBox > < OutlineBox attributi> Titolo eccetera… |
 |
Ora che conosciamo il nome del tag dell'elemento che stiamo cercando, esploriamo come possiamo usare XPath per scoprire quanti Outline Box ci sono.

In JMP, il XPath() il messaggio viene inviato all'oggetto piattaforma o all'oggetto report. Il suo argomento è un'espressione XPath utilizzata per recuperare informazioni dalla rappresentazione XML del report. Non devi usare Ottieni XML prima di poter utilizzare il XPath() Messaggio. Ma potresti trovare utile rivedere la struttura e gli attributi disponibili.
Quanto segue cercherà nel rapporto eventuali Riquadri di contorno e restituirà un elenco di riferimenti a ciascun Riquadro di contorno.
obList = Report( dist ) << XPath( "//OutlineBox" );
Show( obList );
/*: obList = {DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[OutlineBox]}; |
Potremmo semplicemente usare il NItems() funzione attiva obList per ottenere il numero di Outline Box le referenze vengono memorizzate nell'elenco. Oppure, man mano che impari di più sul linguaggio XPath, puoi utilizzare il file Conteggio XPath() funzione per restituire il conteggio invece di un riferimento a ciascuna casella di struttura.
obCount = N Items( Report( dist ) << XPath( "//OutlineBox" ) );
//OR
obCount = Report( dist ) << XPath( "count(//OutlineBox)" );
Ora diamo un'occhiata a un esempio più interessante. Si supponga di voler visualizzare solo le colonne Media e Dev. Std in una tabella Medie e Deviazioni Std di un report Oneway.
Figura 7.6 Unidirezionale con medie e deviazioni standard
 |
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 )
);
|
Possiamo restituire un elenco dei soli riferimenti di Number Col Box nella tabella Means and Std Deviations utilizzando
una combinazione di sottoscrizione e XPath:
/* Return a list of NumberColBox references */
ncbList = Report( ow )["Means and Std Deviations"] << XPath( "//NumberColBox" );
Utilizzando un JSL Per() loop, possiamo controllare l'intestazione della colonna e modificare la proprietà di visibilità in
compresso se l'intestazione è diversa da Mean o Std Dev.
/* 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" )
);
);
Ma ancora una volta, c'è un modo in XPath per ottenere lo stesso risultato senza la necessità del file Per() ciclo continuo. Aspetto
in un estratto della rappresentazione XML di un Number Col Box dal report:
Numero
Si noti che c'è un elemento all'interno di NumberColBox elemento chiamato NumberColBoxHeader . Questo
L'elemento contiene l'intestazione della colonna del report. XPath ci consente di acquisire quel testo ed eseguirlo
confronti. Solo riferimenti a caselle di colonne numeriche che hanno un'intestazione diversa da media
o Std Dev vengono restituiti in un elenco.
colsToHide = Report( ow )["Means and Std Deviations"] << XPath(
"//NumberColBox[NumberColBoxHeader[not(text() = 'Mean')
and not(text() = 'Std Dev')]]"
);
Questa query XPath esamina NumberColBoxHeader elementi che appaiono all'interno di a NumberColBox elemento. La funzione Text estrae il testo dal file NumberColBoxHeader elemento. In questo esempio, se il testo soddisfa i criteri, vale a dire che il testo non è medio e non è Std Dev, il riferimento viene restituito in un elenco.
Invio del Visibilità() messaggio a quell'elenco applica l'impostazione a ogni elemento nell'elenco.
colsToHide << Visibility( "Collapse" );
Figura 7.7 A senso unico dopo che le colonne sono state nascoste

Rosemary Lucas e spero che abbiate trovato questi esempi utili per navigare nei report JMP. Per ulteriori informazioni sull'esplorazione dei rapporti in modo programmatico, dai un'occhiata Entra in JMP Scripting, seconda edizione .

*Nota: Fonte ClipArt: Vuoto segnaletica stradale clipart
Di che tipo di riquadro di contorno stai parlando? Puoi creare riquadri di contorno utilizzando OutlineBox() e, ad esempio, puoi impostare le opzioni del triangolo rosso utilizzando << Imposta script menu.
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)}
);
Se vuoi semplicemente replicare quella esatta casella di visualizzazione, puoi utilizzare Clone Box e quindi rimuovere tutte le caselle secondarie. Tuttavia, fare qualcosa del genere potrebbe potenzialmente causare molti problemi
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;