Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
frolland
Partner - Contributor II
Partner - Contributor II

Variabilisation d'expression sous Qlik sens

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.

 

 

 

2 Solutions

Accepted Solutions
Ahidhar
Creator III
Creator III

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')

View solution in original post

frolland
Partner - Contributor II
Partner - Contributor II
Author

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 😉

 

 

View solution in original post

4 Replies
Chanty4u
MVP
MVP

Try this

LOAD

    Mesure,

    Concat(Expression, ',') as Formules

RESIDENT YourTable

GROUP BY Mesure;

vinieme12
Champion III
Champion III

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

...

)

Vineeth Pujari
If a post helps to resolve your issue, please accept it as a Solution.
Ahidhar
Creator III
Creator III

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')

frolland
Partner - Contributor II
Partner - Contributor II
Author

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 😉