¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?La tabla de datos adjunta tiene límites (LSL/USL) para cada parámetro medido (Corriente, Resistencia) en las columnas respectivas.
Sin cambiar el formato de la tabla de datos, ¿cómo consigo que los límites de cada parámetro se muestren como líneas de referencia, por ejemplo, cuando se traza la mediana frente a PartID (como en el script de la tabla de datos adjunta)?
Una forma en que puedo pensar en hacer esto es guardar el LSL/USL en las propiedades de la columna para cada parámetro, pero necesito ayuda de JSL para esto.
ventanasRe: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?Lo más fácil (y en mi opinión, lo mejor) sería cambiar el formato de la tabla, pero como no se puede hacer eso, las otras opciones serían usar propiedades de columna (esto sería un poco extraño ya que tendría límites para los límites) o un script gráfico. . Primero, tendría que recopilar todos los límites posibles para cada una de las columnas (¿puede haber límites diferentes para las mismas columnas?), el resumen debería funcionar bastante bien para esto y luego, dependiendo de su elección, agregue then como propiedades de columna o use then con escritura gráfica.
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?Esta es la forma en que manejaría tu mesa.Mueve todos los valores USL y LSL a la propiedad de columna para cada una de las columnas, y luego los límites se muestran automáticamente cuando grafica las columnas.

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"} ) ) )
);
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?@txnelson @jthi
Gracias, probaré tu solución ahora. Quería hacer algo similar pero no puedo hacer que funcione la siguiente función. La idea es aplicar esto a un grupo de columnas después de agrupar todas las columnas de parámetros probados. Lo probé para una columna de parámetro probado (Actual) pero no funcionó. Funciona bien cuando se pasan números para límites pero no cuando se pasan variables. ¿Dónde me equivoqué? (Lo intenté con y sin Eval() y 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 );
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?Esto debería solucionar el problema
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
);Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?En lugar de Sustituto , también puedes usar Evaluación (Eval Expr(...Exp())) :
Eval(EvalExpr(dt_ref:colName << Set Property( "Spec Limits", {LSL(Expr(_LSL )), USL(Expr( _USL) ), Show Limits( 1 )} )))Para evaluar previamente los límites de especificaciones _LSL & _USL tienen que estar dentro Expr() y ser evaluado previamente a través de Evaluación Expr() .
Después de hacerlo, se puede evaluar la expresión completa mediante evaluar()
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?@txnelson Gracias. Eval Expr() hace el truco.
¿Cómo cambio las líneas de referencia de especificaciones a discontinuas y cambio el color de la línea discontinua para que diga rojo?
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?Podrías usar la GUI:

Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?o 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 )}Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?@hogi Gracias. Estaba buscando la forma JSL de cambiar una línea sólida a una línea discontinua y el color predeterminado cuando los límites de especificación se definen y guardan en las propiedades de la columna y luego JMP los traza automáticamente (como en la publicación 3 de @txnelson ).
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?Al utilizar la función "Mostrar límites" de los límites de especificación, solo se muestra una línea sólida azul.Si desea mostrar los límites, especificando el color, la etiqueta, el tipo de línea, etc. usando JSL, deberá escribir el código para usar el mensaje
obj << add ref line(......);
capacidades.
Consulte el índice de secuencias de comandos para obtener una descripción y un ejemplo.
Re: ¿Cómo obtener límites de una columna y usarlos para otras columnas a través de JSL?Al principio es un poco "decepcionante": ¿por qué no es posible cambiar el color si uso esta función interesante de "mostrar límites"?
Pero en realidad es posible, con la GUI. Solo usa mostrar límites(1) y vaya a la configuración del eje.
Y por otro lado:
Si desea cambiar el color a través de JSL, el pequeño código adicional para agregar Las líneas mientras cambias el color no te molestan demasiado, ¿verdad?
Se podría pensar en establecer el color/estilo de línea predeterminado en las preferencias.
Totalmente automático, sin JSL, sin cambios manuales, solo líneas como las desee.