Frage zu den Tabellenreferenzen (von Russel)
Diese Frage kam im Thread zu " Betreff: 2022Q1 Praktische Sitzung - Anfänger" - und ich möchte, dass auch andere an der Diskussion teilnehmen, also habe ich sie in das Diskussionsforum gestellt.
Frage zu den heute gezeigten Tabellenreferenzen: Wenn Sie mehrere Tabellen sequentiell als Teil eines Skripts verarbeiten, iterieren Sie die Tabellenreferenzen endlos (dt1, dt2, dt3, ...) oder gibt es eine intelligentere Lösung?
Hintergrund: Ich bearbeite häufig Tabellen (verknüpfen, verketten, teilen usw.) und habe manchmal ziemlich viele Tabellen, die ich sequentiell öffne, verarbeite und schließe, bevor ich zur nächsten Tabelle im selben Skript übergehe, bis ich die letzte gewünschte Tabelle habe .
Betreff: Frage zu den Tabellenverweisen (von Russel)Hallo @Ressel ,
es kommt wirklich darauf an, was du endlich machen willst. Wenn Sie beispielsweise 100 Datentabellen haben, die Sie auf die gleiche Weise verarbeiten und anschließend schließen möchten, würde eine Schleife (zum Öffnen, Verarbeiten, Schließen jeder Tabelle) die Aufgabe möglicherweise besser erledigen, als alle 100 Tabellen zu öffnen und dann nacheinander zu verarbeiten das andere. Ein Grund dafür ist, dass Sie nicht so viele Windows-Handles erstellen, die ein anderes Problem auf der Systemseite hervorrufen könnten.
Im Allgemeinen würde ich den Namen der Tabellenvariablen etwas aussagekräftiger machen, damit ich besser verstehe, was es ist, wenn das Sinn macht. "dt" ist hauptsächlich für den dreckigen Hack 
Sie können auch alle offenen Datentabellen abrufen und sie dann mit durchlaufen
Get Data Table List();
Dies wäre wahrscheinlich ein kluger Schachzug.
Wie denken andere darüber?
Betreff: Frage zu den Tabellenverweisen (von Russel)Ich bin einverstanden mit @martindemel , es hängt davon ab, wo sich die Dateien befinden, in welcher Reihenfolge Sie sie verarbeiten und was Sie mit ihnen machen möchten. JSL hat viele eingebaute Funktionen außerhalb des erweiterten Protokolls, die helfen können. Zum Beispiel, Dateien im Verzeichnis gibt Ihnen eine Liste aller Dateien in einem Verzeichnis. Datei auswählen können Sie interaktiv eine oder mehrere Dateien aus einem Verzeichnis auswählen. Obwohl das erweiterte Protokoll gute Arbeit bei der Erfassung interaktiver Vorgänge leistet, möchten Sie dennoch die hartcodierten Tabellennamenreferenzen durch variable Referenzen auf die Tabellen ersetzen. @martindemel zeigte einige davon mit dt = Öffnen (... In den meisten Fällen gibt eine JSL-Operation, die eine Datei öffnet, ein Handle an die Datentabelle zurück, die erstellt wird. Datentabellen-Handles werden auch erstellt, wenn Sie eine Nachricht mit einer Operation aus der senden Tische Speisekarte. Wenn Sie beispielsweise eine Teilmenge erstellen, wird die Syntax
subsetDT = dt << Subset(...
können Sie den Verweis auf die neu erstellte Tabelle erfassen. Die anderen Tabellenoperationen funktionieren auf ähnliche Weise.
Betreff: Frage zu den Tabellenverweisen (von Russel)Danke für die Antworten. Etwas mehr zum Hintergrund dessen, womit ich arbeite.
Ich lade die Tabellen aus unserer Google Cloud Platform-Implementierung über ODBC. Diese Tabellen werden regelmäßig mit aktuellen Herstellungsdaten aktualisiert. Zum Beispiel die erste Tabelle, die ich lade (ich verweise darauf als dt ) enthält Chargen-IDs, Parameternamen für verschiedene QC-Parameter, Messergebnisse und Maßeinheiten in separaten Spalten. Ich teile es nach QC-Parameternamen auf (und verweise auf die Ausgabe als dt2 , schließen dt ). Dann lade ich beispielsweise eine andere Tabelle, die Chargen-IDs mit Herstellungsstandorten querverweist (die ich als dt3 ). Danach darf ich mitmachen dt2 mit dt3 , Erstellen dt4 und so weiter und so weiter, bis ich eine Tabelle habe, die alle Informationen enthält, die ich denke, dass ich sie brauche, bevor ich mit irgendeiner Analyse fortfahre. In einigen Skripten verarbeite ich fast 10 Tabellen, auf die alle verwiesen wird dt(n) . Das ist, was mein aktuelles Können zulässt.
Ich habe einen mittelfristigen Plan, ein solches Skript für Regelkarten zu verwenden. Im Moment bewerte ich Trends nur visuell und sende Screenshots oder html-exportierte Diagramme an verschiedene Interessengruppen.
Was ich aus diesem Gespräch mitnehme, ist die Verwendung aussagekräftigerer Tabellenreferenzen. Diese werden auch als Griffe bezeichnet?
Betreff: Frage zu den Tabellenverweisen (von Russel)Beschreibende Handle-/Referenznamen werden Ihnen (oder jemand anderem, der Ihren Code ändern muss) irgendwann helfen. Dies erleichtert auch das Debug-Drucken, wenn Sie Show(dt_batchid_loc); um beispielsweise den Namen der erstellten Tabellen anzuzeigen.
Es kann auch nützlich sein, beim Erstellen von Tabellen Ausgabetabelle ("Name der Tabelle") zu verwenden. Dies wird Ihnen helfen, wenn Sie (wenn Sie) den Code debuggen müssen. Wenn Sie dies nicht tun (ich neige dazu, dies zu überspringen, und es verfolgt mich von Zeit zu Zeit), ist es viel einfacher zu sehen, welche Tabelle von einem Namen wie "BatchID_with_Loc" geöffnet ist, im Vergleich zu "Untitled 3041 summary by QC , Loc" oder so.
Betreff: Frage zu den Tabellenverweisen (von Russel)Es besteht auch die Möglichkeit, die Tabellenmanipulation in der Datenbank durchzuführen (Abfragedefinition durch zB Query Builder oder in nativem SQL). Dies ist bei großen Datensätzen von Vorteil, da Sie Traffic vermeiden und den Server stark belasten. Dann müssen Sie auch weniger Tabellen in JMP verwalten.
Betreff: Frage zu den Tabellenverweisen (von Russel)Ich habe es schon einmal mit dem Query Builder versucht. Es war unglaublich langsam und stürzte ständig ab. Also habe ich den technischen Support von SAS kontaktiert, aber sie konnten das Problem nicht lösen. Infolgedessen blieb ich bei der Behandlung einzelner Tabellen in einem Skript, was; angesichts der düsteren Leistung des Abfragegenerators; ist viel bequemer und effizienter. Es könnte sein, dass dies daran liegt, dass die Tabellen, die ich lade, mehr als 100.000 Zeilen haben - das war zumindest die Schlussfolgerung des technischen Supports. Leider kann ich mich praktisch nirgendwo anders hinwenden als an diese "massiven" Tische.
Außerdem denke ich, dass ich mich dringend mit Debugging vertraut machen muss. Während ich es schaffe, ein paar nützliche Codezeilen zu "verwirren", denke ich nicht an Architektur, Ästhetik oder; in der Tat; wie man ein Skript erstellt, das debuggt werden kann. Leider ist das für mich noch ein Fremdwort.