Comment obtenir les limites de la colonne et les utiliser pour d'autres colonnes via JSL ?Le tableau de données ci-joint comporte des limites (LSL/USL) pour chaque paramètre mesuré (courant, résistance) dans les colonnes respectives.
Sans changer le format de la table de données, comment puis-je afficher les limites de chaque paramètre sous forme de lignes de référence, par exemple lorsque la médiane est tracée par rapport à PartID (comme dans le script de la table de données ci-jointe) ?
Une façon de procéder consiste à enregistrer le LSL/USL dans les propriétés de la colonne pour chaque paramètre, mais j'ai besoin de l'aide de JSL pour cela.
les fenêtresRe : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?Le plus simple (et à mon avis le meilleur) serait de changer le format du tableau, mais comme vous ne pouvez pas le faire, les autres options utiliseraient les propriétés des colonnes (ce serait un peu bizarre car vous auriez des limites pour les limites) ou un script graphique. . Vous devrez d'abord collecter toutes les limites possibles pour chacune des colonnes (peut-il y avoir des limites différentes pour les mêmes colonnes ?), le résumé devrait très bien fonctionner pour cela, puis en fonction de votre choix, ajoutez then comme propriétés de colonne ou utilisez then avec script graphique.
Re : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?Voici la façon dont je gérerais votre table.Il déplace toutes les valeurs USL et LSL dans la propriété de colonne pour chacune des colonnes, puis les limites sont automatiquement affichées lorsque vous représentez graphiquement les colonnes.

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 : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?@txnelson @jthi
Merci, je vais essayer votre solution maintenant. Je voulais faire quelque chose de similaire mais je n'arrive pas à faire fonctionner la fonction suivante. L'idée est d'appliquer cela à un groupe de colonnes après avoir regroupé toutes les colonnes de paramètres testées. Je l'ai essayé pour une colonne de paramètres testés (actuel) mais cela n'a pas fonctionné. Fonctionne bien lorsque des nombres sont transmis pour des limites, mais pas lorsque des variables sont transmises. Où me suis-je trompé (j'ai essayé sans Eval() et 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 : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?Cela devrait résoudre le problème
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 : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?Au lieu de Remplaçant , vous pouvez aussi utiliser Eval (Eval Expr( ...Exp())) :
Eval(EvalExpr(dt_ref:colName << Set Property( "Spec Limits", {LSL(Expr(_LSL )), USL(Expr( _USL) ), Show Limits( 1 )} )))Pour préévaluer les limites des spécifications _LSL & _USL ils doivent être à l'intérieur Expr () et soyez pré-évalué via Éval Expr() .
Après cela, on peut évaluer l'expression entière via Éval()
Re : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?@txnelson Merci. Eval Expr() fait l'affaire.
Comment puis-je changer les lignes de référence des spécifications en pointillés et changer la couleur des lignes pointillées en rouge ?
Re : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?Vous pouvez utiliser l'interface graphique :

Re : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?ou 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 : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?@hogi Merci. Je cherchais le moyen JSL de changer la ligne continue en ligne pointillée et la couleur par défaut lorsque les limites de spécifications sont définies et enregistrées dans les propriétés de colonne, puis tracées automatiquement par JMP (comme dans le message 3 de @txnelson ).
Re : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?En utilisant la fonction « Afficher les limites » des limites de spécifications, affiche uniquement une ligne bleue continue.Si vous souhaitez afficher les limites, en précisant la couleur, l'étiquette, le type de ligne, etc. en utilisant JSL, vous devrez écrire le code pour utiliser le message
obj << add ref line(......);
capacités.
Voir l'index des scripts pour une description et un exemple
Re : Comment obtenir les limites d'une colonne et les utiliser pour d'autres colonnes via JSL ?Au début, c'est un peu "décevant" - pourquoi n'est-il pas possible de changer la couleur si j'utilise cette fonctionnalité intéressante "afficher les limites".
Mais en réalité, c'est possible - avec l'interface graphique. Utilisez simplement afficher les limites(1) et allez dans les paramètres des axes.
Et d'autre part :
Si vous souhaitez changer la couleur via JSL - le petit code supplémentaire à ajouter les lignes en changeant la couleur, ça ne fait pas trop de cœur, non ?
On pourrait penser à définir le style de couleur/ligne par défaut dans les préférences.
entièrement automatique - pas de JSL - pas de changement manuel - juste les lignes comme vous le souhaitez.