Procedure consigliate per join/aggiornamenti ripetuti negli script JMPCiao a tutti,
I’m running a JSL script that performs Update/Join operations between calculation tables and filtered data tables. I noticed the following behavior:
-
Quando lo script viene eseguito più volte, JMP rinomina automaticamente le colonne duplicate per evitare conflitti di nomi, ad esempio,
<SPAN><SPAN class="hljs-title class_">Numero</SPAN> <SPAN class="hljs-title class_">di lotto</SPAN> - <SPAN class="hljs-title class_">Numero di</SPAN> <SPAN class="hljs-title class_">lotto</SPAN> della tabella <SPAN class="hljs-number">1,</SPAN> <SPAN class="hljs-title class_">Numero di</SPAN> <SPAN class="hljs-title class_">lotto</SPAN> <SPAN class="hljs-keyword">della</SPAN> tabella <SPAN class="hljs-number">2</SPAN></SPAN>
-
Anche se chiudo le tabelle dal pannello, le variabili (oggetti colonna) continuano a esistere in memoria, quindi rieseguendo lo script si creano ulteriori colonne duplicate.
-
La mia soluzione alternativa attuale è quella di uscire da JMP e riavviarlo prima di eseguire lo script per evitare colonne duplicate.
Domande per la comunità:
-
Are there best practices for repeated Update or Join operations that avoid generating duplicate columns?
-
Esiste un metodo consigliato per "pulire" tabelle/variabili dopo l'esecuzione di uno script, in modo che le esecuzioni successive non creino duplicati?
-
Esistono funzioni o modelli JSL per rinominare o sovrascrivere le colonne in modo sicuro senza generare copie extra?
Qualsiasi suggerimento o strategia sarà molto apprezzato!
Ho anche provato questo codice per gestirli dinamicamente ma non ha funzionato
RenameColumn = Function({dt, oldNamePattern, newName},
colList = dt << Get Column Names; // returns a column list object
n = N Items(colList); // number of columns
For(i = 1, i <= n, i++,
c = colList[i]; // get the column name as string
If(Contains(c, oldNamePattern),
Column(dt, c) << Set Name(newName);
Break(); // optional: stop after first match
);
);
);
Automazione e scriptingRe: Best Practice per join/aggiornamenti ripetuti negli script JMPCosa vuoi fare con quelle colonne? Se esistono già, non aggiornarle/aggiungerle di nuovo? Puoi fornire uno script di esempio con dati che la community potrebbe esaminare?
Re: Best Practice per join/aggiornamenti ripetuti negli script JMPSono curioso di scoprire i dettagli dietro il problema descritto.
in particolare, le variabili (oggetti colonna) esistono ancora in memoria, quindi rieseguendo lo script si creano colonne duplicate aggiuntive.
Oltre a questo, tieni presente che:
Per Tabelle/Aggiornamento, tale problema è causato da una nuova funzionalità in JMP19:
Consenti alla piattaforma di aggiornamento di creare nuove colonne se esistono già nella tabella da aggiornare
La funzionalità aggiuntiva è interessante, ma non si è tenuto conto degli effetti collaterali!
effetto collaterale:
Con JMP19 non è più possibile utilizzare la funzione nella modalità:
"aggiungere colonne che non sono ancora presenti nella tabella di destinazione".
ulteriori dettagli: Tabelle/Aggiornamento modificato!
Gli script si comportano in modo diverso e l'utente otterrà tabelle come questa:
(le colonne aggiuntive sono inutili, inquinano la tabella)

Spero che gli sviluppatori capiscano il problema e lo risolvano nella prossima versione.
una possibile soluzione: 2 modalità
tabelle/aggiornamento automatico
- usa il nuovo approccio e aggiungi una colonna (con un suffisso) SE (!!!!) l'utente seleziona la colonna

- non usare il trucco nella modalità "Tutti":

-> consentirà di nuovo
"aggiungi colonne che non sono ancora presenti nella tabella di destinazione"
(come nelle versioni precedenti di JMP).
... alternativa: un'impostazione aggiuntiva per abilitare/disabilitare la nuova modalità.
Per garantire la compatibilità con le versioni precedenti: disattivare l'impostazione per impostazione predefinita.
Re: Best Practice per join/aggiornamenti ripetuti negli script JMPSembra che sia necessario utilizzare la funzione "Colonne di output" in Join, per evitare di importare dati duplicati. A meno che non si estraggano colonne con lo stesso nome, l'utilizzo di "Colonne di output" non produrrà il suffisso "... della tabella 2" nei nomi delle colonne.
In Aggiorna, dovresti selezionare le colonne da aggiungere, in modo che non vengano importati i nomi di colonna duplicati.
Re: Best Practice per join/aggiornamenti ripetuti negli script JMPCodice:
// Filtering Table A using RequiredBatches
FilteredA = TableA << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Matches(0,0),
Output Table("FilteredA"),
Invisible(0)
);
// Filtering Table B using RequiredBatches
FilteredB = TableB << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Nonmatches(0,0),
Output Table("FilteredB"),
Prevent Name Collision(1),
Invisible(0)
);
// Rename joined key columns
Column(FilteredA, "Batch Number of TableA") << Set Name("Batch Number");
Column(FilteredB, "Batch Number of TableB") << Set Name("Batch Number");
Se eseguo questo script una seconda volta senza riavviare JMP , accade quanto segue:
- JMP aggiunge automaticamente suffissi ai nomi delle tabelle:
FilteredA → FilteredA 2
FilteredB → FilteredB 2
Ho anche provato a usare per tutte le tabelle all'inizio dello script, sembra funzionare su Mac perché non riscontro alcun problema, ma su Windows penso che non funzioni o che il comportamento sia molto confuso.
Try(TableA << Close(No Save));
Anche dopo aver chiuso l'elenco della finestra principale di JMP usando "Chiudi tutto tranne questo" nel mio script [dove vengono visualizzate le tabelle], le tabelle vengono chiuse ma probabilmente le variabili sono ancora in memoria. Quindi, non so come gestire questa situazione.
Questo o qualche altro modo che non comporti il riutilizzo del codice potrebbe aiutare

Re: Best Practice per join/aggiornamenti ripetuti negli script JMPDov'è
Prevent Name Collision(1)
da dove vieni?
Esegui l'unione in modo interattivo nella piattaforma JMP Join, assicurati che appaia come desideri nell'anteprima, eseguila e copia lo script dal registro avanzato.
Re: Best Practice per join/aggiornamenti ripetuti negli script JMPHai provato ad attivare " Aggiorna la tabella principale con i dati della seconda tabella "

[nessuna nuova colonna - aggiorna qualsiasi riga corrispondente]
o " Corrispondenza con la colonna con lo stesso nome "?

[simile al primo, ma aggiunge nuove colonne.]
Re: Best Practice per join/aggiornamenti ripetuti negli script JMPyes, but this would be impractical for large list of columns</CODE></P>
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-914649" slang="en-US" mode="CREATE" translate="no">Re: Best Practice per join/aggiornamenti ripetuti negli script JMP</LINGO-SUB>
<LINGO-BODY id="lingo-body-914649" slang="en-US" mode="CREATE">
<BLOCKQUOTE>
<HR />
<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/63230" target="_blank">@zetaVagabond1</A> wrote:
<BR />
<P>yes, but this would be impractical for large list of columns<CODE class=" language-jsl">
questa è una risposta a .... ?