こんにちは、
何十万行ものデータテーブルがあります。実行 ID 列、デバイス名の列 (現在関心のある 29 個)、および関連付けられた値の列があります。したがって、実行ごとにデータを記録する複数のデバイスがあり、実行 ID を x 軸として各デバイスの実行グラフを作成したいと考えています。ただし、個別に部分的に解決できても、一緒に解決できない問題が 2 つあります。
まず、JMP 13 を使用しています。JMP 16 にアクセスできますが、現在インストールされていません。JMP の別のバージョンに変更して壊したくない既存のスクリプトがたくさんあり、何をしようとしているのかしたほうがいい簡単にできます。
第二に、私が取ろうとしている一般的なアプローチは次のとおりです。
- 一意のデバイス名のリストをループし、ラン チャートを生成します。各デバイスのデータから決定された個々のラン チャート管理および仕様限界にフィードします (管理および仕様限界を管理チャートに十分に簡単にフィードできます)。
- すべてのチャートを新しいウィンドウに集約
グラフ作成用のスクリプトは次のとおりです。
curDev = devices[i]<BR />dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :DeviceName == curDev ),
Chart Col( Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ), // lims list found separately
SendToReport(
Dispatch(
{"Levey Jennings of Value"},
curDev,
TextEditBox,
{Set Text( curDev )} // Ensures y-axis title is device name rather than column name of "Value"
)
)
);これにより複数のグラフ ウィンドウが作成され、それぞれの上部に "Where Device == curDev" というボックスが表示されます。
したがって、不必要で醜いボックスを使用しても、グラフをプロットできますが、29 個のグラフ ウィンドウが開いてしまいます。
したがって、それらをすべてウィンドウに集約し、上部の「Where Device ==」ボックスを削除する必要があります。
フォーラムには、役立つと思われる次の返信があります。グラフビルダーのレポートウィンドウから「場所」を削除する方法 - JMP User Community .実際、29 個の個別のグラフを生成すると、上部のボックスが削除されます。したがって、次のようになります。
Build_Chart = Function({var},
cco = dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
for(i=1, i<=NItems(devices), i++,
curDev = devices[i]; //probably unnecessary
Build_Chart(curDev);
)ただし、リンクされたフォーラムの投稿で説明されているのと同じことをしようとすると、ウィンドウに 1 つのグラフが表示され、スクリプトでエラーが発生します。 "Send は、'Send' のアクセスまたは評価で Scriptable Object{75240} を期待しています。tp[Text Box( 1 )] << delete/*###*/"
Build_Chart = Function({var},
// same function as above
)
pb = Panel Box();
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
pb <<APPEND></APPEND>チャートをパネル ボックスに追加すると、Build_Chart 関数の tp << delete がうまくいかないのはなぜですか?
私が試した別のアプローチは、レポート オブジェクトを取得する次のようなものです。
nw = New Window("Charts",
lub = Lineup Box(NCol(2));
);
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
cco = dtRecLog << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Device == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
rep = cco << Report;
lub << Append(rep);
);これにより、「Where ==」ボックスのない 29 個のグラフを含む別のウィンドウが作成されますが、また29 の個別のグラフ ウィンドウを生成します。cco << Delete Window は機能しません。cco はウィンドウへの参照ではないためです。私できるdo a Window() << Delete Window を実行しますが、ウィンドウ名がわからず、明らかな推測が機能しないため、JSL でウィンドウを削除できません。
だから、私が助けを必要としているのは次のことです:
- チャート ウィンドウの上に [Where :Device == curDev] ボックスを表示せずに、すべてのグラフを表示するウィンドウを作成します。
- すべてのチャートを単一のウィンドウに集約
- 29 の異なるウィンドウを生成しません。
ご協力いただきありがとうございます。
管理図の非表示オプションを使用してソリューションに移行し、レポートを独立した仕訳ウィンドウに追加できると思います。以下は、これを行うためのアプローチを示すコードの変更です。サンプル データ テーブルがないため、スクリプトをテストすることはできませんでしたが、うまくいくことがわかっている私のアプローチを見ていただけると思います。
Build_Chart = Function({var},
cco = dt << Control Chart(invisible,
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
NW = New Window("Results",<<JOURNAL></JOURNAL>