Regrouper un défaut à l'aide d'une liste de prioritéJ'ai joint le tableau 1 qui se compose de 3 colonnes d'entrée (Numéro de pièce, Rendement et Défauts) et 1 colonne de sortie (Bin). J'ai également joint un autre priority_table indiquant la hiérarchie des défauts avec des fissures comme les plus importants.
Comment puis-je générer la colonne de sortie Bin, en utilisant le script JMP où, si un numéro de pièce présente quelques défauts, mettre le défaut le plus important dans la colonne Bin pour toutes les lignes concernant ce numéro de pièce ? Aussi si le rendement est inférieur à 60% et que le défaut n'est pas sur la priority_table que bin en "moins de 60%" ?
Ci-dessous, les défauts entre autres. La colonne Défauts est saisie par les opérateurs.

Modélisation statistique avancéeAutomatisation et scriptAccès aux donnéesPersonnalisation de masseIngénierie de la qualité et des procédésRe : Biner un défaut à l'aide d'une liste de prioritésJe l'ai Merci!
Re : Biner un défaut à l'aide d'une liste de prioritésVous obtenez un message d'erreur assez utile
Query failed: near "when": syntax error in access or evaluation of 'Query'
Le problème est avec cette ligne ici:
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
CAS SQLite
Vous pouvez enchaîner des déclarations avec quand donc semblent avoir un supplément autre là puis "Défaut invalide" autre quand
Re : Biner un défaut à l'aide d'une liste de prioritésSalut Jarmo,
Merci pour le code. Je veux changer les critères et le code pour m'assurer que je comprends. Si je veux changer :
La priorité absolue est
1) Toutes les pièces ne figurant pas dans la liste prioritaire, déplacez-les vers un bac appelé "Défauts non valides"
2) toutes les pièces sont <60%, déplacez-vous vers un bac appelé "<60% pièces"
3) Comparez la liste des priorités
J'ai changé le code comme ci-dessous mais j'avais une erreur de syntaxe :
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
on t1.Defects like "%"||p.Bin||"%"
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");Re : Biner un défaut à l'aide d'une liste de prioritésVous pouvez peut-être modifier la jointure dans SQL pour utiliser des caractères génériques :
Names Default To Here(1);
dt_table1 = Open("Table1.jmp", Invisible);
dt_priority = Open("priority_table.jmp", Invisible);
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
on t1.Defects like "%"||p.Bin||"%"
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL and t1.yield < 60 then "less than 60%" else p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");
Parce que le texte est entré manuellement par les opérateurs, il y aura des fautes de frappe et cela ne peut pas les attraper. Pour quelque chose comme ça, vous devrez très probablement commencer à faire une sorte de calcul de distance entre les cordes (un exemple : Distance de Levenshtein ). Dans JMP, vous pouvez également utiliser le script de modification le plus court pour le calcul de la "distance".
Text Explorer peut également vous aider, mais je ne connais pas cette plate-forme
Re : Biner un défaut à l'aide d'une liste de prioritésMerci Jarmo,
J'ai mis à jour ma question et Table1.jmp. La colonne Défauts est saisie manuellement par les opérateurs et les mots de défauts tels que fissures, limons, etc. figurent parmi chaque chaîne.
Merci.
Re : Biner un défaut à l'aide d'une liste de prioritésJe ne peux pas être sûr à 100% de la façon dont vous voulez faire la correspondance, mais je peux supposer que vous allez correspondre avec la correspondance dans les défauts (dernier mot) en fonction des valeurs Bin. Il existe de nombreuses façons de résoudre ce problème, voici deux idées possibles :
Voici une solution un peu plus interactive :
- Créer une nouvelle colonne dans Table1 avec uniquement le dernier mot de la colonne Défauts
- Joindre Table1 avec priority_table en utilisant la nouvelle colonne de Table1 et Bin de priority_table
- Utilisez la formule Col Min pour obtenir la priorité la plus élevée pour le numéro de pièce (changez la priorité en numérique en premier)
- À partir de là, vous pouvez à nouveau rejoindre la table de priorité avec la nouvelle colonne de formule et la priorité de la table de priorité pour obtenir le bac final (sauf pour ceux qui manquent)
- Créer la formule finale pour calculer la valeur manquante

Vous devez obtenir tous les scripts requis pour ces étapes à partir de JMP (scripts de table (et journal amélioré si vous utilisez JMP16))
Ou si vous êtes familier avec SQL, vous pouvez essayer de l'utiliser directement. Ci-dessous une sorte de requête:
Names Default To Here(1);
dt_table1 = Open("Table1.jmp", Invisible);
dt_priority = Open("priority_table.jmp", Invisible);
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
ON SUBSTR(t1.Defects, LOCATE(" ", t1.defects) + 1) = p.Bin
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL and t1.yield < 60 then "less than 60%" else p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");
