Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je voudrais variabiliser des expressions que je charge via un fichier Excel en vu de paramétrer un PnL.
Si j'ai une formule par variable c'est bon j'y arrive, mais là j'en ai plusieurs (1 par ligne du tableau) et je coince.
Je m'explique, j'ai une table comme ça :
PnLRow | Rank | Mesure | Expression |
1 | 1 | Mesure1 | Formule1 |
2 | 2 | Mesure1 | Formule2 |
3 | 3 | Mesure1 | Formule3 |
4 | 4 | Mesure1 | Formule4 |
5 | 5 | Mesure1 | Formule5 |
6 | 1 | Mesure2 | Formule6 |
7 | 2 | Mesure2 | Formule7 |
8 | 3 | Mesure2 | Formule8 |
9 | 4 | Mesure2 | Formule9 |
10 | 5 | Mesure2 | Formule10 |
Et je souhaiterais générer deux variables comme ça (en réalité il y a en beaucoup plus):
Mesure1 = Formule1,Formule2,Formule3,Formule4,Formule5
Mesure2 = Formule6,Formule7,Formule8,Formule9,Formule10
Je pars avec un for each pour boucler sur les mesures et ensuite j'ai essayé avec un for i ou un do while pour récupérer les formules mais je ne sais pas si on peut passer par un load ou autre. J'utilise la fonction peek mais je n'ai pas les bons éléments pour chaque mesure. A l'heure qu'il est mon code ne ressemble à plus rien 😄
Si vous pourriez me donner des pistes je vous en serais très reconnaissant 🙂
Merci par avance.
try this
tab:
load Measure,
concat(Expression,',') as concat group by Measure ;
load * Inline
[
PnLRow, Rank, Measure, Expression
1, 1, Measure1, Formula1
2, 2, Measure1, Formula2
3, 3, Measure1, Formula3
4, 4, Measure1, Formula4
5, 5, Measure1, Formula5
6, 1, Measurement2, Formula6
7, 2, Measurement2, Formula7
8, 3, Measurement2, Formula8
9, 4, Measurement2, Formula9
10, 5, Measurement2, Formula10
];
and for variables
peek('concat',0,'tab')
peek('concat',1,'tab')
Bonsoir,
Merci beaucoup pour vos retours. J'ai modifié mon code en fonction des conseils à savoir un combiné entre ce que vous avez tous les trois préconisés. Je suis arrivé a faire la génération de mes variables sauf que les formules n'étaient pas dans le bonne ordre. Le programme les renvoie par ordre alpha 😞
Je ne suis pas arrivé à les mettre selon leur ordre prévu dans la table. Je n'ai pas réussi non plus à utiliser "pick(match", quel boulet je suis !!
Du coup j'ai refais mon code et voici le résultat qui fonctionne :
PNLDIM:
Load
RowNo() as PnLRowExp,
PnLDimension, concat(PnLExp,',',PnLRowExp) as Formules
resident [D_PnLExpression]
Group by PnLRowExp,PnLDimension;
let vLigneExp = NoOfRows('PNLDIM');
let vVariable_encours = '';
let vIncrementation_encours= '';
for vI = 0 to vLigneExp - 1 ;
if(IsNull(vVariable_encours) or vVariable_encours <> Peek('PnLDimension',vI,'PNLDIM')) then
if vVariable_encours <> '' then
/* je créé la variable avant de passer a la suivante*/
let [$(vVariable_encours)] = vIncrementation_encours;
end if
/* une nouvelle variable */
vVariable_encours = Peek('PnLDimension',vI,'PNLDIM');
vIncrementation_encours = Peek('Formules',vI,'PNLDIM'); //Reception de la premiere formule
else
/*la variable est la meme que la precedente*/
vIncrementation_encours = vIncrementation_encours & ',' & Peek('Formules',vI,'PNLDIM'); //Reception de la formule
end if
next;
==> Toutes critiques (constructives) seront les bienvenues !!
Merci 😉
Try this
LOAD
Mesure,
Concat(Expression, ',') as Formules
RESIDENT YourTable
GROUP BY Mesure;
Use a Pick() Mactch() combination based on the PnLRow number
=Pick(Match( PnlRow ,
Formula1 //Corresponds to PnlRow=1
,Formula2 //Corresponds to PnlRow=2
,Formula3 //Corresponds to PnlRow=3
...
)
try this
tab:
load Measure,
concat(Expression,',') as concat group by Measure ;
load * Inline
[
PnLRow, Rank, Measure, Expression
1, 1, Measure1, Formula1
2, 2, Measure1, Formula2
3, 3, Measure1, Formula3
4, 4, Measure1, Formula4
5, 5, Measure1, Formula5
6, 1, Measurement2, Formula6
7, 2, Measurement2, Formula7
8, 3, Measurement2, Formula8
9, 4, Measurement2, Formula9
10, 5, Measurement2, Formula10
];
and for variables
peek('concat',0,'tab')
peek('concat',1,'tab')
Bonsoir,
Merci beaucoup pour vos retours. J'ai modifié mon code en fonction des conseils à savoir un combiné entre ce que vous avez tous les trois préconisés. Je suis arrivé a faire la génération de mes variables sauf que les formules n'étaient pas dans le bonne ordre. Le programme les renvoie par ordre alpha 😞
Je ne suis pas arrivé à les mettre selon leur ordre prévu dans la table. Je n'ai pas réussi non plus à utiliser "pick(match", quel boulet je suis !!
Du coup j'ai refais mon code et voici le résultat qui fonctionne :
PNLDIM:
Load
RowNo() as PnLRowExp,
PnLDimension, concat(PnLExp,',',PnLRowExp) as Formules
resident [D_PnLExpression]
Group by PnLRowExp,PnLDimension;
let vLigneExp = NoOfRows('PNLDIM');
let vVariable_encours = '';
let vIncrementation_encours= '';
for vI = 0 to vLigneExp - 1 ;
if(IsNull(vVariable_encours) or vVariable_encours <> Peek('PnLDimension',vI,'PNLDIM')) then
if vVariable_encours <> '' then
/* je créé la variable avant de passer a la suivante*/
let [$(vVariable_encours)] = vIncrementation_encours;
end if
/* une nouvelle variable */
vVariable_encours = Peek('PnLDimension',vI,'PNLDIM');
vIncrementation_encours = Peek('Formules',vI,'PNLDIM'); //Reception de la premiere formule
else
/*la variable est la meme que la precedente*/
vIncrementation_encours = vIncrementation_encours & ',' & Peek('Formules',vI,'PNLDIM'); //Reception de la formule
end if
next;
==> Toutes critiques (constructives) seront les bienvenues !!
Merci 😉