Aggiorna colonna nelle righe specificate<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Provo a utilizzare i comandi di script "Per ogni riga" e "Inizia aggiornamento dati" per aggiornare il calcolo su una riga specifica relativa a una colonna.
Secondo la tabella seguente, intendo avere due colonne di addizione, Tasso difettoso (%) e Rendimento, ed entrambe utilizzano la stessa equazione di quantità di celle/totale giornaliero.
Tuttavia, la colonna Tasso di prodotti difettosi (%) calcolerà solo le righe in cui Categoria = Rifiuta e MRB, mentre la colonna Rendimento calcolerà solo le righe in cui Categoria=Binned.
Posso risolvere il problema utilizzando il comando IF come
dt=Tabella dati corrente();
dt<< Nuova colonna("Tasso di difetti(%)", Numerico, "Continuo", Formula(Espr nome(Se(:Categoria == "Rifiuta", "MRB" ,:Quantità celle/:Totale giornaliero)))) ;
Tuttavia, cerco di imparare come utilizzare For ogni riga combinato con Begin Data Update per raggiungere lo stesso risultato.
dt<< Nuova colonna("Rendimento", Numerico, "Continuo");
<< Inizia l'aggiornamento dei dati;
Per ogni riga(:Rendimento_ = Selezionato(Stato riga())=Contiene(:Categoria,"Contenitore"), :Quantità celle/:Totale giornaliero)
Qualcuno può aiutare?
Grazie,
Categoria | Settimana di lavoro | Data_PROD. | Quantità di celle | Totale giornaliero | Tasso difettoso(%) | Prodotto |
| Rifiutare | 25 | 20/06/2016 | 751 | 15553 | | |
| MRB | 25 | 20/06/2016 | 21 | 15553 | 0,00135022 | |
| Cestinato | 25 | 20/06/2016 | 14781 | 15553 | 0.95036327 | 0.95036327 |
| Rifiutare | 25 | 2016-06-21 | 1251 | 31586 | | |
| MRB | 25 | 2016-06-21 | 83 | 31586 | 0,00262775 | |
| Cestinato | 25 | 2016-06-21 | 30252 | 31586 | 0,9577661 | 0,9577661 |
| Rifiutare | 25 | 22-06-2016 | 1276 | 27964 | | |
| MRB | 25 | 22-06-2016 | 42 | 27964 | 0,00150193 | |
| Cestinato | 25 | 22-06-2016 | 26646 | 27964 | 0,95286797 | 0,95286797 |
| Rifiutare | 25 | 23-06-2016 | 126 | 1786 | | |
| MRB | 25 | 23-06-2016 | 5 | 1786 | 0,00279955 | |
| Cestinato | 25 | 23-06-2016 | 1655 | 1786 | 0.92665174 | 0.92665174 |
Ri: Aggiorna colonna nelle righe specificateCiao Bernie426,
Secondo la mia esperienza personale, il comando IF completa le sue operazioni molto rapidamente e ti restituirà risultati immediati perché gestiscono solo una situazione sì o no. D'altra parte, vedrai un notevole ritardo prima che i risultati vengano completamente generati tramite il looping poiché i comandi di looping devono gestire le iterazioni e continueranno a funzionare fino a raggiungere l'ultima iterazione definita dal programmatore.
Queste affermazioni si applicano solo se hai a che fare con un set di dati enorme che coinvolge una quantità notevolmente elevata di righe e colonne, il che rende il comando IF un'opzione più superiore rispetto ai comandi in loop in termini di consumo di tempo. Tuttavia, per insiemi di dati più piccoli, è sicuro utilizzare uno dei comandi poiché il ritardo temporale per il popolamento dei risultati è insignificante.
Distinti saluti,
Val
Ri: Aggiorna colonna nelle righe specificateCiao Val,
Grazie per le soluzioni suggerite, funzionano entrambe bene.
In realtà, ho escogitato un altro approccio basato sulla formula utilizzando il comando IF come
dt=Tabella dati corrente();
dt<< Nuova colonna("Tasso di difetti(%)", Numerico, "Continuo", Formula(Nome Espr(Se((contiene(:Categoria, "MRB")| contiene(:Categoria, "Rifiuta")),: Qtà celle/:Totale giornaliero))));
dt<< Nuova colonna("Rendimento", Numerico, "Continuo", Formula(Espr nome(Se(:Categoria == "Binned",:Quantità celle/:Totale giornaliero))));
Sai qual è la differenza di velocità tra il comando IF e il comando looping?
Grazie molto,
Ri: Aggiorna colonna nelle righe specificateCIAO,
In base all'output previsto nella tua domanda, penso che ci sia un leggero errore nella tua formula per " Tasso difettoso(%) " se desideri che vengano ignorate solo le righe "Rifiutate" della colonna "Categoria".
Non ho mai provato a utilizzare For ogni riga o Inizia prima l'aggiornamento dei dati, quindi non sono sicuro di come correggere i codici attuali utilizzando tali comandi. Tuttavia Ho 2 approcci alternativi su come ottenere lo stesso risultato.
1) Utilizzando il comando IF (avvicinamento più veloce):
dt=Tabella dati corrente();
a = (dt<< New Column("DR", "Continuous", Formula(If(:Category == "Reject", "", Char(:Cell Qty / :Daily Total)))))<
dt << Nuova colonna ("Tasso di difetti (%)", "Continuo", imposta valori (a));
b = (dt<< Nuova colonna("Y", "Continuo", Formula(If(:Categoria == "Binned", Char(:Cell Qty / :Daily Total), ""))))<
dt << Nuova colonna("Rendimento", "Continuo", imposta valori(b));
dt<
Poiché alcune colonne devono essere restituite come colonne vuote (""), le colonne create verranno automaticamente impostate come colonne di caratteri anche se le hai già definite come numeriche quando crei le colonne. Pertanto ho creato colonne fittizie aggiuntive per servire agli scopi di calcolo e ho impostato questi valori in nuove colonne (" Tasso difettoso(%) " e " Yield") che intendi creare. In questo modo otterrai colonne numeriche.
2) Utilizzando Get rows where() e i cicli FOR:
dt=Tabella dati corrente();
dt << Nuova colonna ("Tasso di difetti (%)", "Continuo", numerico);
r1 = dt << ottieni righe where(:Categoria!="Rifiuta");
for (i=1, i<=nrighe(r1), i++,
Colonna(dt, "Tasso di difetti(%)")[r1 ] = :Quantità celle[r1 ] / :Totale giornaliero[r1 ]
);
dt << Nuova colonna("Rendimento", "Continuo", numerico);
r2 = dt << ottieni righe where(:Category=="Binned");
for (i=1, i<=nrighe(r2), i++,
Colonna(dt, "Rendimento")[r2 ] = :Quantità celle[r2 ] / :Totale giornaliero[r2 ]
);
Credo che questo approccio sarà più lento se il tuo set di dati è enorme poiché il loop richiede tempi di elaborazione più lunghi.
Risultato finale:

Spero che questo ti aiuti!
Distinti saluti,
Val