Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksVideo 1 Datenzugriff von @Georg
Kommentare:
- Auch wenn die Dokumentation noch immer unzureichend ist und die Verwendung etwas kompliziert sein kann, würde ich Ihnen dennoch empfehlen, es zu verwenden, da es die bevorzugte Methode ist und Konnektoren unterstützt (und dies auch tut).
- Es gibt auch ein „Symbol“ für queryResult, auf das Sie nach Abschluss des Laufs zugreifen können. Dieses sollte auf die resultierende Tabelle verweisen
- Verwenden Sie immer entweder < << run foreground and do not rely on which is determined by user preferences< pan>

Video 2: JMP-Röstung für @jthi
Kommentare:
- Ich würde empfehlen, im Skriptindex nachzuschauen, wie der Befehl „Neues Fenster“ in verschiedenen Modi funktioniert. Dort gibt es Beispiele für die meisten Varianten (Modal, Bericht, …).
- Stimmt, da gibt es Beispiele. Nicht immer so nützlich, wie ich es mir wünschen würde. Fast jedes Mal, wenn ich NewWindow() verwende, möchte ich etwas tun, für das es kein ähnliches Beispiel gibt. Beim Durchsuchen der Community habe ich wirklich hilfreiche Beispiele für NewWindow() gefunden.
- Bitte fügen Sie auch eine Möglichkeit hinzu, Beispiele hinzuzufügen. Es gibt sehr nützliche Beispiele in der Community. Ich denke, es macht keinen Sinn, den Scripting Index mit allen Beispielen zu überfluten. Aber es würde uns sehr helfen, wenn wir die Möglichkeit bekämen, UNSEREM Scripting Index nützliche Beispiele hinzuzufügen.
- Hier ist der Anfang des Wunschlisteneintrags:
Video 3: Tipps und Tricks von @jthi
Post für Vorschläge:
Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksMein Material im Anhang
Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksBravo! Es ist erstaunlich, wie diese Sitzungen seit ihrer Einführung im Jahr 2023 weiterhin Quellen für sofort nützliches Wissen sind.
Ich frage mich, ob es eine Meinung zu SQL innerhalb der JSL-Funktion Open Database() gibt. Wir verwenden eine Implementierung von Googles BigQuery für Data Warehousing. Innerhalb von BigQuery ist es möglich, SQL-Abfragen zu entwickeln und zu debuggen, die wie unten gezeigt direkt in Open Database() kopiert und eingefügt werden können. Die Möglichkeit, SQL-Schlüsselwörter oder Zeitstempel in das SQL einzufügen, erscheint ebenfalls sehr nützlich.
Names Default to Here(1);
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
dt = Open Database( "DSN_name", "
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP("|| start ||") AND TIMESTAMP("|| stop ||")
AND tagname IN(
'tag_1',
'tag_2'
)"
);
Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksIch würde vorschlagen, eine neue SQL-Abfrage zu verwenden (ich weiß, das ist ziemlich schrecklich, aber es ist die bevorzugte Methode), eine SQL-Vorlage zu verwenden und sie dann mit Eval Insert auszuwerten. Beispiel unten:
Names Default to Here(1);
MY_CONNECTOR = "ODBC:...";
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
sql_template = "\[
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP(¤start¤) AND TIMESTAMP(¤stop¤)
AND tagname IN(
'tag_1',
'tag_2'
)
]\";
sql_str = Eval Insert(sql_template, "¤");
// Write("\!N", sql_str);
obj = New SQL Query(
Connection(MY_CONNECTOR),
Custom SQL(sql_str),
Query Name("mytable")
);
dt = obj << Run Foreground();
Write();
Sie können eine ähnliche Vorlagenidee für andere Methoden als „Neue SQL-Abfrage“ verwenden (wie etwa „Datenbank öffnen()“).
Ich verwende das Sonderzeichen „¤“ in meinem Eval Insert(), da der Standardwert „^“ beispielsweise in regulären Ausdrücken häufig vorkommt und bei der Auswertung Probleme verursacht.
Bearbeiten: Einige Tippfehler behoben, Sprache verbessert und Kommentar zu „¤“ hinzugefügt
Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksVielen Dank @jthi für die sehr nützliche Präsentation! Hat mich dazu inspiriert, ein dynamisch erstelltes modales Fenster neu zu schreiben, um die Verwendung von Zeichenfolgen zu vermeiden und Ihre XPath-Methode zum Extrahieren von Ergebnissen zu verwenden.
Ich habe jedoch eine Sache gefunden, bei der ich das Parsen von Zeichenfolgen nicht vermeiden konnte – ich möchte XPath-Befehle in das modale Fenster einfügen, aber es muss dynamisch erstellt werden.
Ich möchte ein Kontrollkästchen erstellen, das steuert, ob ein Textbearbeitungsfeld aktiviert ist oder nicht. Ich weiß jedoch nicht, wie viele Textbearbeitungsfeld-/Kontrollkästchenpaare es geben wird:
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET>
Is there a way of doing this so I don't need to parse JSL strings? Or is there a better way to do this modal recode?
<BR /><P>Mein vollständiger Code ist hier:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">Mehr anzeigen...</A><NOSCRIPT>(Zum Lesen markieren)</NOSCRIPT><DIV class="lia-spoiler-border"><DIV class="lia-spoiler-content"><PRE><CODE class=" language-jsl">Names Default To Here( 1 );
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function( {dt, col},
{default local},
Summarize( dt, orig_vals = By( col ) );
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">Namen werden hier standardmäßig verwendet (1); // Funktion zum Durchführen einer einfachen Neucodierung von Spalten direkt. // Verwendet einen modalen Dialog, kann also als Teil eines größeren Skripts oder Workflows verwendet werden. modal_recode = Funktion ({dt, col}, {Standard lokal}, Zusammenfassen (dt, orig_vals = Nach (col)); rc_list = Lineup Box (N Col (3)); rc_list << append (Text Box ("Aktuell", < <SET font=""></SET></DIV></DIV>Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksIch würde in diesem Fall nicht << XPath verwenden, sondern dies << prev sib. Ich nehme an, das hier macht, was Sie suchen:
Anstatt also
Eval(
Parse(
"\[rc_list << append( check box( "", <<SET function=""></SET>
<P>du könntest so etwas machen</P>
<CODE class=" language-jsl">rc_list << Append(Check Box("", << Set Function(function({this},
(this << prev sib) << Enabled(this << get);
))));
Vollständiger Code
Mehr anzeigen...
Names Default To Here(1);
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function({dt, col},
{default local},
Summarize(dt, orig_vals = By(col));
rc_list = Lineup Box(N Col(3));
rc_list << append(Text Box("Current", <<SET font=""></SET>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">Namen werden hier standardmäßig verwendet (1); // Funktion zum Durchführen einer einfachen Neucodierung von Spalten direkt vor Ort. // Verwendet einen modalen Dialog, kann also als Teil eines größeren Skripts oder Workflows verwendet werden. modal_recode = Function({dt, col}, {default local}, Summarize(dt, orig_vals = By(col)); rc_list = Lineup Box(N Col(3)); rc_list << append(Text Box("Current", < <SET font=""></SET></DIV></DIV>
<P>Wenn Sie dafür wirklich XPath verwenden möchten, können Sie den Index dynamisch berechnen. Sie können beispielsweise alle CheckBoxBoxes abrufen und dann Contains verwenden <EM>,</EM> um den Index abzurufen und diesen Index dann zu verwenden.</P>
<CODE class=" language-jsl">idx = Contains(rc_list << XPath("//CheckBoxBox"), this); Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksVielen Dank, @jthi ! Der Ansatz des vorherigen Geschwisters funktioniert bei mir. Ich muss meine natürliche Denkweise darüber ändern, wie JMP-Fenster aufgebaut sind und wie sie manipuliert werden können.
Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksIch habe meine Meinung oft geändert und tue das immer noch von Zeit zu Zeit. Ich glaube, ich verwende im Allgemeinen je nach Situation vier verschiedene Methoden (und Kombinationen davon):
- XPath
- Wenn ich Ergebnisse von mehreren Dingen auf Knopfdruck sammeln möchte
- Sammeln Sie die Verweise auf die Liste/das assoziative Array
- Manchmal ist es einfach, den Verweis auf ein Objekt zu sammeln
- << Funktion festlegen (Funktion (diese ()))
- Normalerweise um einige Aktionen zu steuern, wie in Ihrem Fall enable(0/1). Normalerweise aktualisiere ich damit keine Variablenwerte
- Referenzauswertung
- Keine konkreten Beispiele, vielleicht wenn es aus irgendeinem Grund lästig wird, den „Pfad“ mit XPath zu erstellen oder dies zu verwenden und ich die Referenz trotzdem brauche (manchmal in Klassen oder Funktionen, die ein neues Fenster zurückgeben)
Beispiel einer Referenzauswertung
rc_list << append(teb = Text Edit Box(Char(orig_vals[i]), <<ENABLED></ENABLED>
<BR />
<BR />Betreff: Aufnahmen und Dateien: Scripters Club zu Datenzugriff, JMP Roasting und Tipps und TricksIch kann für eine einzige Antwort nur eine begrenzte Anzahl an Lob aussprechen. Vielen Dank, @jthi , wirklich.