Mettre à jour la colonne sur les lignes spécifiées<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour,
J'essaie d'utiliser les commandes de script "Pour chaque ligne" et "Commencer la mise à jour des données" pour mettre à jour le calcul sur une ligne spécifique liée à une colonne.
D'après le tableau ci-dessous, j'ai l'intention d'avoir deux colonnes d'addition, Taux de défauts (%) et Rendement, et elles utilisent toutes deux la même équation de quantité de cellules/total quotidien.
Cependant, la colonne Taux de défauts (%) calculera uniquement les lignes où Catégorie = Rejet et MRB, et la colonne Rendement calculera uniquement les lignes où Catégorie = Binned.
Je peux réaliser ce travail en utilisant la commande IF comme
dt=Tableau de données actuel();
dt<< Nouvelle colonne ("Taux de défauts (%)", Numérique, "Continu", Formule (Nom Expr (Si (: Catégorie == "Rejeter", "MRB",: Qté de cellules/: Total quotidien)))) ;
Cependant, j'essaie d'apprendre à utiliser l'option Pour chaque ligne combinée avec Commencer la mise à jour des données pour obtenir le même résultat.
dt<< Nouvelle colonne("Rendement", Numérique, "Continu");
<< Commencer la mise à jour des données ;
Pour chaque ligne ( :Yield_ = Selected(Row State())=Contains(:Category,"Binned"), :Cell Qty/:Daily Total)
Quelqu'un peut-il m'aider ?
Merci,
Catégorie | Semaine de travail | Date_PROD. | Quantité de cellules | Total quotidien | Taux défectueux(%) | Rendement |
| Rejeter | 25 | 2016-06-20 | 751 | 15553 | | |
| MRB | 25 | 2016-06-20 | 21 | 15553 | 0,00135022 | |
| Enfermé | 25 | 2016-06-20 | 14781 | 15553 | 0.95036327 | 0.95036327 |
| Rejeter | 25 | 2016-06-21 | 1251 | 31586 | | |
| MRB | 25 | 2016-06-21 | 83 | 31586 | 0,00262775 | |
| Enfermé | 25 | 2016-06-21 | 30252 | 31586 | 0,9577661 | 0,9577661 |
| Rejeter | 25 | 2016-06-22 | 1276 | 27964 | | |
| MRB | 25 | 2016-06-22 | 42 | 27964 | 0,00150193 | |
| Enfermé | 25 | 2016-06-22 | 26646 | 27964 | 0.95286797 | 0.95286797 |
| Rejeter | 25 | 2016-06-23 | 126 | 1786 | | |
| MRB | 25 | 2016-06-23 | 5 | 1786 | 0,00279955 | |
| Enfermé | 25 | 2016-06-23 | 1655 | 1786 | 0,92665174 | 0,92665174 |
Re : Mettre à jour la colonne sur les lignes spécifiéesSalut bernie426,
D'après mon expérience personnelle, le commandement IF termine ses opérations très rapidement et vous renverra des résultats instantanés car il ne traite que d'une situation par oui ou par non. D'un autre côté, vous constaterez un délai notable avant que vos résultats ne soient entièrement générés via le bouclage, car les commandes de bouclage doivent gérer des itérations et elles continueront à fonctionner jusqu'à ce qu'elles atteignent la dernière itération définie par le programmeur.
Ces instructions ne s'appliquent que si vous traitez un ensemble de données très volumineux impliquant un nombre considérablement important de lignes et de colonnes, ce qui fait de la commande IF une option plus supérieure que les commandes en boucle en termes de consommation de temps. Cependant, pour des ensembles de données plus petits, il est prudent d'utiliser l'une ou l'autre des commandes puisque le délai de remplissage des résultats est insignifiant.
Cordialement,
Val
Re : Mettre à jour la colonne sur les lignes spécifiéesSalut Val,
Merci pour les solutions suggérées, elles fonctionnent toutes les deux bien.
En fait, j'ai proposé une autre approche de formule utilisant la commande IF comme
dt=Tableau de données actuel();
dt<< Nouvelle colonne("Taux de défauts(%)", Numérique, "Continu", Formule(Nom Expr(Si((contient(:Catégorie, "MRB")| contient(:Catégorie, "Rejeter")), : Qté de cellules/:Total quotidien))));
dt<< Nouvelle colonne ("Rendement", Numeric, "Continuous", Formula(Name Expr(If(:Category == "Binned",:Cell Qty/:Daily Total))));
Savez-vous quelle est la différence de vitesse n/b en utilisant la commande IF et la commande en boucle ?
Merci beaucoup,
Re : Mettre à jour la colonne sur les lignes spécifiéesSalut,
Sur la base du résultat attendu dans votre question, je pense qu'il y a une légère erreur dans votre formule pour " Taux défectueux(%) " si vous souhaitez que seules les lignes "Rejetées" de la colonne "Catégorie" soient ignorées.
Je n'ai jamais essayé d'utiliser For each row ou Commencez la mise à jour des données auparavant, je ne sais donc pas comment corriger vos codes actuels à l'aide de ces commandes. Cependant J'ai 2 approches alternatives sur la façon dont vous pouvez obtenir le même résultat.
1) Utilisation de la commande IF (approche plus rapide) :
dt=Tableau de données actuel();
a = (dt<< New Column("DR", "Continuous", Formula(If(:Category == "Reject", "", Char(:Cell Qty / :Daily Total)))))<
dt << Nouvelle colonne ("Taux de défauts (%)", "Continu", valeurs définies (a));
b = (dt<< Nouvelle colonne("Y", "Continuous", Formula(If(:Category == "Binned", Char(:Cell Qty / :Daily Total), ""))))<
dt << Nouvelle colonne ("Rendement", "Continu", valeurs définies (b));
dt<
Étant donné que certaines colonnes sont censées être renvoyées sous forme de colonnes vides (""), les colonnes créées se définiront automatiquement comme colonnes de caractères même si vous les avez déjà définies comme numériques lorsque vous créez les colonnes. C'est pourquoi j'ai créé des colonnes factices supplémentaires pour répondre aux besoins de calcul et défini ces valeurs dans de nouvelles colonnes (" Taux défectueux(%) " et " Rendement ") que vous comptez créer. De cette façon, vous obtiendrez des colonnes numériques.
2) Utilisation des lignes Get où() et des boucles FOR :
dt=Tableau de données actuel();
dt << Nouvelle colonne ("Taux de défauts (%)", "Continu", numérique);
r1 = dt << obtenir les lignes où(:Category!="Reject");
pour (i=1, i<=nrows(r1), i++,
Colonne(dt, "Taux de défauts (%)")[r1 ] = :Quantité de cellules[r1 ] / :Total quotidien[r1 ]
);
dt << Nouvelle colonne("Rendement", "Continu", numérique);
r2 = dt << obtenir les lignes où(:Category=="Binned");
pour (i=1, i<=nrows(r2), i++,
Colonne(dt, "Rendement")[r2 ] = :Quantité de cellules[r2 ] / :Total quotidien[r2 ]
);
Je pense que cette approche sera plus lente si votre ensemble de données est énorme, car la boucle prend plus de temps de traitement.
Résultat final :

J'espère que cela t'aides!
Cordialement,
Val