Bonjour,
Il y a plusieurs problèmes dans votre expression.
Problème 1 : concaténation
LEFT($(=ANNEEMOIS),4)-1)&12
Vous concaténez une chaîne de caractères et un nombre.
Ce n'est pas conseillé.
LEFT($(=ANNEEMOIS),4)-1)&'12'
Problème 2 : définition de la variable
let vAnneeMois_moins_un = ...
L'utilisation de "LET" signifie "je souhaite que tu évalues tout de suite le résultat de cette expression".
Or vous ne voulez pas que cela soit évalué tout de suite, vous souhaitez obtenir cette chaîne de caractères dans la variable.
Il faut donc utiliser "SET" pour déclarer la variable.
Problème 3 : évaluation immédiate
RIGHT(($(=ANNEEMOIS)-1),2)
Le fait d'utiliser "$(...)" dans un script va immédiatement évaluer le contenu. Il ne faut donc pas utiliser cette syntaxe.
Ma technique, c'est d'écrire "$_(" puis de remplacer par "$" concaténé à "(". On peut aussi utiliser la concaténation de "chr(39)", mais c'est vite illisible.
L'expression que vous voulez obtenir à la fin est :
IF(RIGHT($(=ANNEEMOIS) - 1, 2)='00',(LEFT($(=ANNEEMOIS),4)-1)&'12', $(=ANNEEMOIS)-1)
Il faut donc la déclarer comme celà :
1 2 3
|
SET vAnneeMois_moins_un = IF(RIGHT($_(=ANNEEMOIS) - 1, 2)='00',(LEFT($_(=ANNEEMOIS),4)-1)&'12', $_(=ANNEEMOIS)-1);
LET vAnneeMois_moins_un = replace('$(vAnneeMois_moins_un)', '$_(', '$' & '('); |
Problème 4 : évaluation de la nouvelle condition
Par la suite, l'appel de la variable "vAnneeMois_moins_un" retournera une chaîne de caractères qu'il faudra elle aussi évaluer.
Votre expression devra être :
sum({$ <ANNEEMOIS={"$(=$(vAnneeMois_moins_un))"}>} QTE)
(un "$(=...)" pour demander l'évaluation et un "$(...)" pour récupérer la variable)
Alternatives
Personnellement, si j'avais à créer une variable qui retourne le mois précédent, j'aurais utilisé les fonctions de date :
1 2
| SET vAnneeMois_moins_un = $_(=date(addmonths(date#(ANNEEMOIS, 'YYYYMM'), -1), 'YYYYMM'));
LET vAnneeMois_moins_un = replace('$(vAnneeMois_moins_un)', '$_(', '$' & '('); |
(notez que l'évaluation globale de l'expression est directement inclue pour encadrer mon expression afin d'éviter de devoir la réécrire à chaque utilisation)
Ainsi, j'utiliserai dans mon expression d'application :
sum({$ <ANNEEMOIS={"$(=vAnneeMois_moins_un)"}>} QTE)
Une autre alternative consiste à charger un nouveau champ qui contient l'ANNEEMOIS précédent et se baser sur cette valeur.
1 2 3 4 5
| ANNEEMOIS_precedent:
LOAD
DISTINCT ANNEEMOIS,
text(date(addmonths(date#(ANNEEMOIS, 'YYYYMM'), -1), 'YYYYMM')) AS ANNEEMOIS_precedent
RESIDENT data; |
(en s'assurant avoir bien TOUS les mois présents dans la table)
Et notre expression dans l'appli sera :
sum({$ <ANNEEMOIS=P(ANNEEMOIS_precedent)>} QTE)
Partager