2 Replies Latest reply: Mar 1, 2017 3:38 AM by Chloé Delarue RSS

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

    Chloé Delarue

      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.

        • Re: Expression : Sum d'une variable contenant une condition (if)
          Sébastien Fatoux

          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 )