スクリプト内の「更新」関数の回避策JMP コミュニティの皆さん、こんにちは。
別のデータテーブルに依存するデータテーブルがあります。 アップデート機能でアップデートしてみましたが、何も起こらないようです。 代わりに、このスクリプトは現在のテーブルを更新するのではなく、選択したサブセットを含む新しいデータ テーブル ウィンドウを開きます。 現在開いているデータテーブル「dt」を「dtU」のサブセットで更新するにはどうすればよいですか? ありがとう!
// Open Sample Data
dt = Open("KrF CDU Data table.jmp");
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains("KrF", :Type));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
// Updating with subset
dt << Update(With(dt1),By Matching Columns(name==name),);Re: スクリプト内の「update」機能の回避策Match では、これを一意にするためにできるだけ多くの列を指定する必要があります。 したがって、複数の列による照合が必要な場合があります。たとえば、:実験名 == :実験名、:スタック==:スタック、:ウェーハ コード==:ウェーハ コード、:計測レシピ ==:計測。
これらは単なる提案です。
各行を一意にする列を選択し、それに応じて一致させる必要があります。
Re: スクリプト内の「update」機能の回避策それで、あなたが言ったことを実行し、テーブルを手動で更新しました。これは関連するコードです
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
そこで、これをコードに直接適用しました
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
ただし、すべての行を更新するのではなく、以下に示すように、最初の行を更新し、その行をすべての行にコピーするだけです。 すべての行に対してループする必要がありますか?
Re: スクリプト内の「update」機能の回避策このコード行では、「name」は列名を指します。 すべての列名が表示されていませんが、両方に「name」という列が確実にありますか?
gdt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Update</SPAN><SPAN class="token punctuation">(</SPAN> With<SPAN class="token punctuation">(</SPAN> dt1 <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Match Columns<SPAN class="token punctuation">(</SPAN> dt<SPAN class="token punctuation">:</SPAN>name <SPAN class="token operator">==</SPAN> dt1<SPAN class="token punctuation">:</SPAN>name <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//This is still not runnin</SPAN>
「テーブル」->「更新」メニューからこの操作を手動で実行してみてください。必要な出力が得られたら、左上のソース スクリプトを確認し (ソースを右クリックし、クリックしてスクリプトを表示します)、そのコードを検査して、必要なものを JSL に正確に取り込むのに役立ちます。
Re: スクリプト内の「update」機能の回避策そこで、一致する列のすべてのデータ型を確認しましたが、それらは同じであり、同じ順序、同じデータ型でした。 どの列にも関数はありません。 データセットを画像と現在のコードとして添付しました。 私は完全に道に迷っているので、助けていただければ幸いです。 皆さん、ありがとうございました!
//Clean up
Clear Log(); Clear Globals(); //Close All(DataTables,"No Save");
// Open Sample Data
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains(:Type,"KrF"));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
// Opening other data table and updating
dt = Open("KrF CDU Data table 1.jmp");
dt << Update( With( dt1 ), Match Columns( dt:name == dt1:name ) ); //This is still not running
dt << Save( "KrF CDU Data table 1.jmp" );
Re: スクリプト内の「update」機能の回避策テーブルが見えないので、これは試すべきことの単なる推測です
- 列名が両方に存在すること、両方とも同じデータ型 (おそらく文字) とモデリング型 (おそらく公称) であることを確認してください。
- :name==:name または dt:name == dt1:name を使用してください
- dt 内のいずれかの列に関数があるかどうか、特に更新される列に関数があるかどうかを確認してください。 アップデートする前に機能を削除する必要があると思います。
それはちょっとしたトラブルシューティングのアイデアです。
Re: スクリプト内の「update」機能の回避策あなたがここでやろうとしていることを私が正しく解釈しているかどうかはわかりませんが、いくつかのサンプルデータとともに私の解釈を示します。stop() コマンドの後に name という列を追加する必要があります。これは私にとってはうまくいきました。
追記:何か誤解をしていたようです。 ... つまり、サマリーなどの依存関係にあるためにロックされているテーブルを更新しようとしているということですが、JMP は新しいテーブルを強制する可能性があります。 そのことはよくわからない。
Clear Log();
Clear Globals();
//Close All( DataTables, "No Save" );
dt = Open( "$SAMPLE_DATA/Students.jmp" );
dtU = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( :age == 12 );
Column( dtU, "age" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
stop();
// run up to here, create an extra column called name in the dt (students.jmp) with some names from dtU (big class), then run next line
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
Re: スクリプト内の「update」機能の回避策変更を試みましたが、KrF データ テーブル (dt) は更新されず、新しいサブセットが開かれるだけで、テーブル dt は更新されません。 両方を odbc サーバーに接続する必要がありますか? 両方のテーブルがまだ開いているため、JMP は間違いなく両方のテーブルを認識します。Re: スクリプト内の「update」機能の回避策変えてみる
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
に
dt << Update( With( dt1 ), Match Columns( name== name ) );
スクリプトのコメントアウトされた行に基づくと、前回の参加試行では前の形式が使用されており、更新に変更すると機能しませんでした。 構文が異なります
Re: スクリプト内の「update」機能の回避策おっと、その行は次のように書くつもりでした
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
ただし、dt (「KrF CDU Data table.jmp」) はまだ更新されません。 KrF データ テーブルを露出テーブル (dtU) のデータで更新しようとしています。
ログは次のようになります。
Name Unresolved: name in access or evaluation of 'name' , name/*###*/
In the following script, error marked by /*###*/
Clear Log();
Clear Globals();
Close All( DataTables, "No Save" );
dt = Open( "KrF CDU Data table.jmp" );
dtU = Open( "Exposure_Summary_Data.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( Contains( :Type, "KrF" ) );
Column( dtU, "F23" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
dt << Update( With( dt1 ), By Matching Columns( name/*###*/ == name ) );
ということは、更新行に何らかのエラーがあるのでしょうか? よくわかりませんが、ログにはそのように報告されています
Re: スクリプト内の「update」機能の回避策JSL の一部が間違っているか奇妙に見えます。
dtU << Select Where(contains("KrF", :Type)); そうあるべきだ
dtU << Select Where(contains( :Type, "KrF:));
また、この 2 行目は奇妙に見えます。 Selected Columns(1,:Wafer Code) と
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
どのテーブルが依存しているかについては言及していません。 デフォルトでは、サブセット テーブルは依存しません。
ログ ファイルは何を報告しますか?