Mantieni l'ordine di precedenza in JSLCiao,
Sto cercando di scrivere uno script che crei un numero di colonne totali per una serie di prodotti. Le colonne con numero dispari rappresentano il numero totale di once e le colonne con numero pari contengono il numero di contenitori. Devo moltiplicare ogni coppia e sommare i risultati. Di seguito ho creato un semplice script, ma la formula risultante nella colonna non contiene le parentesi necessarie per preservare l'ordine di precedenza e la colonna è priva di dati. Ovviamente mi manca qualcosa ma non riesco a capire cosa. In allegato i dati di esempio e lo script.
Grazie!
dt = currentdatatable();
New Column( "DET Current Total TD", Numeric, "Continuous", Format( "Best", 12 ), Formula(
(:Name( "DET_P51_AMT_NEW_1. TD" ) * :Name( "DET_P51_AMT_NEW_2. TD" )) +
(:Name( "DET_P51_AMT_NEW_3. TD" ) * :Name( "DET_P51_AMT_NEW_4. TD" )) +
(:Name( "DET_P51_AMT_NEW_5. TD" ) * :Name( "DET_P51_AMT_NEW_6. TD" )) +
(:Name( "DET_P51_AMT_NEW_7. TD" ) * :Name( "DET_P51_AMT_NEW_8. TD" )) +
(:Name( "DET_P51_AMT_NEW_9. TD" ) * :Name( "DET_P51_AMT_NEW_10. TD" )) ));
Ri: Mantieni l'ordine di precedenza in JSLLe funzioni nella sezione Statistica spesso ignorano i valori mancanti, ma non tutti. Dai un'occhiata!
Ri: Mantieni l'ordine di precedenza in JSLVai tranquillo Vince.Abbiamo bisogno della tua testa saldamente al suo posto.
Grazie per le informazioni su SUM Dan. Non ci avevo pensato!
Ri: Mantieni l'ordine di precedenza in JSLSanto cielo, questo mi ha appena fatto esplodere la testa.
Ci sono altri operatori che non si preoccupano di perdere.
Alla lista dei desideri!!
Ri: Mantieni l'ordine di precedenza in JSLSì, ho finito per usare "Somma" per creare la formula e ha funzionato a meraviglia. Grazie a tutti!
dt << New Column( "DET TOTAL CURRENT Ajax Powder",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Sum(
:"DET_P1_AMT_NEW_1. Ajax Powder" * :"DET_P1_AMT_NEW_2. Ajax Powder",
:"DET_P1_AMT_NEW_3. Ajax Powder" * :"DET_P1_AMT_NEW_4. Ajax Powder",
:"DET_P1_AMT_NEW_5. Ajax Powder" * :"DET_P1_AMT_NEW_6. Ajax Powder",
:"DET_P1_AMT_NEW_7. Ajax Powder" * :"DET_P1_AMT_NEW_8. Ajax Powder",
:"DET_P1_AMT_NEW_9. Ajax Powder" * :"DET_P1_AMT_NEW_10. Ajax Powder"
)
)
);
Ri: Mantieni l'ordine di precedenza in JSLQuesti sono tutti meravigliosi esempi di scripting su come gestire i valori mancanti. Ma c'è una funzione che si occuperà di questo: Sum.
La funzione Somma si trova nel raggruppamento Statistiche dell'editor di formule.
Ri: Mantieni l'ordine di precedenza in JSLUn altro metodo per affrontare le mancanze.
E per elaborare, i valori operati (addizione, sottrazione, confronto) da un valore mancante di solito restituiscono un risultato mancante.
Names default to here(1);
dt = currentdatatable();
// get all rows as matrix
m = dt[0, {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD"
, "DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD"
, "DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD"
, "DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD"
, "DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"
}];
// set all the missing to a value, 0 in this case
m[Loc(ismissing(m))] = 0;
// reset the table to the matrix
dt[0, {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD"
, "DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD"
, "DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD"
, "DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD"
, "DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"
}]; = m;
dt <<NEW column=""></NEW>Ri: Mantieni l'ordine di precedenza in JSLQuesto codice è probabilmente più efficiente.
dt = currentdatatable();
col_list = {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD",
"DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD",
"DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD",
"DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD",
"DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
missing_rows = dt << get rows where(is missing(as column(dt, one_col)));
if (nrows(missing_rows) > 0,
column(dt, one_col)[missing_rows] = 0;
);
);Ri: Mantieni l'ordine di precedenza in JSLSta fallendo a causa di tutti i valori mancanti.Puoi scrivere una formula più complicata o convertire tutti i valori mancanti in 0.
dt = currentdatatable();
col_list = {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD",
"DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD",
"DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD",
"DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD",
"DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
for (k = 1, k <= nrows(dt), k++,
if (is missing(column(dt, one_col)[k]),
column(dt, one_col)[k] = 0;
);
);
);Ri: Mantieni l'ordine di precedenza in JSLCertamente, attaccato. Grazie per l'aiuto!
Ri: Mantieni l'ordine di precedenza in JSLJMP ha rimosso le parentesi perché non erano necessarie: l'ordine di precedenza è prima la moltiplicazione, seguita dall'addizione.Questo segue come vanno le tue parentesi.Ho provato un tavolino e i numeri sono stati verificati.
Puoi allegare il tuo tavolo?Il tuo file di progetto ha cercato un file inesistente.
Ri: Mantieni l'ordine di precedenza in JSLGrazie, ci ho provato e le parentesi scompaiono ancora.
:DET_P51_AMT_NEW_1. TD * :DET_P51_AMT_NEW_2. TD + :DET_P51_AMT_NEW_3. TD * :DET_P51_AMT_NEW_4. TD +
:DET_P51_AMT_NEW_5. TD * :DET_P51_AMT_NEW_6. TD + :DET_P51_AMT_NEW_7. TD * :DET_P51_AMT_NEW_8. TD +
:DET_P51_AMT_NEW_9. TD * :DET_P51_AMT_NEW_10. TD
Ri: Mantieni l'ordine di precedenza in JSLLe parentesi sembrano a posto.Devi inviare il messaggio al tavolo:
dt = currentdatatable();
dt << New Column( "DET Current Total TD", Numeric, "Continuous", Format( "Best", 12 ), Formula(
(:Name( "DET_P51_AMT_NEW_1. TD" ) * :Name( "DET_P51_AMT_NEW_2. TD" )) +
(:Name( "DET_P51_AMT_NEW_3. TD" ) * :Name( "DET_P51_AMT_NEW_4. TD" )) +
(:Name( "DET_P51_AMT_NEW_5. TD" ) * :Name( "DET_P51_AMT_NEW_6. TD" )) +
(:Name( "DET_P51_AMT_NEW_7. TD" ) * :Name( "DET_P51_AMT_NEW_8. TD" )) +
(:Name( "DET_P51_AMT_NEW_9. TD" ) * :Name( "DET_P51_AMT_NEW_10. TD" )) ));