录音和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容视频 1 来自@Georg的数据访问
评论:
- 尽管文档仍然缺乏,使用起来可能有点混乱......我仍然建议您使用它,因为它是首选方法,并且将(并且确实)支持连接器
- 您还可以在运行完成时访问 queryResult“符号”,它应该是结果表的引用
- 总是使用 < << run foreground and do not rely on which is determined by user preferences< pan>

视频 2:JMP Roasting fro, @jthi
评论:
- 我建议查看脚本索引,了解新窗口命令如何在不同模式下运行良好,大多数变体都有示例(模态、报告等)。
- 同意,那里有例子。但并不总是像我希望的那样有用。几乎每次我使用 NewWindow() 时,我都想做一些没有类似例子的事情。我在搜索社区时找到了非常有用的 NewWindow() 示例。
- 还请添加添加示例的可能性。社区中有很多非常有用的示例。我认为将所有示例都塞满脚本索引是没有意义的。但如果我们有机会将有用的示例添加到我们的脚本索引中,这将对我们大有帮助。
视频 3: @jthi的提示和技巧
发布建议:
回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容附上我的材料
回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容太棒了!令人惊讶的是,自 2023 年成立以来,这些会议一直都是即时有用的知识来源。
我想知道 Open Database() JSL 函数中是否有关于 SQL 的意见?我们正在使用 Google 的 BigQuery 实现进行数据仓库。在 BigQuery 内部,可以开发和调试 SQL 查询,这些查询可以直接复制粘贴到 Open Database() 中,如下所示。将 SQL 关键字或时间戳连接到 SQL 中的可能性也非常有用。
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'
)"
);
回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容我的建议是使用新 SQL 查询(我知道这很糟糕……但这是首选方法)并利用 SQL 模板,然后使用 Eval Insert 对其进行评估。示例如下:
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();
您可以将类似的模板思想用于除新 SQL 查询之外的其他方法(例如打开数据库())。
我在 Eval Insert() 中使用特殊字符“¤”,因为默认的“^”在 Regex 等中很常见,它会在评估期间引起问题。
编辑:修正了一些拼写错误,改进了语言并添加了关于“¤”的评论
回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容感谢@jthi的精彩演示!启发我重写动态创建的模式窗口以避免使用字符串,并使用您的 XPath 方法提取结果。
我确实发现了一件无法避免解析字符串的事情——我想在模态窗口内包含 XPath 命令,但它需要动态创建。
我想创建一个复选框来控制文本编辑框是否启用,但我不知道会有多少个文本编辑框/复选框对:
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>我的完整代码在这里:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">查看更多...</A><NOSCRIPT>(突出显示以阅读)</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">名称默认为此处(1);//用于执行简单的就地列重新编码的函数。//使用模态对话框,因此可以用作更大脚本或工作流的一部分。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>回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容在这种情况下,我不会使用 << XPath,而是使用这个 << prev sib。我认为这符合您的要求:
因此,
Eval(
Parse(
"\[rc_list << append( check box( "", <<SET function=""></SET>
<P>你可以做这样的事情</P>
<CODE class=" language-jsl">rc_list << Append(Check Box("", << Set Function(function({this},
(this << prev sib) << Enabled(this << get);
))));
完整代码
查看更多...
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">名称默认为此处 (1); // 函数用于执行简单的就地列重新编码。 // 使用模态对话框,因此可以用作更大脚本或工作流的一部分。 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>如果您确实想为此使用 XPath,则可以动态计算索引。例如,您可以获取所有 CheckBoxBox,然后使用<EM>Contains</EM>来获取索引,然后使用该索引</P>
<CODE class=" language-jsl">idx = Contains(rc_list << XPath("//CheckBoxBox"), this); 回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容谢谢@jthi !以前的同胞方法对我有用。我需要改变我对 JMP 窗口的构造方式及其操作方式的自然思考方式。
回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容我曾多次改变自己的想法,现在仍会时不时地改变。我认为我通常会根据情况使用四种不同的方法(以及这些方法的组合):
- XPath
- 收集对列表/关联数组的引用
- << 设置函数(function(this()))
- 通常用于控制某些操作,例如您例子中的启用(0/1)。我通常不会用这个更新任何变量值
- 参考评估
- 没有具体的例子,也许由于某种原因用 XPath 构建“路径”或使用它变得烦人而我仍然需要引用(有时在返回新窗口的类或函数中)
参考评估示例
rc_list << append(teb = Text Edit Box(Char(orig_vals[i]), <<ENABLED></ENABLED>
<BR />
<BR />回复:记录和文件:Scripters Club 上有关数据访问、JMP Roasting 和技巧与窍门的内容对于一个回复,我只能给出这么多的赞。真的谢谢你, @jthi 。