Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite alors réussiteJ'ai un tableau (Limits) avec les limites.Les colonnes du tableau sont Product, Componet A, Componet B. Sous chaque composant se trouve la limite.Exemple de produit, aluminium, zinc
Fudd .24 .50
J'ai une autre table FG Metals qui a une colonne PASS/FAIL et une colonne Aluminium et une colonne Zinc avec les résultats dans chaque ligne.Exemple RÉUSSITE/ÉCHEC, aluminium, zinc
.09 .1
Je dois comparer le résultat dt (FG metals) Aluminium .09 avec le dt (Limits) Aluminium .24. Si le résultat est inférieur à la limite, indiquez Réussite dans la colonne RÉUSSITE/ÉCHEC, sinon indiquez ÉCHEC.
J'espère que j'ai expliqué cela assez bien.S'il vous plaît laissez-moi savoir si vous avez des questions.
Wayne
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thÇa a marché.
Merci beaucoup.
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thEssayez de changer la ligne de code en
<FONT style="background-color: #ffffff;">Column( colNamesList[theColumn] || " PASS/Fail" ) << delete</FONT> property("formula");
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thSalut TxNelson,
Dans le script, si je commente -- Column( colNamesList[theColumn] || " PASS/Fail" ) << supprimer la formule ; ça tourne bien.
</CODE></P><P><CODE class=" language-jsl">Juste une requête - ne supprimons-nous pas la formule de la colonne, avant même d'obtenir notre colonne ? Comme notre chronique sera complète
une fois que nous allons substituer les valeurs de LSL et USL et nous le faisons dans la ligne suivante de la boucle For ?
</CODE></P><PRE><CODE class=" language-jsl">colNamesList = dt << get column names(string,continuous);
For( theColumn = 1, theColumn <= N Items( colNamesList ), theColumn++,
Clear Symbols( specs );
specs = Column( dt, colNamesList[theColumn] ) << get property( "Spec Limits" );
If( Is Empty( specs ) == 0, /*show(colNamesList[theColumn] || " PASS/Fail"), Wait (1); */
Eval(
Substitute(
Expr(
dt << New Column( colNamesList[theColumn] || " PASS/Fail",
numeric,
CONTINUOUS,
FORMULA( If( __LSL__ <= __col__ <= __USL__, 1, 0 ) )
);
/* Column( colNamesList[theColumn] || " PASS/Fail" ) << delete formula;*/
),
Expr( __LSL__ ), specs["LSL"],
Expr( __col__ ), Parse(":" || colNamesLIst[theColumn] ),
Expr( __USL__ ), specs["USL"]
)
)
);
);
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thQuel que soit le temps d'attente que je mets, il n'évalue que la première colonne et à travers la même erreur. Mais, si je le divise et le lance en deux parties -- c'est bien ! Aucune idée pourquoi ?
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thdt << relancer les formules ; et attendez (0) - aucun d'entre eux ne fonctionne pour moi. Mais oui, si je divise mon code en deux exécutions, cela fonctionne bien.
Une autre suggestion ?
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thVous pouvez ajouter un
wait(0);
ou
dt << rerun formulas;
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thSalut, Oui, cela fonctionne si j'exécute du code jusqu'à ce que je gère d'abord la limite de spécification, puis le reste, et en ajoutant
show(colNamesList[theColumn] || " PASS/Fail"); ne fait aucune différence. Le code ne s'exécute toujours pas en une seule fois, même après l'ajout de cette ligne.
Existe-t-il un moyen de forcer d'abord à évaluer la partie limite des spécifications de gestion, puis à aller plus loin ou puis-je attendre (disons - 2 secondes) des félicitations avant d'entrer dans la boucle for?
Merci.
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thLa gestion des limites de spécification peut ne pas se terminer avant le traitement du code ci-dessous.Essayez de parcourir uniquement les limites de gestion des spécifications.Ensuite, une fois qu'il est terminé, exécutez le code restant.
Aussi, ajoutez
show(colNamesList[theColumn] || " PASS/Fail");
Juste avant la ligne 19
Eval(
Ensuite, regardez de quel nom le code se plaint
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thSalut,
J'ai fait cette vérification et je me suis assuré que LSL et USL devraient tous deux figurer dans le tableau des spécifications. En fait, je démarre également la boucle For - la colonne = 10 où je savais qu'à partir de la colonne 10, j'avais des limites de spécifications dans le tableau, même si cela devrait être pris en compte par l'instruction Is Empty.
Rien n'a fonctionné.
Merci.
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thLa ligne de code qui pose problème est
Column( colNamesList[theColumn] || " PASS/Fail" ) << delete formula;
L'instruction d'erreur indique qu'elle ne peut pas trouver la colonne référencée.La colonne référencée doit avoir été créée dans l'instruction juste avant.
dt << New Column( colNamesList[theColumn] || " PASS/Fail",
numeric,
CONTINUOUS,
FORMULA( If( __LSL__ <= __col__ <= __USL__, 1, 0 ) )
);
Ce qui est nécessaire pour que cette instruction fonctionne, c'est qu'une LSL et une USL existent pour la colonne référencée dans la formule.Je soupçonne que c'est le problème.Je vérifierais pour m'assurer que LSL et USL existent.
Concernant votre question
" Aussi pourquoi utilisons-nous "__" dans les limites de spécifications comme LSL "
Il ne s'agit pas d'une exigence JMP.Dans la fonction Substitute(), il est nécessaire d'avoir des paires de valeurs correspondantes que JMP va utiliser pour la substitution.J'utilise le "__" avant et après les valeurs correspondantes, juste pour clarifier le code.Je donne également au nom de la paire assortie quelque chose de significatif.Et dans ce cas, la fonction Substitution() remplace la LSL, la référence Col et l'USL, et donc par ma convention, j'utilise, __LSL__, __col__ et __USL__.
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thSalut Nelson,
J'obtiens une erreur de suivi dans le script que vous m'avez envoyé vendredi. De l'aide
Aussi pourquoi utilisons-nous "__" dans les limites de spécifications comme LSL. J'essayais de trouver une réponse dans les directives de script jmp mais je ne comprenais pas grand-chose.
Merci.

Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thSalut, merci beaucoup,
Oui, c'est ce que (lire Guide de script ) Je fais maintenant un jour. 
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thJ'ai placé ci-dessous une solution à votre demande.Cependant, vous devez prendre le temps de lire le guide de script, pour vous assurer que vous comprenez ce que j'ai fourni, et aussi pour vous aider à comprendre le JSL fourni dans d'autres discussions.
names default to here(1);
dtspecs = Data Table ("Specs_Limits");
dt = Data Table ("Table_A");
Loadlimit = dt << Manage Spec Limits( Y( :BVIA_RES, :COILVIA_RES, :RDR_RES, :TAD_RES,
:WELGL_RES), Load from Limits Table("Specs_Limits.jmp"), Save to Column Properties (1) );
Loadlimit << close window;
colNamesList = dt << get column names(string,continuous);
For( theColumn = 1, theColumn <= N Items( colNamesList ), theColumn++,
Clear Symbols( specs );
specs = Column( dt, colNamesList[theColumn] ) << get property( "Spec Limits" );
If( Is Empty( specs ) == 0,
Eval(
Substitute(
Expr(
dt << New Column( colNamesList[theColumn] || " PASS/Fail",
numeric,
CONTINUOUS,
FORMULA( If( __LSL__ <= __col__ <= __USL__, 1, 0 ) )
);
Column( colNamesList[theColumn] || " PASS/Fail" ) << delete formula;
),
Expr( __LSL__ ), specs["LSL"],
Expr( __col__ ), Parse(":" || colNamesLIst[theColumn] ),
Expr( __USL__ ), specs["USL"]
)
)
);
);Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thBonjour TxNelson,
J'ai besoin d'une solution similaire et j'essayais de suivre celle que vous avez fournie mais je n'ai pas pu obtenir mes résultats. Pourrais-tu m'aider s'il te plaît --
J'ai deux tables - l'une est une table de données et l'autre est une table de spécifications. Je dois comparer les données de la table principale avec les spécifications de la table des spécifications et les placer dans une nouvelle colonne sous la forme 1 (réussite) et 0 (échec).
De l'aide ?
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thJim,
Fonctionne très bien.Merci encore pour votre aide.
Wayne
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite th
- Les différentes colonnes de métaux dans le fichier des limites doivent être des colonnes numériques.
- La colonne Réussite/Échec dans la table de données Métaux doit être définie en tant que caractère.
Voici un script qui fonctionne sur la base des exemples de données que vous avez fournis ..... et avec les modifications ci-dessus.Le code utilise le tableau de données des limites pour déterminer les métaux à tester.
Names Default To Here( 1 );
dtLimits = Data Table( "Limits sample (1)" );
dtMetals = Data Table( "FG Sample (1)" );
// Get the names of the columns with the metals data in them
metalsColNames = dtLimits << get column names( string, numeric );
For( theRow = 1, theRow <= N Rows( dtMetals ), theRow++,
If( N Rows( dtLimits << get rows where( dtLimits:product == dtMetals:Product[theRow] ) ) > 0,
theProductRow = (dtLimits << get rows where( dtLimits:product == dtMetals:Product[theRow] ))[1];
result = "Pass";
For( theColumn = 1, theColumn <= N Items( metalsColNames ), theColumn++,
target = Column( dtLimits, metalsColNames[theColumn] )[theProductRow];
col = Column( dtMetals, metalsColNames[theColumn] );
If( col[theRow] < target,
result = "Fail"
);
);
dtMetals:Name( "Pass/Fail" )[theRow] = result;
)
);Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thSi un métal échoue, l'échantillon échoue. Si tous les métaux passent, alors l'échantillon passe.Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thTout ce qui doit se passer est de trouver la ligne correcte dans le tableau des limites, pour le produit sur la ligne dans le tableau de données des métaux. Je vais vous apporter une modification de mon script qui fera cela ...... mais n'avez-vous pas besoin d'avoir plus d'une colonne Réussite / Échec dans votre table de données sur les métaux, car chaque métal peut réussir ou échouer .. ... ou êtes-vous en train de dire que si un métal échoue, alors c'est un échec, mais s'ils passent tous, alors la rangée passe ????Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thJIM,
Dans mon fichier de limites, j'ai plusieurs produits. Fudd avec Aluminium et la limite .05 puis Miracle avec Aluminium et la limite .02. Chaque produit dans le fichier des limites se trouve sous la colonne des produits. Exemple de produit, aluminium, zinc
Fudd .5 .1
Miracle .2 .5
S'il vous plaît laissez-moi savoir comment manipuler le produit.
Salutations,
Wayne
Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thVoici un script qui, je pense, fait ce que vous voulez

Names Default To Here( 1 );
// Create example data tables
dtLimits = New Table( "Limits",
New Column( "Product", character, values( {"Fudd"} ) ),
New Column( "Aluminum", values( {.24} ) ),
New Column( "Zinc", values( {.50} ) )
);
dtMetals = New Table( "FG Metals",
add rows( 10 ),
New Column( "Pass/Fail Aluminum", character ),
New Column( "Pass/Fail Zinc", character ),
New Column( "Aluminum", formula( Random Uniform( 0, 1 ) ) ),
New Column( "Zinc", formula( Random Uniform( 0, 1 ) ) )
);
// Get the names of the columns with the metals data in them
metalsColNames = dtMetals << get column names( striing, numeric );
// Loop across the columns and down the rows and calculate the pass/fail
For( theColumn = 1, theColumn <= N Items( metalsColNames ), theColumn++,
target = Column( dtLimits, metalsColNames[theColumn] )[1];
col = Column( dtMetals, metalsColNames[theColumn] );
passFail = Column( dtMetals, " Pass/Fail " || metalsColNames[theColumn] );
For( theRow = 1, theRow <= N Rows( dtMetals ), theRow++,
If( col[theRow] < target,
passFail[theRow] = "Fail",
passFail[theRow] = "Pass"
)
);
);Re : Besoin de comparer le résultat d'une table avec la limite de spécification dans une autre table. Si résultat < limite thJ'ai joint des exemples de fichiers.