Bewahren Sie die Rangfolge in JSLHallo,
Ich versuche, ein Skript zu schreiben, das eine Reihe von Gesamtspalten für eine Reihe von Produkten erstellt. Ungerade nummerierte Spalten stellen die Gesamtzahl der Unzen dar und gerade nummerierte Spalten enthalten die Anzahl der Behälter. Ich muss jedes Paar multiplizieren und die Ergebnisse summieren. Ich habe unten ein einfaches Skript entwickelt, aber die resultierende Formel in der Spalte enthält nicht die Klammern, die zum Beibehalten der Rangfolge erforderlich sind, und die Spalte enthält keine Daten. Offensichtlich fehlt mir etwas, aber ich kann nicht herausfinden, was. Im Anhang sind Beispieldaten und das Skript.
Danke schön!
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" )) ));
Re: Rangfolge in JSL beibehaltenDie Funktionen im Abschnitt Statistik ignorieren oft fehlende Werte, aber nicht alle. Schau sie dir an!
Re: Rangfolge in JSL beibehaltenNimm es locker, Vince.Wir brauchen Ihren Kopf fest an Ort und Stelle.
Danke für die Informationen über SUM Dan. Hatte nicht daran gedacht!
Re: Rangfolge in JSL beibehaltenHeilige Scheiße, das hat gerade meinen Kopf explodieren lassen.
Gibt es andere Betreiber, die sich keine Sorgen machen, dass sie fehlen?
Auf Wunschliste!!
Re: Rangfolge in JSL beibehaltenJa, am Ende habe ich "Summe" verwendet, um die Formel zu erstellen, und es hat wie ein Zauber funktioniert. Danke an alle!
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"
)
)
);
Re: Rangfolge in JSL beibehaltenDies sind alles wunderbare Scripting-Beispiele dafür, wie man mit den fehlenden Werten umgeht. Aber es gibt eine Funktion, die sich darum kümmert: Sum.
Die Summenfunktion befindet sich in der statistischen Gruppierung des Formeleditors.
Re: Rangfolge in JSL beibehaltenEine andere Methode, um mit den Vermissten umzugehen.
Und genauer gesagt, Werte, die mit einem fehlenden Wert bearbeitet werden (Addition, Subtraktion, Vergleich), geben normalerweise ein fehlendes Ergebnis zurück.
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>Re: Rangfolge in JSL beibehaltenDieser Code ist wahrscheinlich effizienter.
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;
);
);Re: Rangfolge in JSL beibehaltenEs schlägt wegen all der fehlenden Werte fehl.Sie können entweder eine kompliziertere Formel schreiben oder alle fehlenden Werte in 0 umwandeln.
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;
);
);
);Re: Rangfolge in JSL beibehaltenSicher, beigefügt. Danke für die Hilfe!
Re: Rangfolge in JSL beibehaltenJMP hat die Klammern entfernt, weil sie unnötig waren – die Rangfolge ist zuerst die Multiplikation, dann die Addition.Das folgt, wie Ihre Klammern gehen.Ich habe eine kleine Tabelle ausprobiert und die Zahlen überprüft.
Kannst du deinen Tisch anhängen?Ihre Projektdatei hat nach einer nicht vorhandenen Datei gesucht.
Re: Rangfolge in JSL beibehaltenDanke, das habe ich versucht und die Klammern verschwinden immer noch.
: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
Re: Rangfolge in JSL beibehaltenDie Klammern sehen OK aus.Sie müssen die Nachricht an die Tabelle senden:
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" )) ));