スクリプターズ クラブ レコーディング: ヒントとコツビデオ 1 @thickey1 : データテーブルの管理。
- 列名を変更します。
- 列名を参照する代替方法。
- テーブルにスクリプトを追加/埋め込みます。ユーザーはいつでもスクリプトを実行できます。
(ファイル: ヒントとコツ、プローブ)
ビデオ 2 @Georg : スクリプトの作成方法と JMP スクリプト エディタの使用方法に関する一般的なヒント
- コード折りたたみ
- 式の処理
- 数式における JSL
- eval (eval expr(expr(最初に評価される)を含むコード))
- 変数の型のテスト
- 連想配列
(ファイル: 20241120_Scripters_Club_tipps_and_tricks-inspec)
ビデオ 3 @Mauro_Gerber : 複数のインポートを開いて現在のスクリプトのパスを取得する
(ファイル: SC-2024_ini および SC-2024_multi-import)
ビデオ 4 @Daniel_Valente : JMP マーケットプレイスの概要
詳細はこちら
Ndoubled を10 に設定する勇気がありませんでした : )
私の夢:高速でダイナミックで使いやすい:folded_hands:が仕様(価値)です
「コードをローストする」というアイデアに沿って、速度を向上させるアイデアはありますか?
そして、このアプローチを、JSL の経験が少ない他のユーザーが利用できるようにするにはどうすればよいでしょうか?


Re: Scripters Club レコーディング: ヒントとコツこちらのほうが高速ですが、仕様が調整されても更新は行われません。
現時点では、
それぞれ (... dt[0,colname] = ...)
または新しい列(値の設定())
Names Default To Here( 1 );
Ndoubled = 10;
dynamic = 1;
Try( Close( cdt, NoSave ) );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
Wait( 0 );
bigger = Expr(
cdt = cdt << concatenate( cdt, append to first table( 1 ) )
);
For( I = 1, i <= Ndoubled, i++, bigger );
col_lst = cdt << get column group( "Processes" );
Wait( 0 );
cdt << New Table Variable( "trigger update", 1 ); // can this be used to force an update?
cdt << begin data update();
t0 = HP Time();
If( dynamic,
col_lst = cdt << get column group( "Processes" );
For Each( {col}, col_lst,
col_Name = col << get name() || "_inSpecDynamic";
colnew = New Column( col_Name, Nominal );
col_Name = colnew << get name();
Eval(
Substitute(
Expr(
Column( col_Name ) << set Formula(
Local(
{t0 = As Constant(
dt = Current Data Table();
limits = _col_ << get property( "Spec Limits" );
nr = nrows(dt);
usl = limits["USL"];
lsl = limits["LSL"];
myRows = Where( _col_ > lsl & _col_ < usl );
NmyRows = N Items( myRows );
dt[0, _col_Name_] = J( nr, 1, 0 );
If( NmyRows,
dt[myRows, _col_Name_] = J( NmyRows, 1, 1 )
);
1
)},
Stop();
)
)
),
Expr( _col_ ), Name Expr( col ), Expr(_col_name_), col_name
)
);
cdt << move selected columns( {Column( col_name )}, after( col ) );
);
);
cdt << run formulas() << end data update();
Show( (HP Time() - t0) / 1000000 );
Wait( 0 );
Caption( "Process screening - don't dare ..." );
Stop();
// TEST THE RESULT
// check result in table visually
ps = cdt << Process Screening( Process Variables( Eval( col_lst ) ), Spec Limits Dialog( "No (skip columns with no spec limits)" ) );
ps << Color Out Of Spec Values( 1 );
ps << Close Window;
cdt << Clear Select << Clear Column Selection;
Re: Scripters Club レコーディング: ヒントとコツ@hogiさん、コードと追加の実装を調べていただきありがとうございます。プレゼンテーションでは、速度などにはあまり注目せず、さまざまな方法とアプローチを示すことに重点を置いていました。実際には、最適な実装は境界条件によって異なるため、ケース固有であると思います。
プログラムの流れを見ると、数式アプローチを使用して各行の仕様限界を引き出すのは理想的ではないかもしれませんが、場合によっては役立つかもしれません。ただし、JMP は実行時に不要な計算を回避してプログラムを内部的に改善する場合があります。これらすべての詳細を知ることは不可能ですが、だからこそさまざまなアプローチを試す必要があるのです。
一般的に、速度が重要になる場合は、プロセス スクリーニングでの色などのプラットフォーム オプションを使用します。これは、それらが大規模なデータに最適化されていると想定しているためです。
おそらく、ロースト シリーズ中にもう一度検討できるでしょう。また、in_spec は非常に優れた組み込み関数になると思います。すべての詳細を考慮すると実装が難しくなるだけかもしれませんが、開発者が良い方法を見つけてくれることを願っています。
Re: Scripters Club レコーディング: ヒントとコツ公式プラットフォームとパフォーマンスを比較するには、 stop() を削除するかコメントアウトしてください。
Re: Scripters Club レコーディング: ヒントとコツスペック制限で覚えておくべきことの1つは、片側だけのスペックだ。これはさまざまな面白い問題を引き起こす可能性がある。
Re: Scripters Club レコーディング: ヒントとコツはい、そうです。
簡単にするために、両面仕様を使用しても問題ないと思います。
片側の仕様 (または仕様のない列) を考慮するのは非常に簡単ですが、忘れてはなりません。
計算を高速化し、動的にするためのコツはありますか?
Re: Scripters Club レコーディング: ヒントとコツおそらく、解決しようとしている問題に大きく依存するでしょう (したがって、解決策はユースケースに大きく依存します)。
Re: Scripters Club レコーディング: ヒントとコツ使用事例:
仕様外/仕様内の値に対して 0/1 値を生成する数式を含む新しい列。
仕様にタイプミスがあったり、ユーザーが仕様を調整したい場合、列の値は自動的に更新される必要があります (古い設定のままにはなりません)。
おそらく10〜30列程度です。
100k - 10Mio 行。
JMP を使用して合格/不合格情報を分析したい新しい同僚と簡単に共有できるソリューションです。
Re: Scripters Club レコーディング: ヒントとコツ少し話題から外れるかもしれませんが:
いくつかの仕様が欠けています(?) (私は自分自身をプロのXY 問題解決者だと考えていますが、あなたがそうなりたいとは思わないと思います):
- 入力: データテーブルのみ
- 仕様制限が設定されているすべての列を使用しますか?
- ただし、これらが誤って設定されている可能性があることに注意してください(私の意見では、はるかに大きな問題です)
- どの程度間違っているのでしょうか? 両方に欠損値がある可能性はありますか? 連続測定であっても、両方に同じ値があるのでしょうか? それとも単に「バグのある」値なのでしょうか (以前は、JMP で「評価されていない」値を仕様限界として持つことができ、それでも正しい数値として表示されていました。JMP18 でもこれが当てはまるかどうかはわかりません)。
- 別のケースとしては、ユーザーがこれらを調整したい場合があります (これは、0/1 の単一列とは異なるユースケースであると考えます)
- ユースケースは何ですか?ユーザーがテーブルから30列と1000万セルを視覚的に分析することはまずないでしょう。
- 結果はどのように使用されていますか? 計算はそこに実装できますか? -> この種の作業用のカスタム プラットフォームはありますか?
この場合に「問題を解決する」としたら、まず間違った仕様限界を解決することから始めます。あるいは、むしろ仕様限界が変更される状況を解決することから始めます。あなたが本当に見ようとしているのは何ですか? 1,000 万行のデータがある場合に、仕様限界に基づいて 0/1 の列があるかどうかは、本当に疑問です。
あなた (または私) は、そのような列を作成する機能を作成できます (どのくらい速くできるかはわかりません) が、それが本当に問題の解決策でしょうか? すべての列の現在の仕様制限に基づいて 0/1 列を作成したいだけであれば、動的 (即時更新) である必要はないと思います。ユーザーはメニューのボタンを 1 つ押すだけで結果を更新できます (特定の列名またはテーブル変数を使用するアドインを考えています)。目的が仕様の調整である場合、10 行あるときに 0 が 1 に変わるのを見る価値はありません (私の意見では) (他に何もなく、速度だけを気にする場合は、そのユースケース専用の特別なプラットフォームを作成してください)。
それとも、これをどうやって速くするかという単なる理論的な質問でしょうか?
Re: Scripters Club レコーディング: ヒントとコツこんにちは、Jarmoさん。コメントありがとうございます。
おっしゃる通り、「ここをクリックして更新する」という 1 つの操作だけで、すべての問題が解消されます。
しかし、正直に言うと、私は「グラフ ビルダー - 設定するだけで、JMP が詳細を処理します」というアプローチが気に入っています。
コミュニティを介して詳細を議論したり実装したりする必要はありません (片側仕様でも機能するように式を拡張する方法は明らかです)。ここでは、概念を示す短いコードの方が好みです。
それに加えて、高速でダイナミック、そしてユーザーフレンドリーな:folded_hands: が仕様(価値)内にあるかどうかは、何か役に立つことに使われるかどうか疑問に思う必要はありません。
したがって、 :folded_hands:が仕様(値)内になるまでは、手動で設定するより良い解決策があれば、私は非常に嬉しく、すぐにそれを使用します。これは理論的な質問ではありません。:)