Soluzione alternativa alla funzione "aggiorna" nello scriptCiao comunità JMP,
Ho una tabella dati che dipende da un'altra tabella dati. Ho provato ad aggiornarlo con la funzione di aggiornamento, ma sembra non fare nulla. Invece, ciò che fa questo script è aprire una nuova finestra della tabella dati con il sottoinsieme selezionato invece di aggiornare la tabella corrente. Come posso fare in modo che aggiorni il datatable attualmente aperto "dt" con il sottoinsieme di "dtU"? Grazie!
// 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),);Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptLa corrispondenza deve specificare quante colonne lo rendono univoco. Quindi potresti aver bisogno di una corrispondenza per più colonne, ad esempio :Experiment name == :Experiment name, :Stack==:Stack, :Wafer Code==:Wafer Code, :Metrology Recipe==:Metrology.
Questi sono solo suggerimenti.
Devi scegliere quali colonne rendono unica ciascuna riga, quindi abbinarle di conseguenza.
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptQuindi ho fatto quello che hai detto e ho aggiornato manualmente la tabella, questo è il codice associato
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
Quindi, l'ho applicato direttamente al mio codice
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
Tuttavia, invece di aggiornare tutte le righe, aggiorna semplicemente la prima riga e la copia per tutte le righe, come illustrato di seguito. È necessario eseguirne il loop per tutte le righe?
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptIn questa riga di codice, "nome" si riferisce al nome della colonna. Non stai mostrando tutti i nomi delle colonne ma hai sicuramente una colonna chiamata "nome" in entrambe?
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>
Prova a eseguire questa operazione manualmente dal menu Tabelle->Aggiorna.Quando ottieni l'output desiderato, guarda lo script sorgente in alto a sinistra (fai clic con il pulsante destro del mouse sulla sorgente, fai clic per vedere lo script) e controlla quel codice per ottenere esattamente ciò che desideri nel tuo JSL.
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptQuindi ho controllato tutti i tipi di dati per le colonne corrispondenti e sono gli stessi: stesso ordine e stessi tipi di dati. Nessuna delle colonne ha anche funzioni. Ho allegato i set di dati come immagine e il mio codice attuale. Sono completamente perso, quindi ogni aiuto è molto apprezzato. Grazie a tutti!
//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" );
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptDato che non possiamo vedere le tabelle, questa è solo un'ipotesi di cose da provare
- Verifica che il nome della colonna esista in entrambi, entrambi hanno lo stesso tipo di dati (probabile carattere) e tipo di modello (probabilmente nominale).
- utilizzare :nome==:nome o dt:nome == dt1:nome
- controlla se qualcuna delle colonne in dt ha delle funzioni, soprattutto se le colonne da aggiornare hanno delle funzioni. Penso che devi rimuovere la funzione prima dell'aggiornamento.
Queste sono alcune idee per la risoluzione dei problemi.
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptNon sono sicuro di interpretare correttamente ciò che stai cercando di fare qui, ma ecco la mia interpretazione, con alcuni dati di esempio.Dovrai aggiungere una colonna chiamata name dopo il comando stop().Questo ha funzionato bene per me.
Edit: credo di aver frainteso qualcosa. ... vuoi dire che stai tentando di aggiornare una tabella bloccata perché dipendente, come un riepilogo, JMP potrebbe forzare una nuova tabella. Non ne sono sicuro.
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 ) );
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptHo provato la modifica, ma invece di aggiornare la tabella dati KrF (dt), apre solo un nuovo sottoinsieme e non aggiorna la tabella dt. Devo connetterli entrambi a un server odbc? Entrambi i tavoli sono ancora aperti, quindi JMP li vede sicuramente entrambi.Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptprova a cambiare
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
A
dt << Update( With( dt1 ), Match Columns( name== name ) );
In base alle righe commentate del mio script, il mio precedente tentativo di iscrizione utilizzava il formato precedente e non ha funzionato quando sono passato all'aggiornamento. La sintassi è diversa
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptOps, volevo scrivere quella riga come
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
Tuttavia, continua a non aggiornare dt ("KrF CDU Data table.jmp"). Sto cercando di aggiornare la tabella dei dati KrF con i dati della tabella dell'esposizione (dtU).
Questo è l'aspetto del registro:
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 ) );
Quindi c'è qualche errore nella riga di aggiornamento? Non ne sono sicuro, ma questo è ciò che riporta il registro
Ri: Soluzione alternativa per la funzione "aggiorna" nello scriptAlcuni dei tuoi JSL sembrano sbagliati o strani:
dtU << Select Where(contains("KrF", :Type)); dovrebbe essere così
dtU << Select Where(contains( :Type, "KrF:));
Inoltre, questa riga due sembra strana Selected Columns(1,:Wafer Code) e
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
Non hai menzionato quale tabella dipende. Per impostazione predefinita, le tabelle dei sottoinsiemi non sono dipendenti.
Cosa riporta il file di registro?