Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.Ich habe vor kurzem angefangen, jmp zu verwenden, um Fertigungsdaten direkt in jmp-Tabellen zu importieren und sie zu analysieren.
Typischerweise besteht meine Anforderung darin, die Daten für jeden Prozessschritt im Herstellungsprozess für alle verarbeiteten Chargen zu extrahieren und daraus Diagramme zu erstellen.
Also habe ich damit begonnen, jmpqueires für jeden der Prozesse zu erstellen - und oft möchte ich den Prozesscode sowie das Datum, von dem ich die Extraktion haben möchte, als Eingaben für die Abfrage angeben.
Alle meine jmpqueries haben daher folgende 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, wie ich es zum Zeichnen von Diagrammen möchte. Dies zwingt mich, eine neue Tabelle aus der Tabelle zu erstellen, die mit der Extraktion der ursprünglichen Abfrage herauskommt.
Also, alle meine jmpqueries erzeugen am Ende zwei Tabellen. Ein Beispiel ist unten gezeigt;

Das hat ziemlich gut funktioniert, bis jetzt möchte ich damit beginnen, diese Abfragen zu konsolidieren, indem ich verschiedene Tabellen verbinde, die von meinen vielen verschiedenen jmp-Abfragen generiert wurden.
Also fange ich an, das folgende Skript zu schreiben, das geht:
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(.
.
.
.
Nun, hier sind die Dinge, bei denen ich gerne etwas Hilfe hätte; weil ich nicht ganz die erwartete Antwort bekomme.
- Erstens hat jede Abfrage die Datumsaufforderung, also muss ich warten und das Datum angeben und dazwischen mehrmals auf OK klicken - wie kann ich die Abfragen so ändern, dass das erste Datum, das ich gebe, genommen und für alle nachfolgenden jmp-Abfragen verwendet wird?
- Obwohl ich die Tabellen öffne, die ich nicht als Privat sehen möchte, werden sie trotzdem 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?
SkripterstellungBetreff: Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.@pmroz @Georg Danke Leute!!
Das Einschließen der Abfrage in \[ macht den Trick für das zweite Problem.
Betreff: Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.Es ist schwierig, SQL in JSL zu entwickeln - wie @Georg Erwähnungen verwenden ein Tool wie SQL Developer oder PL/SQL Developer.
Ich habe die entwickelt log_execute_sql Funktion vor ein paar Jahren - es ist im Dateiaustausch gepostet: Fehler beim Trapping für Oracle ODBC SQL
Das ist für uns zu einer unschätzbaren Hilfe geworden, um SQL in JSL zu debuggen.
Betreff: Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.@pmroz Vielen Dank für Ihren Vorschlag mit allgemeinem Zitat \[ \], dies ist eine andere Möglichkeit, an die ich nicht einmal gedacht habe.
Sofern es nicht so funktionieren könnte, mag ich persönlich keine Bindestriche in Namen und doppelte Anführungszeichen in SQL …, weil ich mich deswegen … in der Vergangenheit sehr gequält habe.
Betreff: Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.Der Fehler liegt daran, dass Sie versuchen, die Spaltenüberschrift mit einfachen Anführungszeichen festzulegen.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 zuzulassen.
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 den AS-Befehl nicht und ändern Sie stattdessen den Spaltennamen in JSL.Sie sollten nicht müssen - ich verwende diese Syntax die ganze Zeit ohne Probleme.
Betreff: Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.@spoikayil , Sie sind auf dem richtigen Weg, die Verbindung scheint in Ordnung zu sein.
Ihr Fehler ist ein SQL-Fehler, der ODBC-Treiber teilt Ihnen mit, dass vor Ihrer „from“-Anweisung in der SQL ein Fehler aufgetreten ist. Ich denke also, es gibt ein Problem mit "-" in Ihrem Spaltennamen 'M32-FICD-DATE', auch wenn es in Anführungszeichen steht. Sie erhalten denselben Fehler, wenn in der select-Anweisung ein Doppelpunkt (,) fehlt. Verwenden Sie niemals "-" in Namen und niemals doppelte Anführungszeichen (wie Sie bereits erwähnt haben).
Das Schreiben/Entwickeln von SQL-Abfragen in JMP (Skriptfehler) ist sehr schwierig, da Sie leicht Syntaxfehler wie hier machen. Und es gibt noch viel mehr Probleme mit SQL in Skripten, einige von ihnen können Sie sogar nicht sehen (einige versteckte Zeichen …). Obwohl ich mittlerweile ein erfahrener SQL-Writer bin, verwende ich immer ein anderes Tool wie SQL Developer .. zum Schreiben von SQL. Mit JMP ist es meiner Meinung nach nicht möglich, reines SQL zu schreiben, zumindest nicht für komplexe Abfragen. Aber natürlich können Sie den grafischen Abfragegenerator für einfache Abfragen verwenden.
Etwas besser sieht es aus, wenn Sie "Run Foreground()" durch "Modify()" ersetzen, dann bekommen Sie den 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, dass die Einstellungen wie von pmroz vorgeschlagen wurden, und dann Methode 1 ausprobiert, die Georg empfohlen hatte - die Verbindungszeichenfolge und die SQL-Abfrage separaten 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 hatte.
Ich erhalte jedoch einen neuen Fehler wie unten; und ich bin mir nicht sicher, ob das an einer schlechten 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, 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, meine Oracle-Verbindungszeichenfolge 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 irgendwie unterschiedliche Verbindungen benötigen.
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. Sonst bekommst du genau den Fehler den du gepostet hast. Ich habe früher einige Zeit gebraucht, um das 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.Der von Oracle funktioniert aber gut.
Es ist ein bisschen langweilig, aber so habe ich die Verbindungszeichenfolge bekommen:
- Klicken Sie in JMP auf Einstellungen > Tabellen .Vergewissere dich ODBC-Verbindungszeichenfolge ausblenden ist ungeprüft.
- Klicke auf Datei > Datenbank > Tabelle öffnen
- Klicke auf Neue Verbindung
- Wenn Sie keinen Oracle ODBC-Treiber sehen, der unter Machine Data Source aufgeführt ist, klicken Sie auf Neu
- Wählen Sie den entsprechenden Oracle-Treiber aus.Auf meiner Maschine ist es " Oracle im OraClient 12Home1 "
- Klicken Fertig
- Sie gelangen zu einem Oracle ODBC-Treiberkonfigurationsbildschirm
- 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
- Der Bildschirm Database Open Table zeigt eine Liste mit Schemas
- Klicken Sie auf ein Schema und Tabellen werden angezeigt.
- Klicken Sie auf eine Tabelle und dann auf Offener Tisch
- Die Tabelle wird ein Programm namens haben Quelle .Klicken Sie mit der rechten Maustaste auf das grüne Dreieck und wählen Sie es aus Bearbeiten - das zeigt Ihnen die richtige Verbindungszeichenfolge.
Wie ich schon sagte, langweilig, aber sobald Sie die Verbindungszeichenfolge haben, können Sie loslegen.Vergessen Sie nicht, das Kontrollkästchen ODBC Hide in den Einstellungen 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 auch 32-BitBetreff: Hilfe bei der Konsolidierung von jmp-Abfragen und -Skripten.Vielen Dank @pmroz für Ihr Feedback, ich habe dies versucht. Ich habe die Verbindungszeichenfolge in meine jmpquery 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 jmpqueries 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 die SQL-Abfragen haben, können Sie zur Verwendung von SQL ausführen wechseln.So führen Sie zwei Abfragen mit demselben Datumsbereich aus.Beachten Sie, dass die TO_DATE-Funktion Oracle-Syntax ist.
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>