次のシナリオ: 海外にいる同僚のためにスクリプトを作成しました。データベースからデータを読み込み、そのデータをテーブルに整理し、管理図用のテーブル スクリプトをテーブルに配置するスクリプトです。テーブルにはいくつかの異なる製品/プロセスが含まれており、この 1 つのテーブル スクリプトはそのうちの 1 つ (つまり、すべての行のごく一部) のみを対象としています。メイン スクリプトとテーブル スクリプトを自分のコンピューターで実行すると、問題なく動作します。海外にいる同僚がそれらを実行すると (電話中に彼の画面でこれを確認しました)、データベースからテーブルは正常に取得され、テーブル スクリプトは実行されますが、管理図で表すはずの行選択に関しては完全に失敗します。数百、場合によっては数千の無関係な行が、または間違ったサブセットから使用されています。
テーブル スクリプトでは、「Names Default To Here (1);」を使用していません。同僚は異なるバージョンの JMP (17.0 と 17.2) をインストールしていますが、これは問題にならないと思っていました。最初の応答として、 環境設定マネージャ (インポート/エクスポート付き)を使用してエクスポートした環境設定のコピーを送信しましたが、解決には役立ちませんでした。
その後、彼は私にテーブルのコピーを送ってくれたので、その中のテーブル スクリプトを調べたところ、自分のコンピューターでスクリプトを上から実行したときのテーブル スクリプトの見た目にわずかな違いがあることに気付きました。
私のコンピューターで:

同僚のコンピューターで:

しかし、彼が生成して電子メールで私に送ってくれたテーブルのコピー内のテーブル スクリプト (つまり、下のバージョン) を私のコンピューターで実行すると、テーブル スクリプトは意図したとおりに実行されました。残念ながら、ここで何が起こっているのかまったくわかりません。
この問題の根本には何があるのか、どうすればこれを修正して今後この問題を回避できるのか、ベストプラクティスはありますか? ありがとうございます!
JMP のメンテナンス バージョン間には間違いなく違いがあり、さまざまな違いや問題が発生する可能性があります。
同僚がスクリプトをテーブル スクリプトから分離し、スクリプトの先頭に Names Default To Here(1) を追加して、別のスクリプト ウィンドウから実行した場合、スクリプトは正常に動作しますか?
- ローカルデータ形式の違いにより、クエリが混乱する可能性があります。(これはローカルのオペレーティング システムによって決定される可能性があります)
- バージョン 14 以降ではバージョンの違いによって問題が発生することはほとんどありません。
- より高速な新しいコンピュータとデータベース接続があり、大学のコンピュータが非常に遅く、データベースへのネットワーク接続が悪い場合は、問題が発生する可能性があります。(wait(); または dt< を追加する必要があるかもしれません。

色不明のオブジェクトメッセージによって発生します:

一般的に、この設定は非常に便利です - ただし、一部の「既知の」ものも色付けされることを受け入れる場合です。
「不明」メッセージの欠点:スクリプトインデックスを

@jthi 、海外の同僚にあなたが提案した診断手順に従うように依頼したときも、問題はまったく同じでした。
@Byron_JMP 、ビデオ会議中に見たように、最初のスクリプトは私の場所とほぼ同じ速度で実行されます。また、会社のラップトップはすべて比較的同様の仕様であると推測しています。混乱しているのは、同僚が最初のスクリプトまたは「メイン」スクリプトから取得した最初のテーブルをメールで送信し、その中のテーブル スクリプトを実行すると、期待どおりに動作するということです。したがって、回線速度は問題ではない可能性があります
@hogi私はこの設定を有効にしていないので、私の場合 (JMP インストールからコンピューター上のスクリーンショットを撮りました)、スクリプト エディター自体は、"<<" と "message" の間に改行がある場合のみ、変数のようにメッセージを色分けしているように見えますが、"<<" と "message" の間に改行があってもなくても、色分けとはまったく関係なく、同じように実行されます。
しかし、問題を少し絞り込めたと思います。テーブル スクリプトで実行したい内容、JMP インストールでの動作、同僚のマシンでの動作を以下にコピーしました。
// what i want the table script to do
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Table_2 = Data Table( "table_1" ) << Subset(
Filtered Rows(
Contains( :Category_1, "some_category" ) & Contains( :Category_2, "some_other_category" )
)
);
Table_3 = Table_2 << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
// what the table script looks like on my computer
// it does exactly the same as the above version, despite the line break before 'Subset'
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Table_2 = Data Table( "table_1" ) <<
Subset(
Filtered Rows(
Contains( :Category_1, "some_category" ) & Contains( :Category_2, "some_other_category" )
)
);
Table_3 = Table_2 << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
// what it appears to be doing on my colleagues computer
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Data Table( "table_1" ) << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
おそらく解決策は、テーブル スクリプトを次のように変更することでしょうか?
// a solution to be tested?
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Wait(); // this would be the new part per Byron's suggestion
Table_2 = Data Table( "table_1" ) << Subset(
Filtered Rows(
Contains( :Category_1, "some_category" ) & Contains( :Category_2, "some_other_category" )
)
);
Table_3 = Table_2 << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
どう思いますか? これまでのご協力、また追加のコメントもありがとうございました。問題が何であるかがわかったら、必ずここに投稿します。
Wait() はデフォルトで 3 秒になるため、Wait() の代わりに Wait(0); を追加することをお勧めします。

フィルターされた行を変更して、次の行を取得することもできます(少なくともデバッグが容易になる可能性があります)。
rows_of_interest = Data Table("table_1") << Get Rows Where(Contains(:Category_1, "some_category") & Contains(:Category_2, "some_other_category"));
Table_2 = Data Table("table_1") << Subset(
Rows(rows_of_interest)
);@jthi さん、本当にありがとうございます! 'wait(0)' だけを追加しても機能しませんでした。'rows_of_interest' アプローチを使用すると成功しました。まだ奇妙に感じます。
@Byron_JMP 、 @hogi - ご参考までに、ご提案いただきありがとうございます。