Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRBonjour,
En supposant que j'ai un tableau de limites enregistré avec plusieurs colonnes de paramètres, comme indiqué ci-dessous. Existe-t-il un moyen de lire ce fichier et d'appliquer les limites à un graphique IR pour les paramètres correspondants à l'aide de JSL ?

Selon le message suivant, il n'existe aucun moyen d'invoquer la fonction « Obtenir les limites » à partir de la boîte de dialogue Carte de contrôle à l'aide de JSL. Dans ce cas, il a été suggéré de coder en dur les limites.
Comment-obtenir-les-limites-de-capacité-sur-la-carte-de-contrôle-IR
Je pense que je dois lire le fichier de limites, capturer les valeurs Sigma, Avg, LCL et UCL en tant que variables, puis les transmettre au Chart Col pour chaque paramètre.Si c’est la seule manière d’y parvenir, quelle serait la manière la plus efficace d’y parvenir ?
Voir ci-dessous l'exemple de code pour un seul paramètre de carte de contrôle avec niveau de phase et limites codées en dur :
Control Chart(
Sample Label( :WEEK ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
:P1,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( 0.0106958422036977 ),
Avg( 5.59766666666667 ),
LCL( 5.56557914005557 ),
UCL( 5.62975419327776 )
)
)
)
);
Merci d'avance.
Ry
Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRExcellent! Cela m'a mis sur la bonne voie.
Merci!
Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRVous pouvez utiliser JSL avec la commande Get Limits pour une carte de contrôle IR.Le message auquel vous avez fait référence concernait les limites de spécification et non les limites de contrôle.Si vous avez des limites de contrôle, vous pouvez utiliser le JSL suivant avec la commande Get Limits.
dt = Open("$SAMPLE_DATA/Quality Control/Coating.jmp");
obj = Control Chart(
Sample Size( Column(dt, "Sample") ),
Chart Col( :Weight, XBar, R ),
Get Limits(
"$SAMPLE_DATA/Quality Control/CoatingLimits.jmp"
)
);
Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IR
Not Found in access or evaluation of 'Control Chart' , Bad Argument( {:Month Alerted, :YEAR} ), Control Chart(/*###*/Sample Label( :Month Alerted ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
:Grand Total,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( 9843.52246062887 ),
Avg( 54802.5935983333 ),
LCL( 25272.0262164467 ),
UCL( 84333.1609802199 )
)
)
)
)
Mes colonnes sont alertées par mois, le contenu des données de la colonne est de 12 mois dans ce format 2019-04, j'ai donc changé l'exemple d'étiquette en : Mois alerté.
la partie suivante est l'ANNÉE et la Phase qui ne correspondent pas à mes données donc je pense que c'est là que ça ne marche pas ?
Les limites sont de plusieurs colonnes mais chacune avec un en-tête différent, idéalement, je ne veux pas écrire chaque en-tête de colonne.
J'ai également besoin de la taille (500 175), mais je ne sais pas où cela se situe dans le code et je l'enregistre dans la table de données.
J'ai essayé d'utiliser le générateur de cartes de contrôle, mais je n'ai pas réussi à ajouter les limites. Je sélectionne le fichier mais il n'a rien fait après. Ce qui signifiait que je ne pouvais pas obtenir une sorte de script.
Merci beaucoup - j'ai joint le script
Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRQuels messages d'erreur recevez-vous dans le journal ?Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRBonjour, je suis tombé sur cette solution et j'ai essayé de l'implémenter mais cela ne fonctionne pas pour moi, elle ouvre les fichiers que je spécifie en haut du script mais ne continue pas avec le reste du script. Cela a peut-être quelque chose à voir avec la partie Phase mais je ne comprends pas complètement d'où ça vient ? Merci pour votre aideRe : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRMerci pour la réponse rapide Jim.J'essayais de définir les limites de contrôle et la propriété Sigma et j'obtenais une erreur pour :
too many arguments in access or evaluation of 'Expr' , Expr/*###*/(Column( finalDt, colNamesList[i] ) <<
Set Property(
"Control Limits",
{Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ) )}
), Column( finalDt, colNamesList[i] ) << Set Property( "Sigma", __sigma__ ))Le problème était que j'essayais de définir deux propriétés de colonne différentes dans la même expression de substitution.Après l'avoir divisé en 2 Evals, cela fonctionne.Voir ci-dessous.
Current Data Table( finalDt );
Wait(0);
// Get list of columns to chart
colNameList = finalDt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 2, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
// sigma
theSigma = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_Std Dev" ))[1]];
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr( __process__ << Set Property("Control Limits", {Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ))})),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
Eval(
Substitute(
Expr( __process__ << Set Property("Sigma", __sigma__)),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __sigma__ ), theSigma,
)
);
)
);Merci encore pour votre aide rapide.
Ry
Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRSi vous définissez de manière interactive les limites de contrôle pour une carte IR, puis utilisez le JSL suivant pour récupérer les limites,
:columnname <<GET property=""></GET>
La structure stockée pour la propriété Column sera affichée
{Individual Measurement(
Avg( 62.55 ),
LCL( 51.574420384821 ),
UCL( 73.525579615179 )
)}
Il suffit donc de lire les informations de votre tableau de données de limites, puis de créer la structure ci-dessus et de la transmettre à la colonne du tableau de données de mesure.Vous trouverez ci-dessous une modification de mon script précédent, sauf qu'il remplit les limites de contrôle plutôt que d'exécuter les cartes de contrôle.
Names Default To Here( 1 );
dt = Open( "path to data table" );
dtLimits = Open( "path to limits table" );
// Get list of columns to chart
colNameList = dt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 1, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr(
__Process__ << set property(
"Control Limits",
{Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ) )}
)
),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
)
);Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRSalut Jim,
Pouvez-vous me montrer comment aborder la première méthode que vous avez mentionnée ? Lire les limites du tableau des limites puis les appliquer comme propriétés de colonne.
Merci,
Ry
Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRMerci Jim. J'ai dû apporter une petite modification aux sections Get Rows Where( _LimitsKey == ...). Je viens d'ajouter les deux points ":" pour qu'il devienne Get Rows Where( :_LimitsKey == ...) puis tout a fonctionné. Une question cependant. Le script génère des fenêtres individuelles pour chaque carte de contrôle des paramètres. Existe-t-il un moyen de générer une fenêtre avec les cartes de contrôle de chaque paramètre empilées (comme si j'avais sélectionné plusieurs paramètres dans la boîte de dialogue Carte de contrôle IR) ?Re : Comment utiliser JSL pour obtenir les limites dans la carte de contrôle IRIl existe 2 manières de base de procéder.
- Lisez les données du tableau des limites, puis enregistrez les limites en tant que propriétés de colonne. Exécutez ensuite les graphiques souhaités.
- Parcourez les colonnes à tracer, en lisant les limites du tableau des limites et en les insérant dans le JSL pour générer les graphiques.
C'est la deuxième de ces méthodes que j'ai utilisée pour le script ci-dessous.Il devrait s'agir d'un script fonctionnel, mais sans réellement disposer de votre table de limites et de la table de données réelle, il est possible qu'il y ait des problèmes.
Names Default To Here( 1 );
dt = Open( "path to data table" );
dtLimits = Open( "path to limits table" );
// Get list of columns to chart
colNameList = dt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 1, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
// sigma
theSigma = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_Std Dev" ))[1]];
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr(
Control Chart(
Sample Label( :WEEK ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
__process__,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( __sigma__ ),
Avg( __avg__ ),
LCL( __LCL__ ),
UCL( __UCL__ )
)
)
)
)
),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __sigma__ ), theSigma,
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
)
);