*レポートから特定の情報を引き出すのは難しい場合があります。 私たちの多くは、自分の世界をナビゲートする方法を学びました。 JMP必要な値にアクセスするために添え字メソッドを使用してレポートします。 ツリー構造ウィンドウは、レポートを構成するすべての表示ボックスを表示するために私たちの友人でした (そして今でもそうです)。
正しい番号であることを確認するために、表示ボックス名の横にある括弧内に示されている数字を使用し始めたかもしれません。 そして、異なる設定または異なるバージョンの JMP を使用していた同僚があなたのスクリプトを実行しましたが、あなたと同じ結果は得られませんでした。
Report( ow )[Number Col Box( 8 )][1];
不可解でしたが、すぐに相対参照を使用したより堅牢なアプローチを学びました。 つまり、必要な情報が含まれるアウトライン ボックスのタイトルを使用して添え字を付けて、レポート内を移動しました。
Report( ow )[Outline Box( "Summary of Fit" )][Number Col Box( 1 )][1];
待ってください。JMP レポートを横断する別の方法があります。きっと気に入っていただけると思います。
以下はからの抜粋ですJMP Scripting、第 2 版にジャンプここでは、JMP レポートの XML 表現に XPath クエリ言語を適用する方法について説明します。
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!待ってください。JMP レポートを横断する別の方法があります。私たちの多くは XML ドキュメントに精通しています。 そうでない人のために説明すると、XML は Extensible Markup Language の略です。 これは、機械が読み取って理解できるドキュメントの一連のルールを確立するマークアップ言語です。 XPath は、XML ドキュメント内を移動できるようにするクエリ言語です。
XML は HTML によく似ていますが、目的は異なります。 HTML の目的はコンテンツを表示することですが、XML の目的はデータの保存とコンテンツの伝達にあります。
XML ドキュメントの主要なコンポーネントのいくつかについて説明します。
- タグ– タグは、XML を HTML に似たものにするものです。 タグは通常、不等記号 (<) で始まり、大なり記号 (>) で終わります。 タグ名は < と > 記号の間に指定され、事前定義された値ではありません。 代わりに、ドキュメントの作成者がタグ名を確立する必要があります。 HTML と同様、終了タグを表すにはタグをスラッシュで閉じる必要があります (たとえば、 content )。
- 要素– 要素は、タグ ステートメント全体で構成されます。 要素は開始タグの < から始まり、終了タグの > まで続きます。 要素には他の要素も含めることができます。
- 属性– 属性は、要素に関するメタデータまたは追加の詳細です。 属性は開始タグで指定され、二重引用符で囲まれた値を 1 つだけ持つことができます。 タグには複数の属性を含めることができますが、各タイプの属性は 1 つだけです。
- コンテンツ– コンテンツはデータです。 要素を構成するのは、開始タグと終了タグの間にあるテキスト、数字、その他の文字です。
次の XML ファイルの例を考えてみましょう。 のオープンテーブルelement は、他のすべての要素が含まれるルート要素です。 table 要素には、という属性があります。現在、値は 0 または 1 です。 各テーブル要素内には、次の 3 つの追加要素があります。名前、列数、 と行数。 データはタグの間に表示されます。
Big Class
5
40
Fitness
9
31
XML ドキュメントの構造を理解したので、その知識を XML ドキュメントとしての JMP レポートの構造に適用できます。 JMP レポートの XML 表現を表示するには、 XMLの取得レポート層へのメッセージ。 XML がログに表示されます (表示 > ログ)。

例を見てみましょう。 分布レポートに表示されるアウトライン ボックスの数をプログラムで判断したいとします。
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dist = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :height ),
Horizontal Layout( 1 ),
Vertical( 0 )
)
);
JSL を使用して表示ボックスをステップ実行してそのタイプをチェックすることもできますが、これはかなり面倒な作業になります。 代わりに、XML 表現を見てみましょう。
Write( Report( dist ) << Get XML );
ログに表示される結果は、約 180 行の長さの文字列です。 圧倒されないでください! ログの先頭までスクロールして、最初のタグだけを確認します。
タグの名前はアウトラインボックスそして、それには 4 つの属性があります。幅、身長、ヘルプキー、 と開いています。 次に来るのはすべて要素の内容であり、これはアウトライン ボックスやその他の要素のタイトルです。 他の要素を見ると、要素名はツリー構造の表示ボックス名と同じですが、XML 形式であることに注意してください。
図 7.5 XML 要素とツリー構造の比較
<アウトラインボックス属性>タイトル <リストボックス属性> <ドロップボックス属性> <スペーサーボックス属性> ドロップボックス> <アウトラインボックス属性>タイトル 等… |
 |
検索している要素のタグ名がわかったので、XPath を使用してアウトライン ボックスの数を確認する方法を見てみましょう。

JMP では、 XPath()メッセージはプラットフォーム オブジェクトまたはレポート オブジェクトのいずれかに送信されます。 その引数は、レポートの XML 表現から情報を取得するために使用される XPath 式です。 使用する必要はありませんXMLの取得を使用する前に、 XPath()メッセージ。 ただし、構造と利用可能な属性を確認すると役立つ場合があります。
以下は、レポート内でアウトライン ボックスを検索し、各アウトライン ボックスへの参照のリストを返します。
obList = Report( dist ) << XPath( "//OutlineBox" );
Show( obList );
/*: obList = {DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[アウトラインボックス]}; |
単純に使用できますNItems()機能オンobListリストに格納されているアウトライン ボックス参照の数を取得します。 または、XPath 言語についてさらに学習するにつれて、 XPath カウント()各アウトライン ボックスへの参照の代わりにカウントを返す関数。
obCount = N Items( Report( dist ) << XPath( "//OutlineBox" ) );
//OR
obCount = Report( dist ) << XPath( "count(//OutlineBox)" );
次に、さらに興味深い例を見てみましょう。 Oneway レポートの平均値と標準偏差の表に平均値と標準偏差の列のみを表示したいとします。
図 7.6 平均値と標準偏差を含む一方向性
 |
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 )
);
|
次を使用して、平均値と標準偏差テーブルの下の数値列ボックス参照のみのリストを返すことができます。
サブスクリプションと XPath の組み合わせ:
/* Return a list of NumberColBox references */
ncbList = Report( ow )["Means and Std Deviations"] << XPath( "//NumberColBox" );
JSLの使用ために()ループで、列の見出しを確認し、可視性プロパティを次のように変更できます。
見出しが Mean または 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" )
);
);
しかし、繰り返しになりますが、XPath には、ために()ループ。 見て
レポートからの Number Col Box の XML 表現の抜粋:
番号
内に要素があることに注意してください。番号列ボックスと呼ばれる要素NumberColBoxHeader 。 これ
要素にはレポートの列見出しが含まれます。 XPath を使用すると、そのテキストをキャプチャして実行できるようになります。
比較。 Mean 以外の見出しを持つ Number Col Boxes のみを参照します。
または Std Dev がリストで返されます。
colsToHide = Report( ow )["Means and Std Deviations"] << XPath(
"//NumberColBox[NumberColBoxHeader[not(text() = 'Mean')
and not(text() = 'Std Dev')]]"
);
この XPath クエリは次のものを調べますNumberColBoxHeader内に現れる要素番号列ボックスエレメント。 Text 関数は、 NumberColBoxHeaderエレメント。 この例では、テキストが基準を満たしている場合、つまりテキストが平均値でも標準偏差でもない場合、参照がリストで返されます。
を送信する可視性()そのリストにメッセージを送信すると、リスト内のすべての項目に設定が適用されます。
colsToHide << Visibility( "Collapse" );
図7.7 列が非表示になった後の一方向

Rosemary Lucas 様、これらの例が JMP レポートの操作に役立つことを願っています。 プログラムによるレポートの操作の詳細については、次を参照してください。 JMP Scripting、第 2 版にジャンプ。

*注: クリップアートのソース:空白の道路標識のクリップアート
どのようなタイプのアウトラインボックスについて話しているのでしょうか? OutlineBox()を使用してアウトライン ボックスを作成できます。たとえば、<< Set Menu Script を使用して赤い三角形のオプションを設定できます。
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)}
);
表示ボックスを正確に複製したいだけの場合は、クローン ボックスを使用して、すべての子ボックスを削除します。このようなことを行うと、潜在的に多くの問題が発生する可能性がありますが、
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;