如何从 from 列获取限制并通过 JSL 将其用于其他列?所附数据表的各列中的每个测量参数(电流、电阻)都有限值 (LSL/USL)。
在不更改数据表格式的情况下,如何获取每个参数的限制以显示为参考线,例如在绘制中位数与 PartID 时(如所附数据表中的脚本中所示)?
我可以想到的一种方法是将 LSL/USL 保存到每个参数的列属性中,但为此我需要一些 JSL 帮助。
视窗回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?最简单的(在我看来最好的)是更改表格式,但由于你不能这样做,那么其他选项将使用列属性(这会有点奇怪,因为你会有限制)或图形脚本。 首先,您必须收集每个列的所有可能限制(同一列可以有不同的限制吗?),摘要应该对此非常有效,然后根据您的选择添加 then 作为列属性或使用 then与图形脚本。
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?这是我处理你的桌子的方式。它将所有 USL 和 LSL 值移至每列的列属性中,然后在绘制列图表时自动显示限制

Names Default To Here( 1 );
dt = Current Data Table();
colNamesList = dt << get column names( string, numeric );
For Each( {col}, colNamesList,
LSL = Column( col )[(dt << get rows where( :Label == "LSL" ))[1]];
USL = Column( col )[(dt << get rows where( :Label == "USL" ))[1]];
Eval(
Substitute(
Expr(
Column( col ) << set property(
"spec limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _USL_ ), USL,
Expr( _LSL_ ), LSL
)
);
);
// Uncomment the below 2 lines to delete the LSL and USL rows in the table
//dt << select where(:Label == "LSL" | :Label=="LSL");
//dt << delete rows;
Graph Builder(
Size( 570, 578 ),
Variables( X( :partID ), Y( :Current ), Y( :Resistance ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 8 ), Jitter( "None" ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 6 ), Jitter( "None" ) ) ),
Local Data Filter( Add Filter( columns( :Label ), Where( :Label == {"Median"} ) ) )
);
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?@tx尼尔森@jthi
谢谢,我现在就尝试你的解决方案。 我想做类似的事情,但无法使以下功能正常工作。 这个想法是在对所有测试的参数列进行分组后将其应用于列组。 我尝试了一个测试参数(当前)列,但它不起作用。 当传递数字作为限制时工作正常,但在传递变量时则不然。 我哪里出错了(我尝试过不使用 Eval() 和 Expr())。
Names Default To Here( 1 );
setSpecLimits = Function( {dt_ref, colName, _LSL, _USL},
{specLimits},
tmp = Eval( Expr( dt_ref:colName << Set Property( "Spec Limits", {LSL( _LSL ), USL( _USL ), Show Limits( 1 )} ) ) );
Return( specLimits ); //optional
);
////Check
Clear Log();
//test before
specLims = Data Table( "exampleData" ):Current << Get Property( "Spec Limits" ); Show( specLims );
//New values
_LSL = Data Table( "exampleData" ):Current[2]; Show( _LSL );
_USL = Data Table( "exampleData" ):Current[3]; Show( _USL );
dt_ref = Data Table( "exampleData" ); show (dt_ref);
colName = "Current"; Show( colName );
//call function
setSpecLimits( dt_ref, colName, _LSL, _USL );
//test after
specLims = Data Table( "exampleData" ):Current << Get Property( "Spec Limits" ); Show( specLims );
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?这应该可以解决问题
setSpecLimits = Function( {dt_ref, colName, _LSL, _USL},
{specLimits},
tmp = Eval(
eval Expr(
dt_ref:colName << Set Property( "Spec Limits", {LSL( expr(_LSL) ), USL( expr(_USL ) ), Show Limits( 1 )} )
)
);
Return( specLimits ); //optional
);回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?代替代替,您还可以使用评估 (评估 Expr( ...Exp())) :
Eval(EvalExpr(dt_ref:colName << Set Property( "Spec Limits", {LSL(Expr(_LSL )), USL(Expr( _USL) ), Show Limits( 1 )} )))预先评估规格限制_LSL & _USL他们必须在里面表达式 ()并通过以下方式进行预先评估评估表达式() 。
这样做之后,可以通过以下方式评估整个表达式评估()
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?@tx尼尔森谢谢。 Eval Expr() 就可以解决这个问题。
如何将规格参考线更改为虚线并将虚线颜色更改为红色?
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?您可以使用图形用户界面:

回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?或 JSL:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt:height << Set Property("Spec Limits",{LSL( 57 ), USL( 67 )});<BR /><BR /><BR />
gb = dt << Graph Builder(
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
);
specs=dt:height << Get Property("Spec Limits");
LSL=specs["LSL"];
USL=specs["USL"];
report(gb)[ScaleBox(1)] <<{ Add Ref Line( LSL, "Dashed", "Red", "LSL", 1 ),
Add Ref Line( USL, "Dashed", "Red", "USL", 1 )}回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?@hogi谢谢。 我一直在寻找 JSL 方法,当定义规格限制并将其保存到列属性中,然后由 JMP 自动绘制时,将实线更改为虚线和默认颜色(如帖子 3 所示) @tx尼尔森)。
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?使用规格限值的“显示限值”功能,仅显示蓝色实线。如果您想使用 JSL 显示限制、指定颜色、标签、线型等,则需要编写代码来使用该消息
obj << add ref line(......);
能力。
请参阅脚本索引以获取描述和示例
回复:如何从 from 列获取限制并通过 JSL 将其用于其他列?起初,这有点“令人失望”——如果我使用这个很酷的“显示限制”功能,为什么无法更改颜色。
但实际上,这是可能的——通过 GUI。 只需使用显示限制(1)并转到轴设置。
另一方面:
如果您想通过 JSL 更改颜色 - 附加的小代码添加改变颜色的同时线条也不会太心动吧?
人们可以考虑在首选项中设置默认颜色/线条样式。
全自动 - 无需 JSL - 无需手动更改 - 只要您想要的线条即可。