データベーススクリプトからの新しいデータをレガシーデータテーブルに追加する方法こんにちは、みんな、
古い履歴情報 (レガシー データ) を含む静的 JMP データ テーブルがあります。
新しいデータを含む別の JMP データ テーブルがあります。 このテーブルは、JMP データベース クエリを通じてデータベースから供給されます。 これは、JMP を実行するたびにデータベースからテーブルを更新できる優れたスクリプトを JMP が自動的に提供することも意味します。
ここで、明らかに古いデータを失わずに、データベースから取得した新しいデータを古いテーブルに追加したいと考えています。 おそらくこれには JSL が必要ですが、私自身はそれを理解できません。
助けていただければ幸いです。
どうもありがとう
男
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法完璧!Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法はい! 期待どおりに動作するようになりました。 ありがとうハドリー!
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法こんにちは、
うまくいきそうな別の解決策があります。連結関数は最初のテーブル (dt1) への追加に戻りますが、今度はソース列を作成して、どの行が dt1 にあり、どの行が dt2 から追加されたかを追跡します。 「Onruncomplete」はテーブル dt2 の名前を取得し、「:Source table」列を検索し、「dt2」行を選択して削除します。次に、「:Source table」を削除します。試してみて、うまくいくかどうかをお知らせください。
query<<RUN></RUN>
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法ありがとうハドリー。
そのコマンド全体をスクリプトの最後に追加し、dt を dt1 に変更し (これは問題ではないと思いますが)、保存して実行しました。 スクリプトは引き続きエラーや警告メッセージなしで実行されますが、2 回目に実行すると重複が追加され続けます。
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法また会ったね、
もう少し考えてみると、dt2 を dt1 に追加した後、いつでも dt1 から重複行を削除するコマンドを追加できます。これで 2 番目の問題が解決される可能性があります。条件付きの重複行の選択と削除
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法こんにちは、
onruncomplete スクリプトに Close() 関数を追加すると、ユーザーはそれが起こったことに気づかないほど迅速に dt2 を開いたり閉じたりできるようになります。
query<<RUN></RUN>
concatenate 関数から「最初のテーブルに追加」ステートメントも削除したことに注目してください。これにより、別のテーブルが作成され、dt1 はそのまま残ります。それはあなたが提案した回避策と一致します(ちなみに、良いアイデアです!)。おそらく両方のテーブルの各行をチェックし、dt2 に固有の行のみを追加する簡単な方法があるでしょうが、私にはそれが思いつきません。もしかしたら他の人が提案を持っているかもしれません?
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法はい、これでうまくいき、追加されます。 まだ残っている 2 つの問題:
1) 小さな問題は、必要のない dt2 テーブルも別途ポップアップ表示されることです。
スクリプトを次のように変更してこれを回避しようとしましたが、結果は同じでした。
queryname << Run( onruncomplete( dt1 << Concatenate( dt2 = queryResult, Append to first table ) ) );
の代わりに
queryname << Run(
onruncomplete(
dt2 = queryResult;
dt1 << Concatenate( dt2, Append to first table );
)
);
2) さらに大きな問題は、スクリプトが 2 回目に実行されると、同じデータが dt1 の最後に再度追加されることです。 新しいデータのみをインポートする何らかのルールが必要です。 これがスクリプトの連結部分で実行できるかどうかはわかりません。
これに対する回避策がない場合は、プラン B として、追加されたテーブル (dt1 + dt2) を別のテーブルとして吐き出すようにスクリプトを変更してみることもできます。 こうすることで、dt1 を将来のデータ更新の基礎として常に使用できます。
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法また会ったね、
はい、解決策はあると思います。 以下のスクリプトからわかるように、「onruncomplete」メッセージの内部に Concatenate 関数を追加しました。これをテーブル スクリプトとして dt1 に保存すると、機能するはずです。ぜひ試してみて、教えてください。
dt1=Current Data Table();
query=New SQLQuery (...
);
query<<RUN></RUN>
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法こんにちは、ハドリーさん
近いと思います...
アドバイスどおりにすべて実行したと思いますが、dt1 を開いてそこからスクリプトを実行すると、次の JMP アラート メッセージが表示されます。
名前が解決されていません: 「dt2」のアクセスまたは評価における dt2、dt2/*###*/
そのすぐ後に、dt2 データテーブルがポップアップ表示されます。 ただし、dt1 には付加されません。
興味深いことに、この dt2 を閉じて dt1 からスクリプトを再度実行しようとすると、JMP アラート メッセージは表示されなくなりますが、[連結] ウィンドウがポップアップ表示され、その直後に dt2 が再び表示されます。 まだ dt2 は dt1 に追加されません。
よろしく
男
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法こんにちは、
これはおそらく次のように単純化できると思います。デスクトップに保存されたテーブルを dt1 と呼び、データベースから更新する新しいテーブルを dt2 と呼びます。テーブル dt1 に新しいテーブル スクリプトを作成して、dt2 のクエリを作成し、dt1 と dt2 を連結して、結果を dt1 に追加します。
dt1=Current data table();<BR /><BR />queryname=New SQL Query(...<BR />...);<BR /><BR /><SPAN>queryname<<RUN></RUN><BR />dt1<<CONCATENATE><BR /></CONCATENATE></SPAN>
最初の質問に答えるには、クエリを実行してソース スクリプトを右クリックし、結果をクリップボードに保存して、新しいスクリプト ウィンドウに貼り付けることで、dt2 から新しい SQL クエリ スクリプトを取得できます。その後、dt1 の新しいテーブル スクリプトにスクリプトを保存する前に、ウィンドウを使用してスクリプトを操作できます。
これは役に立ちますか?
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法こんにちは、ハドリーさん
まだすべての手順を理解していません。
1) クエリを実行し、ソース スクリプトを保存し、クエリに新しい名前を付けます。 queryname = New SQL Query(...)<
=> 「ソーススクリプトを保存」とは、テーブル内の既存のクエリを編集してそこに保存するだけでよいという意味ですか? それとも新しいスクリプトとしてテーブルに追加しますか? それとも、この新しいスクリプトを別の場所に保存しますか?
4) 「Concatenate」関数を使用して dt への参照を他のテーブルと一緒に使用します。
=> 申し訳ありませんが、これについてはさらに説明が必要です
ハドリーさん、よろしくお願いします!
男
Re: データベース スクリプトから新しいデータをレガシー データ テーブルに追加する方法こんにちは、ガイさん
SQL クエリ (New SQL Query(...)) を実行すると、次の方法でデータ テーブルへの参照を取得できます。
1) クエリを実行し、ソース スクリプトを保存し、クエリに新しい名前を付けます。 queryname = New SQL Query(...)<
2) クエリの後の <
3) その下にスクリプト行を追加します: queryname<
4) 「Concatenate」関数を使用して dt への参照を他のテーブルと一緒に使用します。
これを試してみて、うまくいくかどうかお知らせください。