Préserver l'ordre de priorité dans JSLBonjour,
J'essaie d'écrire un script qui crée un certain nombre de colonnes totales pour une série de produits. Les colonnes impaires représentent le nombre total d'onces et les colonnes paires contiennent le nombre de conteneurs. Je dois multiplier chaque paire et additionner les résultats. Je suis venu avec un script simple ci-dessous, mais la formule résultante dans la colonne ne contient pas la parenthèse nécessaire pour préserver l'ordre de priorité et la colonne est vide de données. Évidemment, il me manque quelque chose mais je ne sais pas quoi. Vous trouverez ci-joint des exemples de données et le script.
Merci!
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 : Préserver l'ordre de priorité dans JSLLes fonctions de la section Statistique ignorent souvent les valeurs manquantes, mais pas toutes. Vérifie-les!
Re : Préserver l'ordre de priorité dans JSLCalme-toi Vince.Nous avons besoin de votre tête bien en place.
Merci pour les informations sur SUM Dan. Je n'avais pas pensé à celui-là !
Re : Préserver l'ordre de priorité dans JSLPutain de merde, ça m'a juste fait exploser la tête.
Y a-t-il d'autres opérateurs qui ne craignent pas de manquer.
À la liste de souhaits !!
Re : Préserver l'ordre de priorité dans JSLOui, j'ai fini par utiliser "Sum" pour créer la formule et cela a fonctionné comme un charme. Merci tout le monde!
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 : Préserver l'ordre de priorité dans JSLCe sont tous de merveilleux exemples de scripts sur la façon de traiter les valeurs manquantes. Mais il y a une fonction qui s'occupera de ça : Sum.
La fonction Somme se trouve dans le groupement Statistique de l'Editeur de formule.
Re : Préserver l'ordre de priorité dans JSLUne autre méthode pour faire face aux disparus.
Et pour élaborer, les valeurs opérées (addition, soustraction, comparaison) par une valeur manquante renvoient généralement un résultat manquant.
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 : Préserver l'ordre de priorité dans JSLCe code est probablement plus efficace.
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 : Préserver l'ordre de priorité dans JSLIl échoue à cause de toutes les valeurs manquantes.Vous pouvez soit écrire une formule plus compliquée, soit convertir toutes les valeurs manquantes en 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 : Préserver l'ordre de priorité dans JSLAssurément, attaché. Merci pour l'aide!
Re : Préserver l'ordre de priorité dans JSLJMP a supprimé les parenthèses car elles étaient inutiles - l'ordre de priorité est la multiplication en premier, suivie de l'addition.Cela suit comment vont vos parenthèses.J'ai essayé une petite table et les nombres vérifient.
Pouvez-vous joindre votre table?Votre fichier de projet a recherché un fichier inexistant.
Re : Préserver l'ordre de priorité dans JSLMerci, j'ai essayé et les parenthèses disparaissent toujours.
: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 : Préserver l'ordre de priorité dans JSLLes parenthèses semblent correctes.Vous devez envoyer le message à la table :
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" )) ));