JMP 18の新しいテーブル更新スクリプトはテーブルを上書きしますExcel テーブルを JMP 18 にインポートすると、「ソース」スクリプトと「テーブルの更新」スクリプトの 2 つのスクリプトが生成されますが、唯一の違いは「テーブルの更新 (1)」コマンドのようです。
2 番目のスクリプトは Excel ファイルから更新を実行し、インポート後に作成された列を上書きします。更新時に新しい列をそのままにする方法はありますか? スクリプト インデックスでは何も見つかりませんでした。
自動化とスクリプトコンテンツの編成ウィンドウズRe: JMP 18 の新しいテーブル更新スクリプトがテーブルを上書きするこんにちは@Ake 、現時点での更新のアイデアは、既存のデータを入力ファイルの新しいデータに置き換えることです。
あなたが説明したように、これは非常に破壊的です。
その背後にある考え方は次のようになります。
追加列の既存の値が新しくインポートされたデータと一致するかどうかは保証できないため、削除したほうがよいでしょう。うーん、数式を含む列については、そのような列を削除する理由は見当たりません。
更新スクリプトよりもはるかに優れています:
dt = Current Data Table();
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
手動で追加された値は削除されますが、数式列は保持されます:)
欠点: ソース スクリプトに依存しますが、これも非常に脆弱です: 更新と連結: ソース スクリプトの衝突。
あるいは、 Join、Concat、Updateを参照することもできます。
Re: JMP 18 の新しいテーブル更新スクリプトがテーブルを上書きするありがとうございます。ソース スクリプトをスクリプトにコピーするだけで、脆弱性が軽減されます。
私は、必要な行数を追加してから更新するという、より複雑な方法を使用してきました。あなたのスクリプトはより簡潔です。
// Compare and add number of rows if needed
nrows1 = N Rows( dt1 );
nrows2 = N Rows( dt2 );
If( nrows2 < nrows1,
dt2 << Add Rows( nrows1 - nrows2 )
);
// Update dt2
Data Table( dt2 ) << Update( With( Data Table( dt1 ) ) );
Close( dt1 );
dt2 << save();
Re: JMP 18 の新しいテーブル更新スクリプトがテーブルを上書きするこのスクリプトの危険性: 連結によって継承される:
ユーザーA: Excelファイルをインポートする
ユーザーB: 2つのファイルを連結する
ユーザー C: データが欠落していることに気づき、「テーブルの更新」を試みる
「テーブル更新」スクリプトを無効にしますか?
こちらに投票してください: 「テーブル更新」スクリプトの作成を無効にするオプション
Re: JMP 18 の新しいテーブル更新スクリプトがテーブルを上書きするこんにちは。この修正は非常に気に入っています。ただ、一つ疑問があります。このスクリプトでテーブルを更新すると、汎用のテーブル更新スクリプトが自動的に追加され、数式列が壊れてしまうことがあります。JMPテーブルに追加される新しい「テーブル更新」スクリプトの自動生成を無効にする方法はありますか?
Re: JMP 18 の新しいテーブル更新スクリプトがテーブルを上書きするこれを回避するには、スクリプト内の「Update Table」スクリプトを削除または上書きします。カスタム「Update Table」スクリプトの名前が「Update Table」の場合、以下の手順で回避できます。
dt = Current Data Table();
update_script = dt << Get Script( "Update Table" );
dt << Delete Scripts( {"Update Table"} );
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
Eval(
Substitute(
Expr(
dt << Set Property( "Update Table", __update_script__ )
),
Expr( __update_script__ ), Name Expr( update_script )
)
);
または、スクリプトに別の名前 (「Update」) を付けて、更新後に「Update Table」を削除する行を含めることもできます。
dt = Current Data Table();
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
dt << Delete Scripts( {"Update Table"} );