Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?L'exemple de script suivant obtient le rendement du « paramètre de processus » par « ID de plaquette dans l'ID de lot » à l'aide de l'exemple de tableau de données de capacité des semi-conducteurs.
Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp"); // My actual data is similar
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID );
);
cdt_ps = Report(ps)[Outline Box( "Process Screening" )][Table Box( 1 )] << Make Combined Data Table;
Wait(1 );
ps<< SendToReport( Dispatch( {}, "Process Screening", OutlineBox, {Close( 1 )} ) );
Wait (1);
ps << close window;
cdt_ps << New Column( "PassingDie", Numeric, "Continuous", Format( "Best", 12 ), Formula(:Count - :Out of Spec Count));
cdt_ps << New Column( "ParaYield [%]", Numeric, "Continuous", Format( "Best", 12 ), Formula(100*(:PassingDie / :Count)));
cdt_ps:Column << Set Name( "Process Parameter" );Appelons maintenant un paramètre de processus "PP", le groupe de paramètres de processus "PPG" et un ID de plaquette dans l'ID de lot "wfrIDinLotID".
Ensuite, je souhaite extraire le rendement PPG par wfrIDinLotID où les PPG sont définis comme :
- Tous les PNP dans un seul groupe
- Tous les NPN dans un autre groupe
- Tous les INM sont dans un autre groupe et ainsi de suite.
c'est-à-dire que tous les PP générés par la ligne ci-dessous mais sans les numéros à la fin forment les noms de PPG.
cdt_ps << Summary(Group( :Process Parameter ), Freq( "None" ), Weight( "None" ));
Je ne sais pas encore comment faire pour obtenir les noms PPG dans une nouvelle colonne en JSL. Donc, j'ai besoin d'aide ici.
Certains PPG peuvent n'avoir qu'un seul membre, ce qui est très bien.
Le nombre d'échecs d'un PPG donné est, je pense, la somme des nombres d'échecs de chacun de ses membres, disponible plus tard à partir du script ci-dessus.
Par conséquent, pour un wfrIDinLotID particulier, le « nombre hors spécifications » pour un PPG donné devrait avoir une seule valeur numérique. Cela ira dans une nouvelle colonne, appelons-la OOSC_PPG.
Le rendement PPG pour un wfrIDinLotID donné serait alors de 100*(nombre de SITE avec OOSC_PPG = 0)/Total de SITE testés.
Le nombre total de sites testés par wfrIDinLotID est de 5 dans l'exemple de tableau de données.
Enfin, je souhaite générer un rapport avec 3 colonnes : wfrIDinLotID, PPG, PPG rendement.
S'il vous plaît, puis-je avoir des instructions sur la façon de procéder avec JSL ?
Automatisation et scriptsles fenêtresRe : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Qu'as-tu essayé ?
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?
astuce intéressante : "abuser" de la plate-forme Process Screening pour éviter le nombre de spécifications par tranche.
très utile : )
@Neo a écrit :
Le nombre d'échecs d'un PPG donné est, je pense, la somme des nombres d'échecs de chacun de ses membres.
J'ai peur : non
- du moins : pas en général.
voici un exemple pour NPN5 et NPN6. Si vous additionnez le nombre d’échecs, vous compterez les points bleu + orange deux fois.
Pour générer des rendements groupés (via des informations de réussite/échec groupées), vous devez partir des données brutes.

Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@jthi . Je dois d’abord séparer les lettres des chiffres dans les noms des paramètres de processus pour les organiser en groupes. Je ne sais pas comment séparer le texte des nombres en JSL.
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@hogi . Hum..
>>>Pour générer des rendements groupés (via des infos réussite/échec groupées), il faut partir des données brutes
Je le craignais....
mais en y repensant et contrairement à ce que je pensais auparavant, si l'un des membres d' un PPG particulier est hors spécifications, le site testé échoue pour ce PPG particulier.
J'ai le sentiment que cela peut être géré sans revenir aux données brutes.
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?
@Neo a écrit : le site testé échoue pour le PPG particulier.
Mais avec l'approche actuelle, vous vous regroupez dans la plateforme de filtrage des processus et perdez les informations du site.
Disons que pour l'une des tranches, NPN5 échoue aux sites 1, 2, 3 et NPN6 échoue aux sites 2, 3, 4.
Ensuite dans la plateforme Process Screening , vous obtiendrez pour cette plaquette :
- nombre hors spécifications NPN5 : 3
- nombre hors spécifications NPN6 : 3
Je pense que la seule façon de savoir combien de sites ont échoué pour cette plaquette (NPN5 ou NPN6) est :
allez au tableau d'origine, comptez : 1,2,3,4
-> #échecs = 4
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Je suis d'accord avec @hogi , il faut effectuer le calcul au niveau où vous avez encore accès au site. Si vous utilisez le filtrage des processus, vous ne pourrez pas faire la différence entre les chevauchements. Considérez que vous disposez de 5 sites sur une plaquette et de 10 tests. Si les plaquettes n'ont que des échecs sur le site 1 et TOUS les tests, voudriez-vous compter cela comme 1 site ayant échoué ou comme 10 tests ayant échoué ( le message de hogi a un autre exemple). Je pense que vous ne voulez pas compter cela comme 10 sites en échec ?
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@jthi @hogi Merci. Je peux colorer les valeurs OOS en utilisant ce qui suit
Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID ),
Color Out of Spec Values
); Je dois alors faire ce qui suit
1. Formez une colonne pour les PPG
2. Attribuez un échec à un PPG particulier si l'un de ses membres a une cellule colorée
Cela n’aura besoin que des données brutes.
Je ne sais pas encore comment effectuer l'une ou l'autre des deux étapes ci-dessus, je demande donc des instructions ici.
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@jthi . Si pour une tranche donnée, l'un des membres d'un PPG particulier est OOS, alors le test échoue pour ce PPG. Un site peut échouer à un test PPG particulier mais réussir les tests sur tous les autres PPG.
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?coloriez les cellules, puis collectez toutes les lignes avec des couleurs - quelle solution créative !
dans une future version de JMP, ce sera beaucoup plus simple - si ce souhait recueille suffisamment de Kudos...
:folded_hands: est en spécification (valeur)
Ré: Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Après avoir soutenu << obtenir la couleur des cellules avec un Kudo, en attendant JMP19++ ,
vous pouvez générer un sous-ensemble auxiliaire, écraser les valeurs avec les informations de réussite/échec 0/1 et les additionner par PPG :
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group( "Processes" );
ps = dt << Process Screening(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type( "Indiv and MR" ),
Grouping( :Wafer ID in lot ID ),
Color Out of Spec Values
);
dt sub = dt << Subset( All rows, Selected columns only( 0 ) );
For Each( {col}, col_names,
specs = col << Get Property( "Spec limits" );
If( Not( Is Empty( specs ) ),
lsl = specs["LSL"];
usl = specs["USL"];
Eval( Eval Expr( col << set each value( Not( lsl < Expr( Name Expr( col ) ) < usl ) ) ) );
);
);
prefixes = {"NPN","PNP","INM"};
PPGs = transform each ({prefix},prefixes,prefix || " fail");
for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);
dt sub << Group Columns( "PPGs", PPGs );
ps = dt sub << Process Screening(
Process Variables( Eval( PPGs ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type( "Indiv and MR" ),
Grouping( :Wafer ID in lot ID ),
Color Out of Spec Values
);
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@hogi Test de votre script dans mon JMP 16.2
La deuxième ligne semble contenir une faute de frappe. Ça devrait être
col_names = dt << Get Column Group( "Processes" );
et cette partie génère une erreur
dt sub << Group Columns( "PPGs", failcols );
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?désolé -> édité.
J'aurais dû effacer les symboles avant de vérifier si le code soumis fonctionne.
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?La création des groupes peut être effectuée à l'aide de Regex() et l'obtention des cellules colorées a été résolue plusieurs fois dans la communauté. Voici un article plus ancien Comment obtenir le numéro de ligne des cellules colorées dans une colonne et lui attribuer une balise (par exemple "1 ") dans une colonne nouvellement créée ? . Ce modèle n'est peut-être pas correct car je ne sais pas comment les groupes doivent être créés
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
rgx_pattern = "^(.+?)\d*$";
For Each({colname}, cont_cols,
groupname = Regex(colname, rgx_pattern, "\1");
Write("\!N'", colname, "' belongs to '", groupname, "' group");
);
et pour comprendre le modèle, je suggère d'utiliser https://regex101.com/ ou un grand modèle de langage (ils sont assez bons pour expliquer les modèles d'expression régulière)
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Utiliser également une table empilée avec quelque chose comme ça peut être plus facile

À tout le moins, il est plus facile de vérifier visuellement ce qui se passe (je n'ai pas vérifié ces calculs)

Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@hogi J'ai testé votre script et il fonctionne comme prévu. Cependant, je ne comprends pas pourquoi la somme () (somme du nombre d'échecs ?) est nécessaire ici.
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);Pourriez-vous nous éclairer s'il vous plaît ?
Merci
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?ColGroup contient une liste de noms de colonnes qui sont additionnés. Pour la colonne nommée "NPN Fail", la fonction Sum() est étendue à
sum( :NPN1, :NPN2, :NPN3, :NPN4, :NPN5, :NPN6, :NPN7, :NPN8, :NPN9, :NPN10, :NPN11 )
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@hogi @txnelson Merci. Je note que cette partie du script ajoute le nombre d'échecs par site pour chaque membre pour un PPG donné. Je ne suis pas sûr de comprendre cela.
for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);Si un site échoue pour l'un des membres d'un PPG donné, ce site échoue au PPG donné et cela n'a pas d'importance si plusieurs membres de ce PPG échouent sur ce site (ou est-ce important ?) pour le rendement/la tranche du PPG dans un lot. ?
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Salut @Neo
oui, exactement, c'est la logique appliquée pour spécifier le rendement par groupe PP :
additionnez les échecs et utilisez USL = 0
si un site échoue pour une spécification, c'est un échec.
Si la somme de tous les candidats est égale à 0, aucun d'entre eux n'est un échec -> donc réussissez pour l'ensemble du groupe sur le site spécifique.
Préféreriez-vous une autre logique ?
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@hogi . Rusé!! Je comprends maintenant. Je ne peux pas être plus d'accord avec votre déclaration précédente . BTW, je l'ai obtenu à l'origine ici .
Je préférerais quand même le mot "exploiter"...

Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?@hogi Je teste maintenant le script avec ma table de données réelle.
Les noms de paramètres dans mon cas sont de la forme ABCD_1_X_Y_1_Z et les PPG sont définis par diverses combinaisons de ABCD...GH (A est toujours une lettre tandis que le reste peut être des lettres ou des chiffres).
X et Y sont des chiffres tandis que Z peut être un chiffre, une lettre ou une combinaison.
Ne me demandez pas pourquoi le nom est sous une telle forme - ce n'est pas ma faute.
Les PPG sont formés de la manière suivante
- U33P_1_0_0.... sera contenu dans le PPG "U33P"
- CASMAPUL23Out_1_0_1_...sera contenu dans le PPG "CASMAPUL23Out", et ainsi de suite
Ainsi, pour obtenir le nom PPG, je dois obtenir la combinaison de lettres avant le premier trait de soulignement dans le nom du paramètre. Comment modifier ce qui suit pour qu'il fonctionne dans mon cas.
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Découvrez les fonctions Word() et Words(), elles sont généralement très utiles pour quelque chose comme ça.
Re : Comment obtenir le rendement du groupe de paramètres de processus par « ID de plaquette dans l'ID de lot » ?Comme le dit @jthi ,
colGroup = Filter Each({col}, col_names, Word(1, col << getname(),"_") == myName);fera l'affaire : )