创建自定义报告在我们的在线课程中了解更多信息
视频、练习和测验。
按任意顺序选择并学习课程。
JMP 脚本语言简介

在此演示中,我们将使用预先编写的脚本来了解如何制作自定义报告。因此,在课程日志中,在部分中,有一个名为 NOx 数据的脚本,用于记录氮氧化物数据。我们有六种不同的制剂。然后,我们记录了六种不同制剂的每个重复的氮氧化物浓度日志。因此,该脚本是预先编写的。在课程日志中,它被称为自定义 NOx 报告脚本。我将逐个运行它。但实际上我想运行整个脚本,这样我们就可以在查看脚本的每个部分的作用之前看到最终结果。所以我将运行整个脚本。此脚本确实会创建一个用于图形生成器的摘要表。我们将介绍它,因此我们不仅仅是使用原始数据。但自定义报告是一个选项卡式报告。在第一个选项卡上,称为 %CV,我们有实时图形生成器平台。因此,这个红色三角形是我在图形生成器中看到的典型红色三角形菜单。然后,我们计算出每个级别的变异系数或 %CV。在这里,我们有一个由脚本创建的自定义红色三角形菜单,允许我指定报告中数字列的小数位数。在第二个选项卡“背景信息”中,我获得了每个级别的原始数据、用于计算变异系数的平均值和标准差以及计算值。如果我在红色三角形菜单中进行了选择——实际上我只需这样做。在 %CV(前面的选项卡)中,我将转到红色三角形并选择两位小数。脚本正在查看此报告中的所有数字列框。让我们来看看它是如何构建的。脚本所做的第一件事是将单向消息发送到原始数据表,其中包含氮氧化物的对数——Y 角色中氮氧化物浓度的对数和 X 角色中的制剂。我需要计算变异系数的是平均值和标准差报告表。所以我请求将其打开。我会提到,有很多方法可以从 JMP 获得变异系数,而无需手动计算。但我们再次说明将值作为矩阵获取并使用这些矩阵计算的一些想法。所以我将运行几行,这是我请求的表格的单向输出。现在,在行中,我们看到了获取报告层的其他语法。使用此语法的一个优点是,如果我不需要该报告中的所有内容,我可以简单地请求我想要的表格的大纲项目(在本例中为平均值和标准差)。这样,当我访问显示框时,我可以稍微简化我的代码。我将把它存储在变量 ob 中。在这里,我们的惯例只是使用大纲框的缩写。当我将鼠标悬停时,您会看到它已经存储了一个值,因为我已经运行了整个脚本。但我将重新分配它。现在,行和正在检索水平列,然后是均值和标准差列。对于水平,我根本不需要操纵此列中的值。我只想在自定义报告中的估计表和背景信息(所有结果表)中使用它。因此,对于我只需要副本的显示框,我可以做的一件巧妙的事情是发送消息“克隆框”。即使我关闭了单向窗口,这也只会将此显示框的克隆存储在 Levels 中。因此,我们使用 String Col Box 对变量 ob 进行下标。现在,我们再次使用列标题,当然这样做不会有什么坏处。但是因为我们只存储了一个显示框,或者将对它的引用存储在 ob 中,所以使用带有索引值的简单语法很容易。所以我将运行行,因此 Levels 现在存储了一个显示框,特别是您可以在日志中看到的字符串列框。行我需要在计算中使用平均值和标准差。所以我不能简单地复制它们。我需要以矩阵的形式获取这些值,并将它们存储在变量 mMeans 或均值矩阵中。您可以在日志中看到,或者如果您将鼠标悬停在 mMeans 上,这些值是什么。标准差在行中也是一样。所以我运行它,再次,你可以——我会把这个弄小一点——你可以在日志中看到这些值。行创建一个名为 mCVs 的变量,这只是变异系数的计算。这是一个相对的变异度量,我们将标准差除以平均值,然后乘以它。所以我将运行行,所以现在我有了变异系数。此时,我不需要平台的任何其他东西。所以我将发送消息到 ow——这将发送到分析层对象引用——以关闭该窗口。我总是建议,当您的脚本可以关闭窗口时,无论是分析还是不再需要的数据表,请继续让脚本关闭这些窗口。因为如果我们不再需要它们打开,我们就不需要它们占用内存。现在,对于下一步,我想在我的自定义报告中使用图形生成器。图形生成器目前不计算变异系数作为其摘要统计数据之一。因此,解决方法是使用变异系数创建此摘要表,该变异系数内置在“摘要表”命令中,然后将其用作图形生成器的基础。因此,在我获得摘要表之前,我想关闭运行整个脚本时显示的那个表。当我关闭它时,我会收到警告,有另一个窗口打开了,所以我要说,继续关闭所有窗口。这会立即从我的自定义报告中移除图形生成器。因此,此时,没有任何理由让此示例自定义报告保持打开状态。我们将在继续执行脚本时重新创建它。所以我也会关闭它。所以行将“摘要”作为消息发送到原始数据表,我们在那里按准备分组。统计数据将是变异系数。所以我将运行行现在,我拥有构建自定义报告所需的一切。所以我们使用新窗口。我将由此创建的显示框存储在变量 nw 中,以便我可以与它通信。我将新窗口命名为自定义报告,然后我想编写这些选项卡的脚本。所以我们指定选项卡框。然后选项卡的数量取决于您为其提供的选项卡页框参数数量。所以在这种情况下,我们将有。Tab Page Box 的第一个参数是标题。所以第一个叫做 %CV。然后,H List Box 给我一个水平列表框,它将包含图形生成器。所以我实际上是实时启动它。这就是我在此窗口中获取此实时平台的方法,方法是让该启动仅发生在显示框中。这是我可能从交互式创建图形生成器并将其发送到汇总表中获取的语法。然后,我在 H 列表框中排列的另一项是大纲框,称为估计值,它将具有包含存储在级别中的字符串列框的表格框。我的脚本创建一个带有 %CV 值的数字列框。第二个选项卡页面框是背景信息,使用大纲框将其标记为所有结果。在大纲框中,表格框水平排列四个数字列框。所以我要把它弄高一点,这样我就可以确保我抓取我想要的线条,这些线条贯穿整个过程,我将运行该部分。所以这还不完整。这是我的自定义报告的起点。我想我现在可以将脚本窗口缩小一点,这样我们就可以并排看到两者。因此,默认情况下,Graph Builder 没有一条线,所以这是我想添加的内容之一。我想调整它的大小,因为我不需要这么大的图表。我想将红色三角形菜单添加到估算大纲项中。请注意,在脚本中,当我在自定义报告的第一个选项卡上创建估算的大纲框时,我将结果存储在 ob 中。这是我之前从单向平台获取平均值和标准差时使用的变量名。所以在这里,我再次使用缩写并覆盖该值,因为我不需要以前的值。因此,如果我现在向下滚动以查看脚本的其余部分,我会向存储在 ob 中的显示框(即估算大纲框)发送一条消息“设置菜单脚本”。并且设置菜单脚本将菜单项列表作为其参数,该列表与选择该菜单项时执行的表达式交替。因此,表达式只是循环遍历报告中的数字列框并设置格式。我们有一个字段宽度,即可以显示的最大字符数——然后是小数位数。因此,根据我们选择的红色三角形菜单选项,确定将执行哪些表达式。所以我要运行行,在自定义报告中,您现在看到我们有红色三角形菜单。行将更改图形生成器中的框架框的大小。如果我转到——我将右键单击“披露”按钮,然后在“编辑”下选择“显示树结构”——我可以向下滚动。当您查看整个报告时,这里有很多构造函数,我们在编写自己的脚本时不会使用这些构造函数。但我向下滚动。好的,这是 PictureBox,再向下滚动一些,这是标题,再向下滚动一些。您可以将鼠标悬停以查看轴框。最后,我看到了 FrameBox,所以我可以看到这就是我想要调整大小的东西。当您熟悉平台时,您可能不需要查看树结构。因此,我使用行下标新窗口并发送消息“Frame Size”,以像素为单位,然后我将继续运行行,这样就调整了 Graph Builder 框架框的大小。现在,您可以再次使用脚本索引来查看不同显示框可以接收哪些类型的消息。因此,如果我转到“帮助”菜单并选择“脚本索引”,我可以从“所有类别”更改为“显示框”,然后向下滚动以找到 FrameBox 并查看可以发送到它的消息。我要关闭脚本索引。我们想要做的另一件事是,在 AxisBox 上,我们想要添加一条参考线。同样,如果我不熟悉 Graph Builder 的显示树结构,我会使用 - - 如果我不太熟悉 Graph Builder 的显示树结构,我会查看该树结构窗口。在某些平台上是垂直轴。在某些平台中,它是水平的。在本例中,它是水平轴。我发送消息以添加参考线。这里的参数是您希望参考线位于什么值?我想要什么样式的线?我想要实线。颜色?我会选择黑色。第四个参数是轴上的标签。因此,只要有一个空字符串,我们就表示我们不需要标签。事实上,只要我有这个逗号来告诉 JMP 这是第五个参数,而不是第四个参数,我就可以删除它。如果我没有这个逗号,那么 JMP 会用一个来标记轴。但是因为我把逗号放在那里,JMP 理解这是线宽,而不是标签。所以我要运行 line 然后绘制我的参考线。然后,这个脚本的最后一部分是将“Save Journal”发送到存储在 nw 中的显示框,并将其命名为 Custom CV Report.jrn。现在,您的脚本可能到此结束,生成此报告,其中包含实时图形生成器窗口和红色三角形菜单,供用户交互。事实上,这次我将继续选择一位小数。在某些情况下,您可能还希望将该报告保存为日志。当您这样做时,您将丢失该红色三角形菜单。您的图形生成器将不再是实时报告。但这里的最后一个选项显示了如何使用“保存日志”消息将自定义报告保存为日志。因此,在此脚本中,我们启动了分析层。我们检索了报告层对象,然后获取了我们需要的该报告层的元素,无论是副本还是操作矩阵。我们为想要使用的平台创建了一个单独的数据表,然后使用新窗口创建自定义报告,在本例中,除了存储在级别中的字符串列框和各种数字列框之外,还有选项卡、水平列表框和大纲框作为我们的显示框。然后,我们了解了如何向该自定义报告的组件发送消息。