初心者向けのヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法こんにちは。私は初心者です。スクリプトの学習を始める前に、この問題に正しく取り組んでいるかどうか確認したいと思っています。ユーザーが選択した列 (通常は 30 個のデータ ポイント) に対して、以下の図のような簡単な分布レポートを簡単に作成し、赤い線で囲まれた項目を削除したいと考えています。

データ テーブルの例を次に示します。

以下は、スクリプトの保存/データ テーブルへの保存を使用したときにシステムが作成したスクリプトです。
分布(
連続分布(
列(:OD)、
横レイアウト(1)
ヒストグラム(0),
垂直(0)、
プロセス能力(
列プロパティ仕様を使用する、
工程能力分析(不適合( 0 ) )
)
)、
ヒストグラムのみ、
レポートに送信(
ディスパッチ( {"OD", "工程能力", "OD能力", "ヒストグラム"}, "1",
スケールボックス、
{最小( 2.1388234375 )、最大( 2.1636765625 )、増分( 0.005 )、
マイナーティック( 5 )}
)
)
);
これはスクリプトなしでは実行できないと思います。そうでない場合は、お知らせください。
私が計画しているのは、上記のスクリプトが列「OD」のみを使用するのに対し、ユーザーが使用する列を選択できるようにスクリプトを作成する方法を学習することです。うまくいけば、スクリプトを実行することで上記の基本的なレポートが作成されるでしょう。
次に、赤で取り消し線を引いたエントリを削除するスクリプトの変更を探し始めます。
このアプローチは単純すぎますか? もっと良いアプローチ方法はありますか?
ご意見をお待ちしております。
付与
品質およびプロセスエンジニアリングRe: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法能力テーブルの場合、次のようなフィルターを使用すればかなり簡単です。
Contains({"Cpk", "Cp"}, Index)
ただし、プロセス サマリーの下のテーブル ボックスには列名がないため、これは機能しません。そのため、たとえばプリセットを簡単に利用することはできません。
そこでスクリプトを活用しましょう。スクリプトを使用すると、テーブルボックスにヘッダーを追加してフィルタリングに使用できます。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
mycol = "NPN1";
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(
Use Column Property Specs,
Process Capability Analysis(Nonconformance(0))
)
)
);
// modify axis
Report(dist)[OutlineBox("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[OutlineBox("Within Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[OutlineBox("Overall Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[OutlineBox("Process Summary"), TableBox(1), StringColBox(1)] << Set Heading("Stat");
Report(dist)[OutlineBox("Process Summary"), TableBox(1), NumberColBox(1)] << Set Heading("Value");
Report(dist)[OutlineBox("Process Summary"), TableBox(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));

Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法Jarmo さん、時間を割いていただきありがとうございます。おかげで、私たちのテーブルに適用できる素晴らしい基礎ができました。あなたの助けに感謝します。
いろいろ試してみて、ターゲット列の名前が変わるので、ユーザー プロンプトを表示できるかどうかを調べ、それを基に構築してみます。少なくとも、現在の (限られた) 知識で、特定の部分シナリオのスクリプトをカスタマイズできます。ユーザーにとっては、それがさらに良いかもしれません。とにかく、ありがとうございました。
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法JSL を使い始めると、このようなシンプルな UI を作成するのはかなり簡単です ( Column Dialog() を使用するとさらに簡単になりますが、個人的には好きではありません)。この例にはより高度なテクニックが含まれていますが、おそらく必要なことは実行できます。仕様の制限をチェックするなど、追加したいサニティ チェックがいくつかありますが、このようなものが出発点として役立ちます。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
スクリプトガイドはJSLを始めるのに良い情報源です
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法Jarmo さん、ありがとうございます。スクリプト ガイドから始めました。忍耐力が足りないのかもしれませんが、引き続き取り組んでいます。:)
もう 1 つ変更点を示していただけますか? 非常に役立つと思います。スクリプトに追加して、Sigma Capabilities の下 (基本的には一番下) に移動平均チャートを追加していただけますか? 以下に、Semiconductor ファイルの NPN1 の例を示しました。スクリプトのコールアウトに何かが欠けているので、理解するのに役立つと思います。

きっとあなたはうんざりするだろう次の質問は、私が JMP をよく理解していないことを根本的に示しています。このようなスクリプトは、ユーザーが開いて実行するスクリプト ファイルとしての方が理にかなっていますか。それとも、このスクリプトをデータ テーブルに保存してそこから実行する方が理にかなっていますか。これは単なる好みですか、それとも何か利点がありますか。
Kudo 以外にあなたの助けに感謝する方法があれば、教えてください。あなたの助けで、私は多くの悩みから解放されました。
改めて感謝申し上げます。
付与
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法ワークフロー ビルダーを使用してこのようなものを構築できるので、何を行うかに応じて、それを利用するのは良いアイデアかもしれません (また、JMP を使用する良い練習にもなります)。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
vlb = V List Box(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
),
ccb = dt << Control Chart Builder(
Show Two Shewhart Charts(0),
Include Missing Categories(0),
Show Limit Summaries(0),
Show Capability(0),
Variables(Y(Eval(mycol))),
Chart(Points(Statistic("Moving Range")), Limits(Sigma("Moving Range"))),
Show Control Panel(0)
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
nw = new window("",
vlb
);
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
このようなものをどのように使用するかは完全にあなた次第ですが、私としては、このためのワークフローを用意するのがおそらく最も理にかなっていると思います (ただし、ワークフロー用の JSL がないと配布を修正するのは少し難しいかもしれません)。または、必要に応じてユーザーが自分のテーブルで実行できるアドインを作成します。アドインの目的としては、ユーザーが複数の列を選択できるようにするか、列スイッチャーを使用するようにするでしょう。また、追加のチェック (テーブルが開いているか、選択した列に仕様制限があるかなど) を実装するのも良いでしょう。
編集: コントロールチャートビルダーからのハードコードされた値を修正しました
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法Jarmo さん、ありがとうございます。これで、作業を開始するための素晴らしい基盤ができました。私はそのコードを修正してきましたが、本当に役立っています。新しいウィンドウ コードを見ると、私が見逃していた何かが本当に役立ちました。
ワークフロー ビルダーも試してみます。まだまったく見ていませんでした。結局のところ、今わかっていることからすると、アドインが私たちのグループにとって最適なようです。
改めて、皆さんのご協力に心から感謝し、感謝してもしきれません。
付与
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法新しいトピックを作成するのではなく、ここで質問するのが理にかなっていると思いました...
適切なプロセスを作成し、使用しているグループ用のアドインを作成しました。さらに詳しく調べて、不適合セクションから「合計範囲外」行と「予想全体 PPM」列のみを追加しようと考えています (以下のキャプチャで赤で下線が引かれています)。

ボックスは表示されますが、値が表示されません... 以下は、このスクリプトのセクション (行 50 ~ 52) とスクリーン キャプチャです。
Report(dist)[Outline Box("Nonconformance"), Table Box(1), String Col Box(1)] << Set Heading("Portion");
Report(dist)[Outline Box("Nonconformance"), Table Box(1), Number Col Box(1)] << Set Heading("Expected Overall PPM");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Expected Overall PPM));
スクリーン キャプチャでは、「Expected Within %」と「Expected Overall %」という列も追加されていますが、これは不要です。

基本的なことを見落としているのはわかっています... アイテムのプロパティを使用して違いを比較してみましたが、値に何も表示されません。また、スクリプト保存ツールを試して、手がかりが得られるかどうかを確認しましたが、Dispatch コマンドが使用され、これも機能しません...
また、「不適合」セクションを「プロセス概要」のすぐ下、「全体的なシグマ機能」の上に配置することは可能ですか? 私が調べた限りではそうは思えませんでしたが、そこにも何か見落としがあるかもしれません。

ありがとう、
付与
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法JMP を使用して最初に表示したい列を変更し、JMP が作成したスクリプトをチェックして、JMP が希望する操作を実行できるかどうかを確認します (この場合は実行できます)。その後、それを配布スクリプトに残すか、配布スクリプトの外部に移動することができます。

スクリプトでは次のようになります
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Observed %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Within %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall PPM")] << Visibility("Visible");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Portion == "Total Outside");
クローンボックスを使用して不適合を「コピー」することもできます
ncob = Report(dist)[Outline Box("Nonconformance")];
(Report(dist)["Process Capability","? Capability","Process Summary"] << parent) << Append(
ncob << clone box;
);
(ncob << parent) << Set(0);
</CODE><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_1-1729017828517.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><img src="https://us.v-cdn.net/6038925/uploads/images/69147iBECE0693438ABAB9/jthi_1-1729017828517.png" role="button" title="jthi_1-1729017828517.png" alt="jthi_1-1729017828517.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P>しかし、これらの JMP プラットフォームの機能が必要ない場合は、さまざまな部分からカスタム レポートを作成することを検討してください。この方法では、レポートの外観をより簡単に制御でき、ユーザーが誤って適切に動作しない可能性のある機能を使用しようとすることがなくなります。</P></LINGO-BODY><LINGO-SUB id="lingo-sub-805889" slang="en-US" mode="CREATE">Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法</LINGO-SUB><LINGO-BODY id="lingo-body-805889" slang="en-US" mode="CREATE"><P>ああ! あなたのメッセージを理解して、それをいじってみようと思います。Dispatch スクリプトで Visibility フラグを確認しましたが (あなたが持っていたものと同じように見えます)、あなたのようにそれらをメッシュ化する方法を理解していませんでした。</P><P> </P><P>使用しようと思ったきっかけ</P><PRE class="language-jsl"><CODE>Filter Where(Portion == "Total Outside");
他のいくつかのようにリストのコールアウトではありません。例:
Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat))
ありがとう、Jarmo!
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法私は
Filter Where(Portion == "Total Outside");
ただし、必要に応じて Contains を使用することもできます (スクリプトでは、問題は contains ではなく、比較を行うために Portion ではなく間違った列 Expected Overall PPM を使用していたことです)
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Portion));
テーブルの 1 行のみを表示したいため、equal 比較を使用しました。Contains は複数の項目に使用できますが、(この場合のように) 項目が 1 つしかない場合は不要です。
変更した理由は次の通りです:
「でも、それが機能するかどうかは重要ではないのか?」と思うかもしれません。基本的には重要ではありませんが、コードについて考え始めると(少なくとも私が考え始めると)、少し重要になります。私にとっては、そのテーブルに1 つ以上の項目が存在することは決してないだろうことは明らかです(または、複数の項目が存在する場合は、フィルタリングの考え方を変える必要があり、少し立ち止まることになります)。
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法Jarmoさん、素晴らしい説明をありがとう。
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法良いコミュニティ投稿のきっかけは良い質問です。
@GM-FPP に感謝します。
Re: 初心者向け、ヒストグラム、シグマ機能、プロセス概要のカスタマイズ方法@hogiさん、ありがとうございます。あなたのメッセージに感謝します。