Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCiao a tutti,
Ho una tabella dati JMP statica che contiene informazioni precedenti e storiche (dati legacy).
Ho un'altra tabella dati JMP che contiene nuovi dati. Questa tabella viene alimentata da un database tramite una query del database JMP. Ciò significa anche che JMP mi fornisce automaticamente un simpatico script che consente di aggiornare la tabella dal database ogni volta che la eseguo.
Ora voglio che alla vecchia tabella vengano aggiunti i nuovi dati estratti dal database, ovviamente senza perdere i vecchi dati. Probabilmente è necessario JSL per questo, ma non riesco a capirlo da solo.
Qualsiasi aiuto sarà apprezzato volentieri,
Grazie molto
Tipo
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databasePerfetto!Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseSÌ! Funziona come previsto ora! Grazie Hadley!
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCIAO,
Ho un'altra soluzione che penso potrebbe funzionare.La funzione concatenata torna ad accodare alla prima tabella (dt1), ma ora crea una colonna di origine per tenere traccia di quali righe erano in dt1 e quali sono state accodate da dt2. "Onruncomplete" ora ottiene il nome della tabella dt2 e quindi cerca la colonna ":Source table", selezionando ed eliminando le righe "dt2".Quindi elimina ":Tabella di origine".Per favore, provalo e fammi sapere se funziona.
query<<RUN></RUN>
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseGrazie Hadley.
Ho appena aggiunto l'intero comando alla fine del mio script, ho cambiato dt in dt1 (anche se non dovrebbe nemmeno avere importanza, credo), l'ho salvato e eseguito. Lo script continua a funzionare senza errori o messaggi di avviso, ma quando lo eseguo una seconda volta i duplicati continuano ad essere aggiunti.
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCiao di nuovo,
Pensandoci un po' di più, potresti sempre aggiungere un comando per rimuovere le righe duplicate da dt1 dopo aver aggiunto dt2 a dt1.Ciò potrebbe risolvere il secondo problema che hai riscontrato.Selezione e rimozione della riga duplicata con condizione
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCIAO,
L'aggiunta di una funzione Close() allo script onruncomplete farà aprire e chiudere dt2 così rapidamente che l'utente non saprà che è successo:
query<<RUN></RUN>
Si noti che ho rimosso anche l'istruzione "Aggiungi alla prima tabella" dalla funzione concatenata.Ciò creerà una tabella separata e lascerà intatto dt1.Ciò coinciderebbe con la soluzione alternativa suggerita (buona idea, comunque!).Probabilmente esiste un modo semplice per controllare ogni riga di entrambe le tabelle e aggiungere solo righe univoche per dt2, ma non riesco a pensarci.Forse qualcun altro ha un suggerimento?
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseSì, questo funziona, viene aggiunto. Restano ancora due problemi:
1) Un problema minore è che anche la tabella dt2 viene visualizzata separatamente, il che non è necessario.
Ho provato ad evitarlo modificando lo script come segue, ma il risultato è lo stesso:
queryname << Run( onruncomplete( dt1 << Concatenate( dt2 = queryResult, Append to first table ) ) );
invece di
queryname << Run(
onruncomplete(
dt2 = queryResult;
dt1 << Concatenate( dt2, Append to first table );
)
);
2) Un problema più grande è che quando lo script viene eseguito una seconda volta, gli stessi dati vengono nuovamente aggiunti alla fine di dt1. Ho bisogno di una sorta di regola che importi solo i nuovi dati. Non sono sicuro che ciò possa essere fatto nella parte Concatena dello script.
Se non esiste una soluzione alternativa a questo, come piano B potremmo anche provare a modificare lo script in modo tale da generare la tabella aggiunta (dt1 + dt2) come tabella separata. In questo modo il dt1 può sempre essere utilizzato come base per futuri aggiornamenti dei dati.
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCiao di nuovo,
OK, penso di avere una soluzione. Come puoi vedere dallo script seguente, ho aggiunto la funzione Concatena all'interno del messaggio "onruncomplete".Se questo viene salvato come script di tabella in dt1, dovrebbe funzionare.Per favore, provalo e fammi sapere.
dt1=Current Data Table();
query=New SQLQuery (...
);
query<<RUN></RUN>
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCiao Hadley,
Penso che siamo vicini...
Penso di aver eseguito tutto come suggerito, ma quando apro dt1 ed eseguo lo script da lì, ricevo questo messaggio di avviso JMP:
Nome non risolto: dt2 nell'accesso o nella valutazione di 'dt2', dt2/*###*/
Poco dopo viene visualizzato il datatable dt2. Ma non è aggiunto a dt1.
È interessante notare che, quando chiudo questo dt2 e provo a eseguire nuovamente lo script da dt1, non ricevo più il messaggio di avviso JMP, ma ora viene visualizzata la finestra Concatena e poco dopo viene nuovamente visualizzato dt2. Tuttavia dt2 non viene aggiunto a dt1.
Saluti
Tipo
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCIAO,
Penso che probabilmente potremmo semplificarlo nel modo seguente: chiameremo dt1 la tabella che è stata salvata sul nostro desktop e dt2 la nuova tabella che vogliamo aggiornare dal nostro database.Creeremo un nuovo script di tabella nella tabella dt1 che crea una query per dt2 e quindi concatena dt1 e dt2 insieme, accodando i risultati a dt1.
dt1=Current data table();<BR /><BR />queryname=New SQL Query(...<BR />...);<BR /><BR /><SPAN>queryname<<RUN></RUN><BR />dt1<<CONCATENATE><BR /></CONCATENATE></SPAN>
Per rispondere alla tua prima domanda, puoi ottenere il nuovo script SQL Query da dt2 eseguendo la query e quindi facendo clic con il pulsante destro del mouse sullo script sorgente, salvando il risultato negli appunti e quindi incollandolo in una nuova finestra di script.È quindi possibile utilizzare la finestra per lavorare sullo script prima di salvarlo in uno script Nuova tabella in dt1.
È utile?
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCiao Hadley,
Non ho ancora capito tutti i passaggi.
1) eseguire la query e salvare lo script sorgente, assegnando alla query un nuovo nome: queryname = New SQL Query(...)<
=> con "salva lo script sorgente", vuoi dire che devo solo MODIFICARE la query esistente nella mia tabella e salvarla lì? O aggiungerlo come NUOVO script alla mia tabella? O salvare questo nuovo script altrove?
4) utilizzare il riferimento a dt con una funzione "Concatena" insieme all'altra tabella.
=> questo ha bisogno di ulteriori chiarimenti, temo
Grazie in anticipo Hadley!
Tipo
Ri: Come aggiungere una tabella dati legacy con nuovi dati dallo script del databaseCiao ragazzo,
Quando si esegue la query SQL (Nuova query SQL(...)), è possibile ottenere un riferimento alla tabella dati con il seguente metodo:
1)eseguire la query e salvare lo script sorgente, assegnando alla query un nuovo nome: queryname = New SQL Query(...)<
2) Elimina la parte <
3) Aggiungi una riga di script sotto: queryname<
4) utilizzare il riferimento a dt con una funzione "Concatena" insieme all'altra tabella.
Per favore prova questo e fammi sapere se riesci a farlo funzionare per te.