JMP スクリプトにおける繰り返しの結合/更新のベストプラクティスこんにちは、みんな、
I’m running a JSL script that performs Update/Join operations between calculation tables and filtered data tables. I noticed the following behavior:
-
スクリプトが複数回実行されると、JMPは名前の衝突を避けるために重複した列の名前を自動的に変更します。例:
<SPAN><SPAN class="hljs-title class_">バッチ</SPAN><SPAN class="hljs-title class_">番号</SPAN>- 表1の<SPAN class="hljs-title class_">バッチ</SPAN><SPAN class="hljs-title class_">番号</SPAN><SPAN class="hljs-number">、</SPAN>表<SPAN class="hljs-number">2</SPAN><SPAN class="hljs-keyword">の</SPAN><SPAN class="hljs-title class_">バッチ</SPAN><SPAN class="hljs-title class_">番号</SPAN></SPAN>
-
パネルからテーブルを閉じても、変数 (列オブジェクト) はメモリ内にまだ存在するため、スクリプトを再実行すると重複する列がさらに作成されます。
-
現在の回避策は、列の重複を防ぐために、スクリプトを実行する前にJMP を終了して再起動することです。
コミュニティへの質問:
-
Are there best practices for repeated Update or Join operations that avoid generating duplicate columns?
-
スクリプト実行後にテーブル/変数を「クリーンアップ」して、後続の実行で重複が作成されないようにするための推奨方法はありますか?
-
余分なコピーを生成せずに、安全に列の名前を変更したり上書きしたりするための関数または JSL パターンはありますか?
ご提案や戦略があれば、ぜひお聞かせください。
動的に処理するためにこのコードも試しましたが、うまくいきませんでした
RenameColumn = Function({dt, oldNamePattern, newName},
colList = dt << Get Column Names; // returns a column list object
n = N Items(colList); // number of columns
For(i = 1, i <= n, i++,
c = colList[i]; // get the column name as string
If(Contains(c, oldNamePattern),
Column(dt, c) << Set Name(newName);
Break(); // optional: stop after first match
);
);
);
自動化とスクリプトRe: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティスこれらの列に対してどのような処理をご希望ですか?既に存在する場合は、更新/再追加しないでください。コミュニティが参照できるデータを含むサンプルスクリプトを提供していただけますか?
Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティス説明されている問題の詳細を知りたいです。
特に、変数 (列オブジェクト) はまだメモリ内に存在するため、スクリプトを再実行すると重複する列がさらに作成されます。
このほか、以下の点にご注意ください。
テーブル/更新の場合、このような問題は JMP19 の新機能によって発生します。
更新対象のテーブルに既に列が存在する場合、更新プラットフォームが新しい列を作成できるようにします。
追加機能は素晴らしいですが、人々は副次的な効果を考慮していませんでした。
副次的影響:
JMP19 では、次のモードで機能を使用することはできなくなりました:
「ターゲット テーブルにまだ存在しない列を追加してください」。
詳細: 表/更新が変更されました!
スクリプトの動作は異なり、ユーザーは次のようなテーブルを取得します。
(追加の列は役に立たず、テーブルを汚してしまいます)

開発者が問題を理解し、次のリリースで修正してくれることを願っています。
可能な解決策:2つのモード
自動テーブル/更新
- 新しいアプローチを使用して、ユーザーが列を選択した場合に(!!!!)、列(接尾辞付き)を追加します。

- モード「すべて」ではこのトリックを使用しないでください。

-> 再度許可します
「ターゲットテーブルにまだ存在しない列を追加する」
(JMP の以前のバージョンと同様)。
... 代替案: 新しいモードを有効/無効にする追加設定。
下位互換性を保証するには、デフォルトで設定を無効にします。
Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティス重複データを取得しないようにするには、結合の「出力列」機能を使用する必要があるようです。同じ名前の列を取得しない限り、「出力列」を使用しても列名に「... of table 2」というサフィックスは生成されません。
更新では、追加する列を選択して、重複する列名を取得しないようにします。
Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティスコード:
// Filtering Table A using RequiredBatches
FilteredA = TableA << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Matches(0,0),
Output Table("FilteredA"),
Invisible(0)
);
// Filtering Table B using RequiredBatches
FilteredB = TableB << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Nonmatches(0,0),
Output Table("FilteredB"),
Prevent Name Collision(1),
Invisible(0)
);
// Rename joined key columns
Column(FilteredA, "Batch Number of TableA") << Set Name("Batch Number");
Column(FilteredB, "Batch Number of TableB") << Set Name("Batch Number");
JMP を再起動せずにこのスクリプトをもう一度実行すると、次のようになります。
- JMP はテーブル名に自動的に接尾辞を追加します。
FilteredA → FilteredA 2
FilteredB → FilteredB 2
また、スクリプトの先頭ですべてのテーブルに使用してみましたが、Mac では問題なく機能しているようですが、Windows では機能していないか、動作に非常に混乱していると思います。
Try(TableA << Close(No Save));
JMPのホームウィンドウリストから「これ以外すべて閉じる」を使ってスクリプト(テーブルが表示されている部分)を閉じた後でも、テーブルは閉じられますが、変数はまだメモリ内に残っている可能性があります。どう対処したらいいのかわかりません。
これは役立つでしょうか、それともコードの再利用を伴わない他の方法でしょうか

Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティスどこですか
Prevent Name Collision(1)
どこから来たの?
JMP Join プラットフォームでインタラクティブに結合を実行し、プレビューで希望どおりになっていることを確認して実行し、拡張ログからスクリプトをコピーします。
Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティス「 2番目のテーブルのデータでメインテーブルを更新する」をアクティブ化してみましたか?

[新しい列はありません - 一致する行を更新します]
または「同じ名前の列に一致」ですか?

[最初のものと似ていますが、新しい列が追加されています。]
Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティスyes, but this would be impractical for large list of columns</CODE></P>
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-914649" slang="en-US" mode="CREATE" translate="no">Re: JMP スクリプトにおける繰り返しの結合/更新のベストプラクティス</LINGO-SUB>
<LINGO-BODY id="lingo-body-914649" slang="en-US" mode="CREATE">
<BLOCKQUOTE>
<HR />
<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/63230" target="_blank">@zetaVagabond1</A> wrote:
<BR />
<P>yes, but this would be impractical for large list of columns<CODE class=" language-jsl">
これは…への返信ですか?