Boucle dans les colonnes [Vérification de la plage]Je voudrais des conseils pour appliquer une vérification de plage basée sur des limites de spécifications déjà remplies.
Ce test comporte 87 limites de sélection et je souhaiterais appliquer une vérification de plage afin d’aider à établir les limites de spécifications.
Je sais que je peux utiliser le script pour ce que je veux accomplir, mais je ne vois pas comment appliquer la vérification de plage (LELE (16, 46)), par exemple ..
Merci pour votre temps
// dtsplitmeas is the table that is split
cols = dtsplitmeas << get Column names( string );
// dtlim is _SPEC LIMITS_ .jmp attached to this thread
// dtrange is _RANGE CHECK_ .jmp attached to this thread
// Assign Spec Limit script
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
limrow = Try( (dtlim << get rows where( dtlim:SPEC_COL_NAMES == cols[i] ))[1], . );
If( Is Missing( limRow ) == 0,
specs = {LSL( . ), USL( . ), Target( . ), Show Limits( 1 )};
specs["LSL"] = dtlim:LSL[limrow];
specs["USL"] = dtlim:USL[limrow];
Column( dtsplitmeas, Char( cols[i] ) ) << set property( "spec limits", Eval( specs ) );
);
);
Re: En boucle à travers les colonnes [Vérification de la plage]Cela fonctionne pour moi. J'ai changé le test pour simplement vérifier qu'il y a des lignes au cas où cela échouerait pour une raison quelconque, je ne voudrais pas simplement passer des erreurs en silence.
Names default to here(1);
dtsplitmeas = Data Table("sample data");
dtlim = Data Table("_ SPEC LIMITS_");
dtrange = Data Table( "_ RANGE CHECK_" );
// dtsplitmeas is the table that is split
cols = dtsplitmeas << get Column names( string );
// dtlim is _SPEC LIMITS_ .jmp attached to this thread
// dtrange is _RANGE CHECK_ .jmp attached to this thread
// Assign Spec Limit script
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
limrow = dtlim << get rows where( dtlim:SPEC_COL_NAMES == cols[i] );
If( nrows(limrow),
specs = {LSL( . ), USL( . ), Target( . ), Show Limits( 1 )};
specs["LSL"] = dtlim:LSL[limrow[1]];
specs["USL"] = dtlim:USL[limrow[1]];
Column( dtsplitmeas, Char( cols[i] ) ) << set property( "spec limits", Eval( specs ) );
//this assumes that the spec_col_names are exactly the same in both tables
Eval(EvalExpr(
Column( dtsplitmeas, char(cols[i])) << Set Property("Range Check",
LELE(Expr(dtrange:rangeA[limrow[1]]), Expr(dtrange:rangeB[limrow[1]]))
)
));
);
);Re: En boucle à travers les colonnes [Vérification de la plage]Voici un exemple sur la façon de le faire:
Names Default To Here( 1 );
dtsplitmeas = Data Table( "sample data" );
dtrange = Data Table( "_ RANGE CHECK_" );
// dtsplitmeas is the table that is split
cols = dtsplitmeas << get Column names( string );
// dtlim is _SPEC LIMITS_ .jmp attached to this thread
// dtrange is _RANGE CHECK_ .jmp attached to this thread
// Assign Spec Limit script
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
rangerow = Try( (dtrange << get rows where( dtrange:SPEC_COL_NAMES == cols[i] ))[1], . );
If( Is Missing( rangeRow ) == 0,
Eval(
Substitute(
Expr(
Column( dtsplitmeas, Char( cols[i] ) ) <<
Range Check( LELE( __low__, __high__ ) )
),
Expr( __low__ ), dtrange:rangeA[rangerow],
Expr( __high__ ), dtrange:rangeB[rangerow]
)
)
);
);Re: En boucle à travers les colonnes [Vérification de la plage]Très apprécié. Je vais l'essayer dès que possible ..
RÉ.
Re: En boucle à travers les colonnes [Vérification de la plage]Puisque les SPEC_COL_NAMES sont les mêmes dans chaque table, pouvez-vous simplement ajouter les valeurs rangeA et rangeB à la même table et les extraire à partir de là, en plus des spéc_limits?
Re: En boucle à travers les colonnes [Vérification de la plage]@txnelson
De retour en arrière, vous m'avez fourni un excellent script qui parcourt différentes colonnes, créez un journal, tracez des graphiques, puis ajoutez ce journal.
Je cherche à faire la même chose avec les graphiques de contrôle, cependant, 87 expressions différentes peuvent être utilisées pour un Yaxis, mais je me demande si vous pouvez appliquer le même concept avec les contrôles de limite et de portée Nos tests sont de plus en plus élaborés et dans le cas de cet article original, j'ai 504 conditions de dépistage. 87 sorties de test actaul avec 417 sorties calculées.
Merci d'avance
doDistrPlot = Function(
{dtsplitmeas, Yaxis },
Eval(
Substitute(
Expr(
gb = Control Chart Builder(
Size( 734, 854 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables(
Y( Eval( Yaxis )) // Is evaluated in the same manner as the limits and range check.
),
Chart( Position( 1 ), Limits( Sigma( "Moving Range" ) ) ),
Chart( Position( 2 ), Limits( Sigma( "Moving Range" ) ) )
)
)
)
);
(gb << Top Report )[Text Box( 1 )] << Delete;
Report( gb )[Outline Box( 1 )] << Set Title( Eval Insert( Yaxis ) );
);
cols = dtsplitmeas << get Column names( string );
jjr1 = New Window( "Journal Window", << Journal );
For( i = 1, i <= N Cols( dtsplitmeas ), i++,
Yaxis = dtlim << Get Rows Where( dtlim:SPEC_COL_NAMES == cols[i] );
doDistrPlot( dtsplitmeas, Yaxis );
jjr1 << Append( Report( gb ) );
gb << Close Window;
);Re: En boucle à travers les colonnes [Vérification de la plage]Si vous exécutez votre fonction pour une seule valeur de Yaxis, cela vous donne-t-il la carte de contrôle souhaitée? Je soupçonne que non. Vous avez une instance Eval (Substitute (Expr ())) qui ne semble pas devoir fonctionner car aucun élément de substitution n’a été spécifié.
Vous devez prendre les mesures nécessaires pour que la fonction s'exécute, puis commencer à ajouter le bouclage.
Mais d’abord, je pense que vous devez passer beaucoup de temps à lire le Guide de script.
Aide ==> Livres ==> Guide de script
Re: En boucle à travers les colonnes [Vérification de la plage]Encore une fois, merci à vous deux pour votre aide. Le message d'erreur «hors limites» de la colonne «RF_IN_4_LPF_THRU à BM_A_OUT S21 State 1 @ 10.25GHz» est défini comme manquant. Continuer?
Je me souviens de l'avoir vu apparaître lorsque je définissais manuellement la plage ... Est-ce que c'est arrivé quand vous l'avez couru de votre côté?
Note: je reçois toujours l'erreur ...