Problemumgehung zum „Aktualisieren“ der Funktion im SkriptHallo JMP-Community,
Ich habe eine Datentabelle, die von einer anderen Datentabelle abhängig ist. Ich habe versucht, es mit der Update-Funktion zu aktualisieren, aber es scheint nichts zu bewirken. Stattdessen öffnet dieses Skript ein neues Datentabellenfenster mit der ausgewählten Teilmenge, anstatt die aktuelle Tabelle zu aktualisieren. Wie kann ich es dazu bringen, die aktuell geöffnete Datentabelle „dt“ mit der Teilmenge von „dtU“ zu aktualisieren? Danke!
// 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),);Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptMatch muss so viele Spalten angeben, dass dies eindeutig ist. Daher benötigen Sie möglicherweise eine Übereinstimmung über mehrere Spalten, zum Beispiel :Experimentname == :Experimentname, :Stack==:Stack, :Wafer Code==:Wafer Code, :Metrology Recipe==:Metrology.
Dies sind lediglich Vorschläge.
Sie müssen auswählen, welche Spalten jede Zeile einzigartig machen, und dann entsprechend anpassen.
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptAlso habe ich getan, was Sie gesagt haben, und die Tabelle manuell aktualisiert. Dies ist der zugehörige Code
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
Also habe ich dies direkt auf meinen Code angewendet
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
Anstatt jedoch alle Zeilen zu aktualisieren, wird lediglich die erste Zeile aktualisiert und diese Zeile für alle Zeilen kopiert, wie unten dargestellt. Muss ich es für alle Zeilen wiederholen?
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptIn dieser Codezeile bezieht sich „name“ auf den Spaltennamen. Sie zeigen nicht alle Spaltennamen an, aber gibt es in beiden definitiv eine Spalte mit dem Namen „Name“?
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>
Versuchen Sie, diesen Vorgang manuell über das Menü „Tabellen->Aktualisieren“ auszuführen.Wenn Sie die gewünschte Ausgabe erhalten, schauen Sie sich das Quellskript oben links an (klicken Sie mit der rechten Maustaste auf die Quelle, klicken Sie, um das Skript anzuzeigen) und überprüfen Sie den Code, um genau das zu erhalten, was Sie in Ihre JSL möchten.
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptDeshalb habe ich alle Datentypen auf die passenden Spalten überprüft und festgestellt, dass sie gleich sind: gleiche Reihenfolge und gleiche Datentypen. Keine der Spalten hat auch Funktionen. Ich habe die Datensätze als Bild und meinen aktuellen Code angehängt. Ich bin völlig verloren, daher bin ich für jede Hilfe sehr dankbar. Danke euch allen!
//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" );
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptDa wir die Tabellen nicht sehen können, ist dies nur eine Vermutung, was wir ausprobieren sollten
- Überprüfen Sie, ob der Spaltenname in beiden vorhanden ist. Beide haben denselben Datentyp (wahrscheinlich Zeichen) und denselben Modellierungstyp (wahrscheinlich nominal).
- Verwenden Sie :name==:name oder dt:name == dt1:name
- Überprüfen Sie, ob eine der Spalten in dt Funktionen hat, insbesondere ob die zu aktualisierenden Spalten Funktionen haben. Ich denke, Sie müssen die Funktion vor dem Update entfernen.
Das sind ein paar Ideen zur Fehlerbehebung.
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptIch bin mir nicht sicher, ob ich das, was Sie hier versuchen, richtig interpretiere, aber hier ist meine Interpretation mit einigen Beispieldaten.Sie müssen nach dem Befehl stop() eine Spalte namens name hinzufügen.Das hat bei mir gut funktioniert.
Edit: Ich glaube, ich habe etwas falsch verstanden. ... Sie meinen, Sie versuchen, eine Tabelle zu aktualisieren, die gesperrt ist, weil sie abhängig ist, z. B. eine Zusammenfassung. JMP erzwingt möglicherweise eine neue Tabelle. Da bin ich mir nicht sicher.
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 ) );
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptHabe die Änderung ausprobiert, aber anstatt die KrF-Datentabelle (dt) zu aktualisieren, wird nur eine neue Teilmenge geöffnet und die Tabelle dt wird nicht aktualisiert. Muss ich beide mit einem ODBC-Server verbinden? Beide Tabellen werden noch geöffnet, sodass JMP definitiv beide Tabellen sieht.Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptVersuchen Sie es zu ändern
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
Zu
dt << Update( With( dt1 ), Match Columns( name== name ) );
Basierend auf den auskommentierten Zeilen meines Skripts verwendete mein vorheriger Beitrittsversuch das frühere Format und funktionierte nicht, als ich auf „Update“ umstieg. Die Syntax ist anders
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptHoppla, ich wollte diese Zeile so schreiben
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
Allerdings wird dt („KrF CDU Data table.jmp“) immer noch nicht aktualisiert. Ich versuche, die KrF-Datentabelle mit Daten aus der Expositionstabelle (dtU) zu aktualisieren.
So sieht das Protokoll aus:
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 ) );
Es liegt also ein Fehler in der Update-Zeile vor? Ich bin mir nicht sicher, aber das ist es, was das Protokoll meldet
Betreff: Problemumgehung zum „Aktualisieren“ der Funktion im SkriptEinige Ihrer JSLs sehen falsch oder seltsam aus:
dtU << Select Where(contains("KrF", :Type)); das sollte sein
dtU << Select Where(contains( :Type, "KrF:));
Außerdem sieht diese Zeile zwei seltsam aus: Selected Columns(1,:Wafer Code) und
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
Sie haben nicht erwähnt, welche Tabelle abhängig ist. Standardmäßig sind Teilmengentabellen nicht abhängig.
Was meldet die Protokolldatei?