Helfen Sie bei der Konsolidierung von JMP-Abfragen und -Skripten.Ich habe vor kurzem damit begonnen, JMP zu verwenden, um Fertigungsdaten direkt in JMP-Tabellen zu importieren und zu analysieren.
Normalerweise besteht meine Anforderung darin, die Daten für jeden Prozessschritt im Herstellungsprozess und für alle verarbeiteten Chargen zu extrahieren und daraus Diagramme zu erstellen.
Also begann ich damit, JMP-Queire für jeden Prozess zu erstellen – und oft möchte ich den Prozesscode sowie das Datum, ab dem ich die Extraktion durchführen möchte, als Eingaben für die Abfrage angeben.
Alle meine JMP-Abfragen verfügen daher über die folgenden Filter, und ich habe das Datum als Eingabeaufforderungsvariable beibehalten, damit ich es jedes Mal ändern kann, wenn ich die Abfrage ausführe

Ich habe auch ein Nachbearbeitungsskript, da die Daten fast immer nicht in dem Format und der Form gespeichert werden, die ich zum Zeichnen von Diagrammen haben möchte. Dies zwingt mich dazu, eine neue Tabelle aus der Tabelle zu erstellen, die bei der Extraktion der ursprünglichen Abfrage herauskommt.
Alle meine JMP-Abfragen generieren also am Ende zwei Tabellen. Ein Beispiel ist unten dargestellt.

Das hat ziemlich gut funktioniert, bis jetzt möchte ich mit der Konsolidierung dieser Abfragen beginnen, indem ich verschiedene Tabellen verbinde, die durch meine vielen verschiedenen JMP-Abfragen generiert wurden.
Also beginne ich mit dem Schreiben des folgenden Skripts, das lautet:
finCDquery = open( "PATH\New M33 final CD.jmpquery", Private );
devCDquery = open( "PATH\New M33 develop CD.jmpquery", Private );
M33finCD = finCDquery << Run Foreground(Private);
M33devCD = devCDquery << Run Foreground(Private);
Data Table( "M33-CD QUERY" ) << Join(
With( Data Table( "M33D-CD QUERY" ) ),
Select(.
.
.
.
Hier sind die Dinge, bei denen ich gerne Hilfe hätte: weil ich nicht ganz die erwartete Antwort bekomme.
- Erstens verfügt jede Abfrage über eine Datumsaufforderung, sodass ich warten und das Datum eingeben und dazwischen mehrmals auf „OK“ klicken muss. Wie kann ich die Abfragen so ändern, dass das erste von mir angegebene Datum für alle nachfolgenden JMP-Abfragen verwendet wird?
- Obwohl ich die Tabellen öffne, die nicht als privat angezeigt werden sollen, werden sie trotzdem weiterhin angezeigt. Was mache ich falsch?
- Ich habe die SQL-Abfragen für alle meine jmpqueies. Wie kann ich sie in das Skript einfügen, anstatt jede meiner jmpquery-Dateien zu öffnen, wie ich es jetzt tue?
DatenzugriffBetreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.@pmroz @Georg Danke Leute!!
Das Einschließen der Abfrage in \[ reicht für das zweite Problem aus.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.Es ist schwierig, SQL in JSL zu entwickeln @Georg Erwähnungen verwenden ein Tool wie SQL Developer oder PL/SQL Developer.
Ich habe das entwickelt log_execute_sql Funktion vor ein paar Jahren - es ist im Dateiaustausch gepostet: Fehler-Trapping für Oracle ODBC SQL
Das ist für uns eine unschätzbare Hilfe beim Debuggen von SQL in JSL.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.@pmroz Vielen Dank für Ihren Vorschlag mit allgemeinem Zitat \[ \], das ist ein weiterer Weg, an den ich noch nicht einmal gedacht habe.
Sofern es nicht so funktioniert, mag ich persönlich keine Bindestriche in Namen und doppelte Anführungszeichen in SQL …, weil ich deswegen in der Vergangenheit große Probleme hatte.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.Der Fehler liegt daran, dass Sie versuchen, die Spaltenüberschrift in einfache Anführungszeichen zu setzen.Oracle möchte, dass der Spaltenname in doppelte Anführungszeichen gesetzt wird.Dies sollte funktionieren. Beachten Sie, dass ich \[ und ]\ verwende, um doppelte Anführungszeichen in der Zeichenfolge ohne diese lästigen Escape-Zeichen zu ermöglichen.
M32FICDSQL =
"\[SELECT t1.LOTID, t2.COMPIDS AS WAFERID, t1.EQPID, t2.REVDATE AS "M32-FICD-DATE",
t1.PARTID, t1.RECPID, t2.ITEMPROMPT, t2.NUMERICVALUE,
t3.LOTTYPE
FROM PLLDBA.TRES t1
LEFT OUTER JOIN PLLDBA.ACTL t3
ON ( t1.LOTID = t3.LOTID )
INNER JOIN PLLDBA.TRES_RAWDATA t2
ON ( ( t1.TESTOPNO = t2.TESTOPNO ) AND ( t1.REVDATE = t2.REVDATE ) )
WHERE ( ( ( (t1.TESTOPNO LIKE '%JG43%' ) ) AND ( t2.REVDATE >= TO_TIMESTAMP('01Jan2019:18:42:42', 'DDMONYYYY:HH24:MI:SS') ) AND ( t2.ITEMPROMPT IN ( 'ITEM1' , 'MITEM2' , 'ITEM3' , 'ITEM4' ) ) AND ( (t1.RECPID LIKE '%HJ546%' ) ) AND ( (t3.LOTTYPE LIKE '%PT%' ) ) AND ( (t1.PARTID LIKE '%C765G%' ) ) ) )
ORDER BY t2.COMPIDS DESC, t2.REVDATE ASC;]\";
Wenn Sie weiterhin Probleme haben, verwenden Sie nicht den AS-Befehl und ändern Sie stattdessen den Spaltennamen in JSL.Das sollte nicht nötig sein – ich verwende diese Syntax ständig und ohne Probleme.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.@spoikayil , du bist auf dem richtigen Weg, die Verbindung scheint in Ordnung zu sein.
Ihr Fehler ist ein SQL-Fehler. Der ODBC-Treiber teilt Ihnen vor Ihrer „from“-Anweisung in der SQL mit, dass ein Fehler vorliegt. Ich denke also, dass es ein Problem mit „-“ in Ihrem Spaltennamen „M32-FICD-DATE“ gibt, auch wenn es zitiert wird. Sie erhalten den gleichen Fehler, wenn in der select-Anweisung ein Doppelpunkt (,) fehlt. Verwenden Sie niemals „-“ in Namen und verwenden Sie niemals doppelte Anführungszeichen (wie Sie bereits erwähnt haben).
Das Schreiben/Entwickeln von SQL-Abfragen in JMP (Skriptfehler) ist sehr schwierig, da leicht Syntaxfehler wie hier auftreten. Und es gibt noch viele weitere Probleme mit SQL in Skripten, von denen einige nicht einmal sichtbar sind (einige versteckte Zeichen …). Obwohl ich mittlerweile ein erfahrener SQL-Autor bin, verwende ich zum Schreiben von SQL immer ein anderes Tool wie SQL Developer. Mit JMP ist es meiner Meinung nach nicht möglich, einfaches SQL zu schreiben, zumindest nicht für komplexe Abfragen. Aber natürlich können Sie den grafischen Abfrage-Builder für einfache Abfragen verwenden.
Etwas besser sieht es aus, wenn Sie „Run Foreground()“ durch „Modify()“ ersetzen, dann wird der Abfrage-Editor geöffnet und Sie können Ihre Abfrage besser lesen und auch testen.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.@pmroz , @Georg vielen Dank für Ihr Feedback!
Ich habe überprüft, ob die Einstellungen den Vorschlägen von pmroz entsprachen, und habe dann Methode 1 ausprobiert, die Georg empfohlen hatte – die Verbindungszeichenfolge und die SQL-Abfrage getrennten Variablen zuweisen und die Abfrage mit der Methode „New SQL Query()“ ausführen.
Es scheint zu funktionieren – da ich nicht mehr den ODBC-Treiberfehler erhalte, den ich früher bekam.
Ich erhalte jedoch eine neue Fehlermeldung wie unten; und ich bin mir nicht sicher, ob das an einer fehlerhaften Abfrage liegt oder nicht.
Ich habe die Abfrage aus der Registerkarte „SQL“ der JMPQuery-Datei kopiert. Ich habe die doppelten Anführungszeichen für den Spaltenalias geändert 'M32-FICD-DATUM' für die REVDATE-Spalte in einfache Anführungszeichen setzen, da sonst das falsche doppelte Anführungszeichen als Ende der Zeichenfolge abgefangen wird.
[Oracle][ODBC][Ora]ORA-00923: FROM keyword not found where expected [SQLSTATE=HY000] in access or evaluation of 'Run Foreground' , Run Foreground() /*###*/
In the following script, error marked by /*###*/
Names Default To Here( 1 );
cnxstrng =
"ODBC:DSN=****;UID=*******;PWD=******;DBQ=*****;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;";
M32FICDSQL =
"SELECT t1.LOTID, t2.COMPIDS AS WAFERID, t1.EQPID, t2.REVDATE AS 'M32-FICD-DATE',
t1.PARTID, t1.RECPID, t2.ITEMPROMPT, t2.NUMERICVALUE,
t3.LOTTYPE
FROM PLLDBA.TRES t1
LEFT OUTER JOIN PLLDBA.ACTL t3
ON ( t1.LOTID = t3.LOTID )
INNER JOIN PLLDBA.TRES_RAWDATA t2
ON ( ( t1.TESTOPNO = t2.TESTOPNO ) AND ( t1.REVDATE = t2.REVDATE ) )
WHERE ( ( ( (t1.TESTOPNO LIKE '%JG43%' ) ) AND ( t2.REVDATE >= TO_TIMESTAMP('01Jan2019:18:42:42', 'DDMONYYYY:HH24:MI:SS') ) AND ( t2.ITEMPROMPT IN ( 'ITEM1' , 'MITEM2' , 'ITEM3' , 'ITEM4' ) ) AND ( (t1.RECPID LIKE '%HJ546%' ) ) AND ( (t3.LOTTYPE LIKE '%PT%' ) ) AND ( (t1.PARTID LIKE '%C765G%' ) ) ) )
ORDER BY t2.COMPIDS DESC, t2.REVDATE ASC;";
dt1 = New SQL Query(
connection( cnxstrng ),
queryname( "M32FICD" ),
customSQL( M32FICDSQL )
) << Run Foreground() /*###*/;Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.Zu was hinzufügen @Georg sagte, mein Oracle-Verbindungsstring sieht so aus:
dsn_string = "Driver={Oracle in OraClient12Home1};Dbq=tns_alias_goes_here;UID=username_goes_here;PWD=password_goes_here;";
Beachten Sie, dass der Teil mit der Aufschrift „Oracle in OraClient12Home1“ der Name des Oracle ODBC-Treibers ist.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.@spoikayil Bitte beachten Sie, dass es mehrere Methoden zum Abfragen von Daten aus Datenbanken gibt, die jeweils unterschiedliche Verbindungen erfordern.
Für die .jmp-Abfrage muss die Verbindungszeichenfolge mit „ODBC: …“ beginnen, und für die anderen müssen Sie sie löschen, siehe JSL-Beispiel. Andernfalls erhalten Sie genau den Fehler, den Sie gepostet haben. Früher habe ich einige Zeit gebraucht, um es herauszufinden.
Das Beispiel generiert 3 Tabellen mit unterschiedlichen Methoden.
// Three methods to get data from database via ODBC
Names Default To Here( 1 );
// provide your credentials here (DSN, USER, PWD, DBQ)
cnx_str1 = "ODBC:DSN=__MY_DSN__;UID=__USER__;PWD=__PWD__;DBQ=__MY_DBQ__;";
cnx_str2 = "DSN=__MY_DSN__;UID=__USER__;PWD=__PWD__;DBQ=__MY_DBQ__;";
sql_str = "select * from dual";
//**** 1st method
dt1 = New SQL Query( connection( cnx_str1 ), queryname( "dt_jmpquery" ), customSQL( sql_str ) ) << Run Foreground();
//**** 2nd method
// This fails due to cnx starting with "ODBC:"
// dt2 = open database(cnx_str1, "select * from dual");
// This is ok
dt2 = Open Database( cnx_str2, sql_str, "dt_open_database" );
//**** 3rd method
cnx = Create Database Connection( cnx_str2 );
dt2 = Execute SQL( cnx, sql_str, "dt_execute_SQL" );
Close Database Connection( cnx );
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.Ich hatte Probleme mit dem Microsoft Oracle ODBC-Treiber.Das von Oracle funktioniert allerdings einwandfrei.
Es ist etwas mühsam, aber so habe ich die Verbindungszeichenfolge erhalten:
- Klicken Sie in JMP auf Einstellungen > Tabellen .Stellen Sie sicher ODBC-Verbindungszeichenfolge ausblenden ist deaktiviert.
- Klicke auf Datei > Datenbank > Tabelle öffnen
- Klicke auf Neue Verbindung
- Wenn unter Maschinendatenquelle kein Oracle-ODBC-Treiber aufgeführt ist, klicken Sie auf Neu
- Wählen Sie den entsprechenden Oracle-Treiber aus.Auf meiner Maschine ist es „ Oracle in OraClient 12Home1 "
- Klicken Beenden
- Sie gelangen zu einem Bildschirm zur Oracle ODBC-Treiberkonfiguration
- Wählen Sie den entsprechenden TNS-Dienstnamen und die Benutzer-ID aus.
- Klicken Sie auf Verbindung testen, um die Verbindung auszuprobieren
- Klicken Sie auf OK, OK
- Auf dem Bildschirm „Datenbank öffnen“ wird eine Liste der Schemata angezeigt
- Klicken Sie auf ein Schema und die Tabellen werden angezeigt.
- Klicken Sie auf eine Tabelle und dann auf Offener Tisch
- Für die Tabelle wird ein Programm aufgerufen Quelle .Klicken Sie mit der rechten Maustaste auf das grüne Dreieck und wählen Sie aus Bearbeiten - Das zeigt Ihnen die richtige Verbindungszeichenfolge.
Wie ich schon sagte, es ist mühsam, aber sobald Sie die Verbindungszeichenfolge haben, können Sie loslegen.Vergessen Sie nicht, in den Einstellungen das Kontrollkästchen „ODBC ausblenden“ zu aktivieren.
Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.PS: Ich verwende 32 Bit JMP14.1.0 und mein Oracle-Treiber ist ebenfalls 32 BitBetreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.Danke @pmroz Für Ihr Feedback, ich habe es versucht. Ich habe die Verbindungszeichenfolge in meine JMP-Abfrage kopiert, aber das Skript wird nicht ausgeführt und das Protokoll gibt den folgenden Fehler aus:
[Microsoft][ODBC Driver Manager] Datenquellenname nicht gefunden und kein Standardtreiber angegeben\
Die gleiche Verbindung funktioniert jedoch einwandfrei, wenn ich die JMP-Abfragen ausführe. Was könnte hier los sein?
Meine Verbindungszeichenfolge:
MYDB = create database connection("ODBC:DSN=*****;UID=*****;PWD=*****;DBQ=*****;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;");Betreff: Hilfe bei der Konsolidierung von JMP-Abfragen und -Skripten.Wenn Sie über SQL-Abfragen verfügen, können Sie auf die Verwendung von „SQL ausführen“ umsteigen.So führen Sie zwei Abfragen mit demselben Datumsbereich aus.Beachten Sie, dass die TO_DATE-Funktion Oracle-Syntax hat.
dbc = create database connection("<CONNECTION string="">");
start_date = "01-Jan-2020";
end_date = "30-Apr-2020";
sql1 = evalinsert(
"SELECT m.foo, m.bar
FROM myschema.mytable m
WHERE m.some_date BETWEEN TO_DATE('^start_date^', 'DD-MON-YYYY')
AND TO_DATE('^end_date^', 'DD-MON-YYYY')");
dt1 = execute sql(dbc, sql1);
sql2 = evalinsert(
"SELECT a.field1, a.field2
FROM myschema.another_table a
WHERE a.some_date BETWEEN TO_DATE('^start_date^', 'DD-MON-YYYY')
AND TO_DATE('^end_date^', 'DD-MON-YYYY')");
dt2 = execute sql(dbc, sql2);
close database connection(dbc);
</CONNECTION>