Comment utiliser le nom de la colonne dans la formule ?J'ai un tableau comme ci-dessous. Je dois trouver la somme de (TA008+SA2900 à SA2950+SA3400 à SA3500+TA99) pour chaque élément. Comment jsl peut-il faire cela ?
| Article | SA0100 | SA0801 | SA0804 | SA0817 | SA0818 | SA0871 | SA0874 | SA2930 | SA2950 | SA2982 | SA2983 | SA2984 | SA3403 | SA3404 | SA3422 | SA3423 | SA3424 | SA3452 | SA3474 | SA3476 | SA3477 | SA3491 | SA3534 | SA9706 | SA9787 | SA9798 | SA9901 | SA9908 | TA001 | TA008 | TA029 | TA034 | TA035 | TA088 | TA097 | TA099 |
| 8A630 | 12 | | 2 | | | | | | | | | | | | | | | | | | | | | | | | | 7 | 12 | 2 | | | | | | 7 |
| 8A631 | 18 | 1 | 4 | | | 1 | | | | | | | | | | | | | | | | | | | | | | 11 | 18 | 6 | | | | | | 11 |
| 8A632 | 12 | | 1 | | 3 | 1 | | | | | | | | | | | | | | | | | | | | | | 21 | 12 | 5 | | | | | | 21 |
| A633 | 81 | | 1 | | 2 | 2 | | | | | | | | | | | | | | | | | | | 1 | | | 13 | 81 | 5 | | | | | 1 | 13 |
| A629 | 249 | | | 1 | | 2 | | | | | | | | | | | | | | | | | | | 1 | | | 33 | 249 | 3 | | | | | 1 | 33 |
| A626 | 380 | | | | 2 | 3 | | | | | | | | | | | | | | | | | | | | | | 13 | 380 | 5 | | | | | | 13 |
| A600 | 11 | | 1 | | | | 1 | | | | | | | | | | | | | | | | | 1 | | | | 3 | 11 | 2 | | | | | 1 | 3 |
Automatisation et scriptsMélange et nettoyage des donnéesPersonnalisation de masseRe : Comment utiliser le nom de la colonne dans la formule ?Voici juste une autre façon de gérer les colonnes pour créer une formule :
// expression way
cdt=current data table();
sum_lst2 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If( Contains( {"TA008", "TA099"}, colname ) | (colname >= "SA2900" & colname <= "SA2950") | (colname >= "SA3400" & colname <= "SA3550"),
Insert Into( sum_lst2, col_lst2[i] )
);
);
Eval( Eval Expr( cdt << New Column( "Sums_expr", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );Re : Comment utiliser le nom de la colonne dans la formule ?Ah... cette exigence n'était pas indiquée dans la question initiale.
Cependant, le code permettant de faire ce que vous voulez est répétitif, mais pas difficile.
names default to here(1);
dt=current data table();
colNames = dt << get column names(string);
sumList = "";
if(contains(colNames,"TA008"),
sumList = ":TA008";
);
For(i=2900, i<=2950, i++,
If( contains(colNames,"SA" || char(i)),
if( sumList != "", sumList = sumList || ",");
sumList = sumList || ":SA" || char(i);
)
);
For(i=3400, i<=3500, i++,
If( contains(colNames,"SA" || char(i)),
if( sumList != "", sumList = sumList || ",");
sumList = sumList || ":SA" || char(i);
)
);
if(contains(colNames,"TA099"),
if( sumList != "", sumList = sumList || ",");
sumList = sumList || ":TA099";
);
Eval(
Parse(
"dt << new column(\!"Sums\!",formula(sum( " || sumList ||
" )));"
)
);
Re : Comment utiliser le nom de la colonne dans la formule ?L'ensemble de données est dynamique. Je pourrais avoir des colonnes avec les noms SA3400 à SA3450 et SA2900 à SA2950. Je devrais mentionner plus de 100 noms de colonnes si je suivais cette approche. J'essaie de trouver un moyen de simplifier.
Re : Comment utiliser le nom de la colonne dans la formule ?Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Sums",
formula(
Sum(
:SA2930,
:SA2950,
:SA3403,
:SA3404,
:SA3422,
:SA3423,
:SA3424,
:SA3452,
:SA3474,
:SA3476,
:SA3477,
:SA3491,
:TA008,
:TA099
)
)
);
Ce qui précède ajoutera une nouvelle colonne à votre tableau de données, la somme étant ajoutée des colonnes requises dans la nouvelle colonne.
