Bewährte Vorgehensweisen für wiederholte Joins/Updates in JMP-SkriptenHallo zusammen,
I’m running a JSL script that performs Update/Join operations between calculation tables and filtered data tables. I noticed the following behavior:
-
Wenn das Skript mehrmals ausgeführt wird, benennt JMP doppelte Spalten automatisch um, um Namenskonflikte zu vermeiden, z. B.
<SPAN><SPAN class="hljs-title class_">Chargennummer</SPAN> – <SPAN class="hljs-title class_">Chargennummer</SPAN> <SPAN class="hljs-keyword">aus</SPAN> <SPAN class="hljs-title class_">Tabelle</SPAN> <SPAN class="hljs-number">1,</SPAN> <SPAN class="hljs-title class_">Chargennummer</SPAN> <SPAN class="hljs-title class_">aus</SPAN> <SPAN class="hljs-title class_">Tabelle</SPAN> <SPAN class="hljs-number">2</SPAN></SPAN>
-
Selbst wenn ich die Tabellen über das Panel schließe, existieren die Variablen (Spaltenobjekte) weiterhin im Speicher, sodass beim erneuten Ausführen des Skripts zusätzliche doppelte Spalten erzeugt werden.
-
Mein aktueller Workaround besteht darin , JMP zu beenden und neu zu starten, bevor ich das Skript ausführe, um doppelte Spalten zu vermeiden.
Fragen an die Community:
-
Are there best practices for repeated Update or Join operations that avoid generating duplicate columns?
-
Gibt es eine empfohlene Methode, um Tabellen/Variablen nach der Ausführung eines Skripts zu „bereinigen“, damit nachfolgende Ausführungen keine Duplikate erzeugen?
-
Gibt es Funktionen oder JSL-Muster, um Spalten sicher umzubenennen oder zu überschreiben, ohne zusätzliche Kopien zu erzeugen?
Vorschläge und Strategien sind sehr willkommen!
Ich habe auch diesen Code ausprobiert, um sie dynamisch zu verarbeiten, aber er hat nicht funktioniert.
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
);
);
);
Automatisierung und SkripterstellungBetreff: Best Practices für wiederholte Joins/Updates in JMP-SkriptenWas möchten Sie mit diesen Spalten tun? Falls sie bereits existieren, sollen sie nicht aktualisiert/neu hinzugefügt werden? Können Sie ein Beispielskript mit Daten bereitstellen, das die Community prüfen kann?
Betreff: Best Practices für wiederholte Joins/Updates in JMP-SkriptenIch bin neugierig, die Details hinter dem beschriebenen Problem zu erfahren.
insbesondere die Variablen (Spaltenobjekte) existieren noch im Speicher, sodass das erneute Ausführen des Skripts zusätzliche doppelte Spalten erzeugt.
Bitte beachten Sie außerdem Folgendes:
Bei Tabellen/Aktualisierungen wird ein solches Problem durch eine neue Funktionalität in JMP19 verursacht:
Erlauben Sie der Update-Plattform, neue Spalten zu erstellen, falls diese bereits in der zu aktualisierenden Tabelle vorhanden sind.
Die zusätzlichen Funktionen sind zwar toll, aber die Kollateralschäden wurden nicht bedacht!
Kollateraleffekt:
Mit JMP19 ist es nicht mehr möglich, die Funktion im Modus zu verwenden:
"Bitte fügen Sie Spalten hinzu, die noch nicht in der Zieltabelle vorhanden sind."
Weitere Details: Tabellen/Aktualisierung geändert!
Die Skripte verhalten sich unterschiedlich, und der Benutzer erhält Tabellen wie diese:
(Die zusätzlichen Spalten sind nutzlos – sie verunreinigen die Tabelle.)

Ich hoffe, die Entwickler verstehen das Problem und beheben es mit der nächsten Version.
Eine mögliche Lösung: 2 Modi
automatische Tabellen/Aktualisierung
- Verwenden Sie den neuen Ansatz und fügen Sie eine Spalte (mit einem Suffix) hinzu , WENN (!!!!) der Benutzer die Spalte auswählt

- Den Trick nicht im Modus „Alle“ anwenden:

-> wird wieder erlaubt sein
"Spalten hinzufügen, die noch nicht in der Zieltabelle vorhanden sind"
(wie in früheren Versionen von JMP).
... Alternative: eine zusätzliche Einstellung zum Aktivieren/Deaktivieren des neuen Modus.
Um die Abwärtskompatibilität zu gewährleisten, sollte die Einstellung standardmäßig deaktiviert sein.
Betreff: Best Practices für wiederholte Joins/Updates in JMP-SkriptenEs scheint, als müssten Sie die Funktion „Ausgabespalten“ in Join verwenden, um doppelte Daten zu vermeiden. Sofern Sie keine Spalten mit demselben Namen importieren, wird durch die Verwendung von „Ausgabespalten“ der Zusatz „… von Tabelle 2“ nicht an die Spaltennamen angehängt.
Im Update-Menü wählen Sie die hinzuzufügenden Spalten aus, damit keine doppelten Spaltennamen übernommen werden.
Betreff: Best Practices für wiederholte Joins/Updates in JMP-SkriptenCode:
// 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");
Wenn ich dieses Skript ein zweites Mal ausführe , ohne JMP neu zu starten , passiert Folgendes:
- JMP hängt automatisch Suffixe an Tabellennamen an:
FilteredA → FilteredA 2
FilteredB → FilteredB 2
Ich habe auch versucht, am Anfang des Skripts eine Schleife für alle Tabellen zu verwenden. Auf dem Mac scheint das zu funktionieren, da ich keine Probleme habe, aber unter Windows funktioniert es meiner Meinung nach nicht oder ich bin sehr verwirrt über das Verhalten.
Try(TableA << Close(No Save));
Selbst nachdem ich in meinem Skript (in dem Tabellen angezeigt werden) über die JMP-Startfensterliste „Alle außer diesem schließen“ ausgewählt habe, werden die Tabellen zwar geschlossen, aber die Variablen befinden sich vermutlich noch im Speicher. Ich bin mir daher nicht sicher, wie ich dieses Problem beheben kann.
Würde das helfen oder gibt es eine andere Möglichkeit, die keine Umgestaltung des Codes erfordert?

Betreff: Best Practices für wiederholte Joins/Updates in JMP-SkriptenWo ist
Prevent Name Collision(1)
Woher kommt es?
Führen Sie den Join interaktiv in der JMP Join-Plattform durch, stellen Sie sicher, dass er in der Vorschau Ihren Vorstellungen entspricht, führen Sie ihn aus und kopieren Sie das Skript aus dem erweiterten Protokoll.
Betreff: Best Practices für wiederholte Joins/Updates in JMP-SkriptenHaben Sie versucht, die Option „ Haupttabelle mit Daten aus der zweiten Tabelle aktualisieren “ zu aktivieren?

[Keine neuen Spalten - Aktualisierung jeder übereinstimmenden Zeile]
oder " Spalte mit gleichem Namen abgleichen "?

[ähnlich dem ersten - jedoch mit zusätzlichen Spalten.]
Betreff: Best Practices für wiederholte Joins/Updates in JMP-Skriptenyes, 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">Betreff: Best Practices für wiederholte Joins/Updates in JMP-Skripten</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">
Dies ist eine Antwort auf .... ?