Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Expression : Sum d'une variable contenant une condition (if)

Bonjour,

J'ai une application dans laquelle j'ai de nombreux onglets contenant des tableaux utilisant les mêmes expressions (mais sur des dimensions différentes).

Mes expressions sont de type :

sum( if(LABEL='Toto' and LIBELLE<>'truc' , VALUE_INTEGER , 0 ) )

Pour éviter de répéter ces expressions et donc de multiplier les erreurs possibles, j'aurais souhaité les mettre en variables.

Le problème c'est que si je mets la formule dans la variable telle quelle, dans mes tableaux il me met la même valeur (=somme totale) sur chaque ligne et non répartie selon les dimensions...

Si je ne mets que le if : ma_variable =   if(LABEL='Toto' and LIBELLE<>'truc' , VALUE_INTEGER , 0 )

et que je fais un sum(ma_variable) dans mon tableau... ça ne m'affiche rien...

Mes tableaux contiennent des dimensions autres que label et libelle comme par exemple une date et un nom_user.

Si vous avez une idée pour mettre ce type d'expression en variable et n'appeler que la variable dans le tableau, je suis preneuse

Merci d'avance pour votre aide.

Labels (1)
1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour Chloé,

Voici les réponses à tes questions et une petite remarque:

  • Le problème c'est que si je mets la formule dans la variable telle quelle, dans mes tableaux il me met la même valeur (=somme totale) sur chaque ligne et non répartie selon les dimensions...
    • Tu as certainement mis un = devant ton expression dans ta variable.
      Si tu mets un = devant, l'expression est interprétée en fonction de la sélection. Lorsque tu appelles cette variable, elle te retourne simplement le résultat sans tenir compte du contexte (dimension de ton tableau).
      Si tu ne mets pas le =, la variable contiendra ton expression sous forme de texte et elle sera interprétée lors de son appelle en tenant compte du contexte.
  • Si je ne mets que le if : ma_variable =   if(LABEL='Toto' and LIBELLE<>'truc' , VALUE_INTEGER , 0 )et que je fais un sum(ma_variable) dans mon tableau... ça ne m'affiche rien...
    • Donc là encore, ton expression va être interprétée directement à cause du =, mais cet fois si ton if ne se trouve pas à l'intérieur d'une fonction d'agrégation. Donc chaque référence à un champ dois être lié à une fonction d'agrégation. Si aucune n'est définie, c'est ONLY() qui est utilisée. si tu sélectionnes un LABEL et un LIBELLE tu aura un résultat.

Remarque:

Utilise des set analysis à la place de if à l'intérieur d'une fonction d'agrégation, c'est plus performant :

sum({$<LABEL = {'Toto'}, LIBELLE -= {'truc'}>} VALUE_INTEGER )

View solution in original post

2 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour Chloé,

Voici les réponses à tes questions et une petite remarque:

  • Le problème c'est que si je mets la formule dans la variable telle quelle, dans mes tableaux il me met la même valeur (=somme totale) sur chaque ligne et non répartie selon les dimensions...
    • Tu as certainement mis un = devant ton expression dans ta variable.
      Si tu mets un = devant, l'expression est interprétée en fonction de la sélection. Lorsque tu appelles cette variable, elle te retourne simplement le résultat sans tenir compte du contexte (dimension de ton tableau).
      Si tu ne mets pas le =, la variable contiendra ton expression sous forme de texte et elle sera interprétée lors de son appelle en tenant compte du contexte.
  • Si je ne mets que le if : ma_variable =   if(LABEL='Toto' and LIBELLE<>'truc' , VALUE_INTEGER , 0 )et que je fais un sum(ma_variable) dans mon tableau... ça ne m'affiche rien...
    • Donc là encore, ton expression va être interprétée directement à cause du =, mais cet fois si ton if ne se trouve pas à l'intérieur d'une fonction d'agrégation. Donc chaque référence à un champ dois être lié à une fonction d'agrégation. Si aucune n'est définie, c'est ONLY() qui est utilisée. si tu sélectionnes un LABEL et un LIBELLE tu aura un résultat.

Remarque:

Utilise des set analysis à la place de if à l'intérieur d'une fonction d'agrégation, c'est plus performant :

sum({$<LABEL = {'Toto'}, LIBELLE -= {'truc'}>} VALUE_INTEGER )

Not applicable
Author

Super ça marche,

merci beaucoup