您可能已经阅读了标题为“ 根据分组列而不同的流程规范限制”的博客文章,并认为
该文章向您展示了如何在单个报告窗口中获得基于分组列的能力分析。然而,当你读完这篇文章后,
您可能已经意识到该帖子为您提供了您想要的分析,但为每个阶段提供了单独的控制图。
也许您确实在寻找单相控制图,并在图表上绘制了规格限制......
JMP的一大特色是其灵活的脚本语言。通过使用JMP 脚本语言 (JSL) ,您可以创建所需的图形类型。这篇博客文章详细介绍了生成单相控制图所需的脚本,并在图表上绘制了规格限制。
示例:打印书籍中的文本
在我的博客文章“ 根据分组列而不同的流程规范限制”中,我介绍了一个打印流程的示例。让我们回顾一下这个例子。印刷过程中的变化可能会导致线条变形,包括倾斜、厚度和长度问题。对于这个例子,我们将考虑线的长度。如果行太长,句子可能会超出页面。如果行太短,页面上就会浪费很多空间。
对于这个特定的数据,我们有两种不同的书籍尺寸。精装书宽17.78厘米。平装书宽 13.97 厘米。如果精装书的印刷长度为 16 厘米 +/- 0.2 厘米,则认为行长良好。如果平装书的印刷长度为 12 +/- 0.4 厘米,则认为行长良好。每次印刷时,都会对第一本书和最后一本书进行测量。行长是在每本书中间的指定页面上测量的。

分析
要为此示例创建阶段控制图,请从“质量和过程”菜单中选择“控制图生成器”。将“长度”拖至“Y”。将“类型”拖至“相位”。将“运行”拖至 x 轴。

我们从标题为“ 根据分组列处理不同的规格限制”的博客文章中了解到,我们不能使用规格限制列属性或规格限制命令,因为这些命令适用于整个列(在本例中为长度)。这意味着两个相将具有相同的规格限制,这不是我们想要的。因此,我们必须通过脚本添加这些。
获取控制图脚本
要获取生成此图表的脚本,请从“控制图生成器”旁边的红色小三角中选择“将脚本保存到脚本窗口”。您将获得以下脚本。
Control Chart Builder(
Show Capability( 0 ),
Variables( Subgroup( :Run ), Y( :Length ), Phase( :Type ) ),
Chart( Position( 1 ) ),
Chart( Position( 2 ) ),
SendToReport(
Dispatch(
{},
"Control Chart Builder",
FrameBox,
{DispatchSeg(
TextSeg( 3 ),
{Line Color( "None" ), Fill Color( "None" )}
), DispatchSeg(
TextSeg( 4 ),
{Line Color( "None" ), Fill Color( "None" )}
)}
)
)
);
为了使脚本更加健壮且更易于用于我们的目的,我们将向该脚本添加一些内容。我们在脚本之前添加代码以打开必要的数据表(实际数据和我们稍后将讨论的规格限制表),为脚本分配一个句柄,将脚本指向感兴趣的数据表,并添加一个句柄那个报告。
dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""></CONTROL>
<P> </P>
<P>接下来,我们必须弄清楚如何向现有脚本添加规范限制。</P>
<H3 id="toc-hId--476198926" id="toc-hId--1768170964">H 线命令</H3>
<P>默认情况下,在<A href="https://www.jmp.com/en_us/software/data-analysis-software.html" target="_self" rel="noopener noreferrer">JMP</A>中,规格限制线将添加为参考线。您可以考虑通过 JSL 添加参考线。如果你尝试这样做,你会发现这也不能满足你想要的。与前面提到的方法一样,参考线适用于整个图表,因此会出现在两个阶段(精装本和平装本)。相反,我们可以通过线段为每个相完成单独的规格线。我们要使用的特定线段是 H 线。 H 线命令具有以下形式:</P>
<P> </P>
<CODE class=" language-jsl">H Line( x1, x2, y);
它在 y 处绘制一条从 x1 到 x2 穿过整个框架的水平线。
确定 x1 和 x2 的值
我们可以利用 JMP 已知的信息。控制图已经知道精装本和平装本的 x1 和 x2 是什么,因为它已经在图表上绘制了控制限制线。我们可以使用这些现有的线段来确定 x1 和 x2。
actLineSeg=(rpt[FrameBox(2)]<<XPATH> 0, //如果描述包含单词average actx=Insert(actx , arg(actLineSeg,i)< <GET x="" values=""></GET></XPATH>
<P>在上面的代码中,我们首先找到位置图的线段。接下来,我们获取每个线段的描述。我们创建两个列表 actx 和 actPhase。当描述包含单词“Average”时,行 seg 中的 x 值存储在 actx 中,阶段标签存储在 actPhase 中。</P>
<H3 id="toc-hId-1298808436" id="toc-hId-1717449706">获取 H 线的 y 参数</H3>
<P>您用来获取 y 的方法将取决于您存储此信息的方式。出于本示例和博客文章的目的,我们将假设此信息存储在单独的数据表中,就像博客文章“ <A href="https://community.jmp.com/t5/JMPer-Cable/Process-specification-limits-that-differ-based-on-a-grouping/ba-p/36656" target="_self">根据分组列不同的流程规范限制</A>”中的情况一样。</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="specChange2.png" style="width: 297px;"><span class="lia-inline-image-display-wrapper" image-alt="specChange2.png" style="width: 297px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5995i8FBEFD91C35B15EE/specChange2.png" role="button" title="specChange2.png" alt="specChange2.png" /></span></SPAN></P>
<P> </P>
<P>我们需要将 actPhase 的值(通过之前的脚本获得)与规格限数据表中的“Type”列进行匹配。您的相位变量并不总是被称为“类型”。为了使 JSL 更加通用,以便可以在其他示例中使用,我们可以从控制图生成器报告中获取阶段变量的名称。具体来说,我们可以从图表正上方出现的阶段标签中提取此信息。</P>
<P> </P>
<CODE class=" language-jsl">actPhaseName=(rpt[GraphBuilderBox(1)]<<XPATH></XPATH>
<P>确定规格限表中的相应行后,我们可以从规格限数据表中的 LSL、Target 和 USL 列中获取规格下限、目标和规格上限的值。</P>
<P> </P>
<CODE class=" language-jsl">for(j=1, j<=narg(actx),j++, //for every argument of actx
for(k=1, k<=nrows(dtSpec), k++, //for every row of the specification data table
if(arg(actPhase,j)==Column(dtSpec, actPhaseName)[k],
//if actPhase is equal to Type in the specification table
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "LSL")[k] );
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "Target")[k]);
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "USL")[k] );
);
);
);
图形脚本
我们如何在脚本中使用 H 线? HLine 命令需要包含在图形脚本命令中。图形脚本是我们将图形项目添加到报告窗口内的现有框架的方式。我们将为脚本添加描述,并为规格限制线选择笔颜色。如果需要的话,我们还可以确定网格线顺序和参考线顺序。图形脚本可以通过 SendTo Report 命令发送到控制图构建器窗口。
obj<<SENDTOREPORT></SENDTOREPORT>
<H3 id="toc-hId--1221151498" id="toc-hId-908103080">结论</H3>
<P>将所有这些部分放在一起,我们得到了以下完成的脚本:</P>
<P> </P>
<CODE class=" language-jsl">dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""> 0, //如果描述包含单词average actx=Insert(actx , arg(actLineSeg,i)< <GET x="" values=""></GET></CONTROL>
<P>运行此脚本会产生以下结果。</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><span class="lia-inline-image-display-wrapper" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5996i6790A59F4F9F1592/specchangefinished.png" width="686" height="346" role="button" title="specchangefinished.png" alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary.</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">注意:精装本的规格限制很难看出,因为所有线条都非常靠近。您可以通过界面或 JSL 更改 Y 轴,以便在必要时可以更清晰地看到线条。</SPAN></SPAN></P>
<P>从上图中您可以看到,精装本出现一组规格限制(15.98、16、16.02),平装本出现一组不同的规格限制(11.6、12、12.4)。</P>
<P>该脚本是通用的,因为您可以根据需要拥有任意多个阶段级别,可以将级别命名为您想要的任何名称,并且可以将阶段列命名为您想要的任何名称。但是,该脚本确实要求将您的规格限存储在单独的数据表中。规范限制数据表要求每个相级别有 1 行。阶段级别名称必须与 CCB 报告中显示的级别名称匹配。数据表必须包含标题为 LSL、Target 和 USL 的列,分别存储规格下限、目标和规格上限。</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><span class="lia-inline-image-display-wrapper" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><img src="https://us.v-cdn.net/6038925/uploads/images/6004i22873971DFC74A41/cartoon_thought_bubble_3.jpg" role="button" title="cartoon_thought_bubble_3.jpg" alt="cartoon_thought_bubble_3.jpg" /></span></SPAN></P>