Preservar el Orden de Precedencia en JSLHola,
Estoy tratando de escribir un script que cree una cantidad total de columnas para una serie de productos. Las columnas con números impares representan el número total de onzas y las columnas con números pares contienen el número de contenedores. Necesito multiplicar cada par y sumar los resultados. Se me ocurrió una secuencia de comandos simple a continuación, pero la fórmula resultante en la columna no contiene los paréntesis necesarios para preservar el orden de precedencia y la columna está vacía de datos. Obviamente me estoy perdiendo algo, pero no puedo entender qué. Se adjuntan datos de muestra y el script.
¡Gracias!
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: Preservar el Orden de Precedencia en JSLLas funciones en la sección Estadística a menudo ignorarán los valores faltantes, pero no todos. ¡Échales un vistazo!
Re: Preservar el Orden de Precedencia en JSLTranquilo Vicente.Necesitamos tu cabeza firmemente en su lugar.
Gracias por la información sobre SUM Dan. ¡No había pensado en eso!
Re: Preservar el Orden de Precedencia en JSLMierda, esto acaba de hacer que mi cabeza explote.
¿Hay otros operadores que no se preocupen por perder?
A la lista de deseos!!
Re: Preservar el Orden de Precedencia en JSLSí, terminé usando "Suma" para crear la fórmula y funcionó de maravilla. ¡Gracias a todos!
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: Preservar el Orden de Precedencia en JSLTodos estos son maravillosos ejemplos de secuencias de comandos de cómo lidiar con los valores faltantes. Pero hay una función que se encargará de esto: Sum.
La función Suma se puede encontrar en la agrupación Estadística del Editor de fórmulas.
Re: Preservar el Orden de Precedencia en JSLOtro método para hacer frente a los desaparecidos.
Y para elaborar, los valores operados (suma, resta, comparación) por un valor faltante generalmente arrojan un resultado faltante.
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: Preservar el Orden de Precedencia en JSLEste código es probablemente más eficiente.
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: Preservar el Orden de Precedencia en JSLEstá fallando debido a todos los valores que faltan.Puede escribir una fórmula más complicada o convertir todos los valores faltantes a 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;
);
);
);Re: Preservar el Orden de Precedencia en JSLSin duda, adjunto. ¡Gracias por la ayuda!
Re: Preservar el Orden de Precedencia en JSLJMP eliminó los paréntesis porque eran innecesarios: el orden de precedencia es primero la multiplicación, seguida de la suma.Eso sigue cómo van tus paréntesis.Probé una mesa pequeña y los números se verificaron.
¿Puedes adjuntar tu mesa?Su archivo de proyecto buscó un archivo inexistente.
Re: Preservar el Orden de Precedencia en JSLGracias, lo intenté y los paréntesis aún desaparecen.
: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: Preservar el Orden de Precedencia en JSLLos paréntesis se ven bien.Necesitas enviar el mensaje a la mesa:
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" )) ));