Spalte in den angegebenen Zeilen aktualisieren<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich versuche, die Skriptbefehle „Für jede Zeile“ und „Datenaktualisierung beginnen“ zu verwenden, um die Berechnung für eine bestimmte Zeile zu aktualisieren, die sich auf eine Spalte bezieht.
Gemäß der folgenden Tabelle beabsichtige ich, zwei Additionsspalten zu haben, „Fehlerrate (%)“ und „Ertrag“, und beide verwenden die gleiche Gleichung von Zellenmenge/Tagessumme.
Allerdings berechnet die Spalte „Fehlerrate (%)“ nur die Zeilen, in denen „Kategorie = Ausschuss & MRB“ lautet, und in der Spalte „Ertrag“ werden nur die Zeilen berechnet, in denen „Kategorie = Eingeteilt“ ist.
Ich kann diese Aufgabe mit dem IF-Befehl erledigen
dt=Aktuelle Datentabelle();
dt<< Neue Spalte("Fehlerrate(%)", Numerisch, "Kontinuierlich", Formel(Name Expr(If(:Category == "Reject", "MRB" ,:Cell Qty/:Daily Total)))) ;
Ich versuche jedoch zu lernen, wie man die Funktion „Für jede Zeile“ in Kombination mit „Datenaktualisierung beginnen“ verwendet, um das gleiche Ergebnis zu erzielen.
dt<< New Column("Yield", Numeric, "Continuous");
<< Datenaktualisierung beginnen;
Für jede Zeile( :Yield_ = Selected(Row State())=Contains(:Category,"Binned"), :Cell Qty/:Daily Total)
Kann jemand helfen?
Danke,
Kategorie | Arbeitswoche | Datum_PROD. | Zellenmenge | Tägliche Gesamtsumme | Fehlerrate(%) | Ertrag |
| Ablehnen | 25 | 20.06.2016 | 751 | 15553 | | |
| MRB | 25 | 20.06.2016 | 21 | 15553 | 0,00135022 | |
| Verbannt | 25 | 20.06.2016 | 14781 | 15553 | 0,95036327 | 0,95036327 |
| Ablehnen | 25 | 21.06.2016 | 1251 | 31586 | | |
| MRB | 25 | 21.06.2016 | 83 | 31586 | 0,00262775 | |
| Verbannt | 25 | 21.06.2016 | 30252 | 31586 | 0,9577661 | 0,9577661 |
| Ablehnen | 25 | 22.06.2016 | 1276 | 27964 | | |
| MRB | 25 | 22.06.2016 | 42 | 27964 | 0,00150193 | |
| Verbannt | 25 | 22.06.2016 | 26646 | 27964 | 0,95286797 | 0,95286797 |
| Ablehnen | 25 | 23.06.2016 | 126 | 1786 | | |
| MRB | 25 | 23.06.2016 | 5 | 1786 | 0,00279955 | |
| Verbannt | 25 | 23.06.2016 | 1655 | 1786 | 0,92665174 | 0,92665174 |
Betreff: Spalte in den angegebenen Zeilen aktualisierenHallo bernie426,
Meiner persönlichen Erfahrung nach erledigt das IF-Kommando seine Operationen sehr schnell und liefert Ihnen sofortige Ergebnisse, da es sich nur um eine Ja- oder Nein-Situation handelt. Andererseits werden Sie eine spürbare Verzögerung feststellen, bevor Ihre Ergebnisse vollständig durch Schleifen generiert werden, da Schleifenbefehle mit Iterationen umgehen müssen und so lange weiterarbeiten, bis sie die letzte vom Programmierer definierte Iteration erreichen.
Diese Aussagen gelten nur, wenn Sie es mit einem sehr großen Datensatz zu tun haben, der eine beträchtlich große Anzahl von Zeilen und Spalten umfasst, was den IF-Befehl hinsichtlich des Zeitaufwands zu einer überlegeneren Option gegenüber Schleifenbefehlen macht. Bei kleineren Datensätzen ist es jedoch sicher, einen der Befehle zu verwenden, da die Zeitverzögerung für das Auffüllen der Ergebnisse unbedeutend ist.
Beste grüße,
Val
Betreff: Spalte in den angegebenen Zeilen aktualisierenHallo Val,
Vielen Dank für die Lösungsvorschläge, beide funktionieren gut.
Eigentlich habe ich mir einen anderen Formelansatz ausgedacht, der den IF-Befehl verwendet
dt=Aktuelle Datentabelle();
dt<< Neue Spalte("Fehlerrate(%)", Numerisch, "Kontinuierlich", Formel(Name Expr(If((contains(:Category, "MRB")| contains(:Category, "Reject")),: Zellenmenge/:Tägliche Gesamtmenge))));
dt<< New Column("Yield", Numeric, "Continuous", Formula(Name Expr(If(:Category == "Binned",:Cell Qty/:Daily Total))));
Wissen Sie, wie groß der Geschwindigkeitsunterschied s/w bei Verwendung des IF-Befehls und des Schleifenbefehls ist?
Vielen Dank,
Betreff: Spalte in den angegebenen Zeilen aktualisierenHallo,
Basierend auf der erwarteten Ausgabe Ihrer Frage denke ich, dass Ihre Formel einen kleinen Fehler enthält für „ Fehlerrate(%) "-Spalte, wenn nur „Abgelehnte“ Zeilen aus der Spalte „Kategorie“ ignoriert werden sollen.
Ich habe nie versucht, For every row oder zu verwenden Beginnen Sie vorher mit der Datenaktualisierung, daher bin ich mir nicht sicher, wie ich Ihre aktuellen Codes mit diesen Befehlen korrigieren kann. Jedoch Ich habe zwei alternative Ansätze, wie Sie die gleiche Ausgabe erzielen können.
1) Verwendung des IF-Befehls (schnellere Annäherung):
dt=Aktuelle Datentabelle();
a = (dt<< New Column("DR", "Continuous", Formula(If(:Category == "Reject", "", Char(:Cell Qty / :Daily Total)))))<
dt << New Column("Fehlerquote(%)", "Kontinuierlich", Werte festlegen(a));
b = (dt<< New Column("Y", "Continuous", Formula(If(:Category == "Binned", Char(:Cell Qty / :Daily Total), ""))))<
dt << New Column("Yield", "Continuous", set value(b));
dt<
Da einige Spalten als leere Spalten ("") zurückgegeben werden sollen, werden die erstellten Spalten automatisch auf Zeichenspalten festgelegt, auch wenn Sie sie beim Erstellen der Spalten bereits als numerisch definiert haben. Daher habe ich zusätzliche Dummy-Spalten erstellt, um den Berechnungszwecken zu dienen, und diese Werte in neue Spalten eingefügt (" Fehlerrate(%) „ und „ Yield“), die Sie erstellen möchten. Auf diese Weise erhalten Sie numerische Spalten.
2) Verwenden von Get rows where()- und FOR-Schleifen:
dt=Aktuelle Datentabelle();
dt << New Column("Fehlerrate(%)", "Kontinuierlich", numerisch);
r1 = dt << Zeilen abrufen where(:Category!="Reject");
für (i=1, i<=nrows(r1), i++,
Column(dt, „Fehlerrate(%)“)[r1 ] = :Zellenmenge[r1 ] / :Tagesgesamt[r1 ]
);
dt << New Column("Yield", "Continuous", numeric);
r2 = dt << Zeilen abrufen where(:Category=="Binned");
für (i=1, i<=nrows(r2), i++,
Column(dt, „Yield“)[r2 ] = :Zellenmenge[r2 ] / :Tagesgesamt[r2 ]
);
Ich glaube, dass dieser Ansatz langsamer sein wird, wenn Ihr Datensatz sehr groß ist, da Schleifen eine längere Verarbeitungszeit erfordern.
Endgültige Ausgabe:

Hoffe das hilft!
Beste grüße,
Val