16 Replies Latest reply: Feb 10, 2017 3:42 AM by Jean Eude RSS

    Set Analysis | Variable | script

    Jean Eude

      Bonjour,

       

       

      Alors voici la colle que je rencontre :

       

      Nous avons une application fonctionnel.

      J'ai ajouté

        - une liste de sélection qui contient les champs : (choix unique et obligatoire)

        selector.indicator_period

        - '1' | 'Dernier mois'                                             | '{<date.month.auto_number={"$' & chr(39) & '(=Max(date.month.auto_number))"}>}'

        - '2' | 'Selection'                                                  | ''

        - '3' | 'Selection + mois precedent la selection'      | '{<date.month.auto_number={">=$' & chr(39) & '(=Min(date.month.auto_number)) <=$' & chr(39) & '(=Max(date.month.auto_number))"}>}'

       

        - une liste de sélection qui contient les champs : (choix multiple)

        selector.indicator

        - '1' | 'stockA'

        - '2' | 'stockB'

        - '3' | 'stockC'

       

      Et j'aimerais ajouter un bouton qui vas sélectionner les clients qui ont un stock* supérieur a 0.

      J'ai donc mis dans un bouton l'action sélection des champs client avec :

        '(' & chr(39) &

        concat(

        {<client.nom={"=sum($(=selector.indicator_period.field) $(=selector.indicator.name)) > 1"}>}

        client.nom, chr(39) & '|' & chr(39))

        & chr(39) & ')'

       

      Je rencontre déjà deux premiers problèmes, dans ma table selector.indicator_period, le set analysis pour Selection + mois precedent.

      Pour qu'il soit complet il faudrait qu'il contienne '>= (min(date) - (max(date) - min(date))) & <= max(date)'.

      La je suis perdu dans les { ( ' " & "} ...

       

      Deuxième soucis, comment gérer le fait qu'on puisse sélectionner plusieurs selector.indicator.name.

      Si on sélectionne les 3 stocks, il faudrait sélectionner les clients dispo pour chaque stock et concaténer chaque en supprimant les doublons ?

       

       

       

      Fin voila, si un courageux/généreux passe dans le coin, je suis preneur 

      Merci,

       

      ps = il y a peut étre une méthode beaucoup plus simple en passant par le script ?

        • Re: Set Analysis | Variable | script
          Jean Eude

          Edit :

          Premier probléme réglé :

           

          Pour le premier points, j'arrive a récupéré les mois séléctionnées et ceux antérieurs avec un Set Analysis de ce type :

          date={">=$(=($(=min(date)) - ($(=Max(date)) - $(=min(date))))) <=$(=Max(date))"}

           

          Je l'ai mis dans mon champs selector.indicator_period.field. Et je l'appel de cette manière :

          =

          concat(

            {<

            $(='$(=selector.indicator_period.field)')

            >}

          date.format.year.month, ' ')

          • Re: Set Analysis | Variable | script
            Sébastien Fatoux

            Concernant la sélection de plusieurs indicateurs (stock), voici une solution. Il faut mettre des or ou des and suivant se que tu désires (un des stock sélectionné > 0 ou tous les stock sélectionné > 0) :

             

            =  '(' & chr(39) &
            concat(
            {<
            client.nom={"=sum($(=if(WildMatch(Concat(selector.indicator.name,','), '*stockA*')>0, 'stockA', 0)))>1 or sum($(=if(WildMatch(Concat(selector.indicator.name,','), '*stockB*')>0, 'stockB', 0)))>1 or sum($(=if(WildMatch(Concat(selector.indicator.name,','), '*stockC*')>0, 'stockC', 0)))>1"}>}
            client.nom, chr(39) & '|' & chr(39))
            &
            chr(39) & ')'

              • Re: Set Analysis | Variable | script
                Jean Eude

                Bonjour et merci de votre réponse,

                 

                 

                J'avais pensé faire quelque chose comme ceci, mais je me suis perdu dans les ' " { (...

                Est ce possible de cette manière ? cela permettrais d'avoir un affichage plus light ? Sinon je passerais par votre méthode.

                 

                =
                '(' & chr(39) &
                concat(
                    {<
                          client.nom={"=sum({< $(=selector.indicator_period.field) >} concat(
                                                                                          selector.indicator_2.field ,
                                                                                          ') > 1"} * {"=sum({<$(=$(=selector.indicator_period.field))>})
                
                                                                                      ) > 1"}
                    >}
                client.nom, chr(39) & '|' & chr(39))
                & chr(39) & ')'
                
                
                
                

                 

                 

                selector.indicator_2.field contenant le ou les Stock sélectionnés.

                selector.indicator_period.field contenant le Set Analysis sélectionné.

                  • Re: Set Analysis | Variable | script
                    Sébastien Fatoux

                    Salut,

                     

                    j'ai travaillé sur ton idée et voici comment l'écrire :

                     

                    =
                    '(' &
                    chr(39) &
                    concat(
                    {<
                    client.nom={"= $(=Concat('sum({< $(=selector.indicator_period.field) >} '& selector.indicator.name &')>1', ' or '))"}>}
                    client.nom, chr(39) & '|' & chr(39))
                    &
                    chr(39) & ')'

                     

                     

                    Toujours en remplaçant le or par un and suivant ton besoin

                      • Re: Set Analysis | Variable | script
                        Jean Eude

                        Yes ! Super ça fonctionne comme ça et c'est encore mieux avec tout dans le concat() ! Merci.

                         

                         

                        J'ai un dernier soucis..

                         

                        A l'heure actuel c'est parfait si je suis sur le dernier mois ou une sélection avec un seul mois.

                        Par contre, si j'ai plusieurs mois dans la sélection, on récupère les clients qui ont un stock supérieur à 0 pour tout les mois.

                         

                        J'aimerais l'avoir pour chaque mois. Si pour un mois le stock* est = à 0 alors on n'affiche pas ce client.

                         

                         

                        Promis c'est ma dernière évols

                         

                        Donc au final voici ce que j'ai à l'heure actuel :

                        Mes tables de sélections :

                        selector.indicator_period:

                        load * inline [

                          selector.indicator_period, selector.indicator_period.name, selector.indicator_period.field

                          1, Last month of selection, 'date.month={' & chr(39) & '$' & '(=Max(date.month))' & chr(39) & '}'

                          2, Selection, ''

                          3, Selection + previous selection, 'date.month={' & chr(39) & '>= $' & '(=(min(date.month) - (Max(date.month) - min(date.month)))) <= $' & '(=Max(date.month))' & chr(39) & '}'

                        ];

                        selector.indicator_2:

                        load * inline [

                          selector.indicator,   selector.indicator.field

                          1,                         stockA

                          2,                      stockB

                          3,                      stockC

                        ];

                         

                        Et mon expression :

                        =

                        '(' & chr(39) &

                        concat(

                          {<

                            client.nom={"=$(=Concat('sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &')>1', ' and '))"}

                          >}

                        client.nom, chr(39) & '|' & chr(39))

                        & chr(39) & ')'

                         

                         

                         

                        La solution que j'envisage serait de modifier mon deuxième Concat() ou selector.indicator.field, pour intégrer un autre Set Analysis qui chaque mois si le stock est > 0 va faire l'intersection de ces mois.

                         

                        Ça ajouterais un autre concat(), un autre Set Analysis, une autre intersection..

                        Mais je vois pas d'autre moyen.

                          • Re: Set Analysis | Variable | script
                            Sébastien Fatoux

                            Pour commencer, j'ai ajouté un DISTINCT pour n'avoir qu'une fois le nom des clients dans la liste concaténée.

                            Ensuite, j'ai ajouté un Aggr pour calculer la somme du stock par client et par mois pour récupérer finalement que la valeur min par client. Et le tour est joué ;-)

                             

                            =

                            '(' & chr(39) &

                            concat( DISTINCT

                              {<

                                client.nom={"=$(=Concat('Min(Aggr(sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &'), date.month, client.nom)) > 1', ' and '))"}

                              >}

                            client.nom, chr(39) & '|' & chr(39))

                            & chr(39) & ')'

                             

                             

                            Vu qu'il y a eut plusieurs sous-questions (donc sous-réponses), mets des utiles ou des recommandations sur les réponses qui t'ont aidé ou que tu souhaites recommander à d'autres membres de la communauté.

                              • Re: Set Analysis | Variable | script
                                Jean Eude

                                Top c'est encore une fois beaucoup plus simple que ce que j'avais commencé à faire !

                                J’étais partie sur une autre sous-étape pour tester chaque mois de chaque client..

                                 

                                Toutes vos réponses ont étés utiles !

                                Encore merci !!

                                • Re: Set Analysis | Variable | script
                                  Jean Eude

                                  Bonjour, désolé de vous embêter une nouvelle fois...

                                   

                                  J'ai parlé trop vite, ça fonctionne pas à 100%, mais à 99,99%... on est pas loin !

                                   

                                  Voici l'expression final :

                                  '(' &

                                  concat(DISTINCT

                                  {<

                                  client.nom={"=$(=Concat('min(aggr(sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &'), date.month, %_customer.id)) > 1', ' and ')) "}

                                  >}

                                  client.nom, '|')

                                  & ')'

                                   

                                  et mes Set Analysis :

                                  (piéce jointe plus simple)

                                   

                                  Le soucis doit être dans les quottes ou l'appel de selector.indicator_period.field

                                  J'ai essayé les 4

                                   

                                  Ce qui est assez étrange, c'est que le last month à l'air de fonctionner.

                                  Et si je quand je test l'utilisation du Set Analysis à part, il s'execute bien :

                                  '(' &

                                  concat(DISTINCT

                                    {<

                                    $(= '$(= selector.indicator_period.field)')

                                    >}

                                  date.month.year_month,  '|' )

                                  & ')' 

                                    • Re: Set Analysis | Variable | script
                                      Sébastien Fatoux

                                      Quelle est la différence entre les champs : date.annee.mois et date.mois ?

                                       

                                      Que contiennent réellement ces champs ?

                                      • Re: Set Analysis | Variable | script
                                        Sébastien Fatoux

                                        Ok,

                                         

                                        Tu dis que ça fonctionne comme ceci, ça te retourne bien les mois désiré:

                                        ----------------------------------------------------------------------------------------------------------------------

                                        '(' &

                                        concat(DISTINCT

                                          {<

                                          $(= '$(= selector.indicator_period.field)')

                                          >}

                                        date.month.year_month,  '|' )

                                        & ')'

                                        ----------------------------------------------------------------------------------------------------------------------

                                         

                                        Par contre dans ton expression tu as écris l'insertion de ton indicateur différemment:

                                        ----------------------------------------------------------------------------------------------------------------------

                                         

                                        '(' &

                                        concat(DISTINCT

                                        {<

                                        client.nom={"=$(=Concat('min(aggr(sum({< $(=selector.indicator_period.field) >} '& selector.indicator.field &'), date.month, %_customer.id)) > 1', ' and ')) "}

                                        >}

                                        client.nom, '|')

                                        & ')'

                                        ---------------------------------------------------------------------------------------------------------------------

                                         

                                        Essaye de l'écrire de la même façon

                                          • Re: Set Analysis | Variable | script
                                            Jean Eude

                                            J'avais essayé, ça me retourne un résultat nul.

                                            Et si j'essaye sans passer par une variable, en mettant le Set en dur :

                                            =

                                            concat(

                                              DISTINCT

                                              {<

                                              client.nom={"=

                                              $(=Concat('

                                              min(

                                              aggr(

                                              sum(

                                              {<

                                              date.annee.mois=, date.annee,

                                              date.mois={'>=$(=(min(date.mois) - (Max(date.mois) - min(date.mois)))) <=$(=Max(date.mois))'}

                                              >}

                                              '& selector.indicator.field &')

                                              , date.month, %_customer.id)

                                              )

                                              > 1', ' and '))

                                              "}

                                              >}

                                            client.nom, ',')

                                             

                                             

                                            De la même manière le Set ne fonctionne pas, il renvoi un résultât nul.

                                            Ce que je ne comprends vraiment pas, c'est qu'il semble fonctionner pour last month..

                                            • Re: Set Analysis | Variable | script
                                              Sébastien Fatoux

                                              Essaye d'écrire ton 3ème indicateur simplement de cette manière :

                                                 

                                              date.annee.mois=, date.annee=,  date.mois={">= $(=(Min(date.month) - (Max(date.month) - Min(date.month)))) <= $(=Max(date.month))"}