12 Replies Latest reply: Nov 24, 2016 5:31 AM by Djotohou Stella RSS

    Calcul en qlikview

    Djotohou Stella

      Bonjour,

      J'ai un soucis pour traduire une requete sous forme de formule en qlikview.

      ma requete est la suivante:

      select sum(valeur) from (
      select sum(value)/count(distinct codart) as valeur from tz_week_month_split tz

      where tz.type = 'WEEK'

      and tz.idaction = '00000000000SYSREP161010252345'

      and tz.codmeasure = 'QTYESTIMATEDDISPLAY'

      group by coddisplay)


       

      et voici la traduction que j'en fait avec une formule qlikview

       

       

      SUM(

          Aggr(

              Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> }     

                     FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT(DISTINCT FORECAST_F.CODART),

              FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

          )

      )

       

      la formule ne me donne pas la même réponse avec la requete,

      Ma requete me retoure 840 ce qui n'est pas le cas de ma formule


      Pouvez vous m'aider si le problème se trouve au niveau de la syntaxe de ma formule. Depuis des heures je ne trouve pas la solution.


      Merci d'avance

        • Re: Calcul en qlikview
          Sébastien Fatoux

          Bonjour,

           

          le set analysis doit être défini dans la fonction sum, mais également dans la fonction Count. Sinon, ces 2 fonctions ne sont pas executé sur le même set de données:

           

          SUM(

              Aggr(

                  Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> }     

                        FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> } DISTINCT FORECAST_F.CODART),

                  FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

              )

          )

            • Re: Calcul en qlikview
              Djotohou Stella

              Bonjour,

              J'ai apporté la correction dans le count également et quand je l'exécute le resultat est 0. Je n'ai toujours pas la même réponse que la requete, je ne comprend plus rien ce cette formule. Je voudrais savoir si c'est la bonne interpretation que j'ai fait de la requete?

               

              Merci

                • Re: Calcul en qlikview
                  Sébastien Fatoux

                  En regardant mieux votre requête, j'ai remarqué que le group by ne se fait que sur CODDISPLAY, alors que dans l'expression vous le faisiez également sur  IDACTION

                   

                  SUM(

                      Aggr(

                          Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> }     

                                FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> } DISTINCT FORECAST_F.CODART),

                          FORECAST_F.CODDISPLAY

                      )

                  )

                   

                   

                  C'est par contre étrange que vous ayez 0

                    • Re: Calcul en qlikview
                      Sébastien Fatoux

                      Je crois que j'ai trouvé le problème, il y avait des "<", ">" un peu partout dans le set analysis :

                       

                       

                      SUM(

                          Aggr(

                              Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}, FORECAST_F.TYPE ={'WEEK'}, FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}>} FORECAST_F.QTYESTIMATEDDISPLAY )  /  COUNT( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}, FORECAST_F.TYPE ={'WEEK'}, FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}>} DISTINCT FORECAST_F.CODART),

                              FORECAST_F.CODDISPLAY

                          )

                      )

                      • Re: Calcul en qlikview
                        Djotohou Stella

                        Oui c'est d'autre condition que j'ai ajouté dans la formule, mais cela ne change en rien la réponse que je trouve.

                        Pour ce fais j'ai donc decidé de faire des jeux de tests pour mieux comprendre ce qui se passe dans Qlikview et voila ce qui en ressort: j'ai donc fait une table pour voir mes valeurs recherchées test.png

                        avec ma requete j'ai bien les 840. Mais quand je fais une somme de mes valeurs, j'ai 6760.

                        J'ai n'est que faire

                        sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

                                       FORECAST_F.QTYESTIMATEDDISPLAY)

                        De la je me suis dit que tout va mal. Je ne sais pas ce que Qlikview me calcul pour sortir 6760 au lieu de 840

                          • Re: Calcul en qlikview
                            Sébastien Fatoux

                            Pas de panique ;-)

                             

                            Dans ton objet "Zone table", Qlikview n'affiche qu'une ligne par combinaison.

                            Pour confirmer cela, crée un objet de type "Graphique"."Tableau simple", sélectionne tes 3 champs comme dimension et ajoute l'expression Sum(1), Tu auras pour chaque combinaison le nombre de ligne chargée.

                             

                            Si le nombre de ligne est trop important, c'est surement une erreur dans ton script de chargement.

                              • Re: Calcul en qlikview
                                Djotohou Stella

                                J'ai fait comme tu me l'as dit en créant une table simple et remit la formule dans expression. j'ai aussi rajouté le champ FORECASTART(pour les articles) pour voir les articles par semaine et j'obtiens ça(voir tableau):

                                exactement les mêmes données que la base de données ou j'ai appliqué la requete suivante:

                                select sum(valeur) from (
                                select sum(FORECAST_F.QTYESTIMATEDDISPLAY)/count(distinct FORECAST_F.CODART) as valeur from tz_week_month_split tz

                                where
                                tz.idaction = '00000000000SYSREP161010252345'
                                group by coddisplay,tz.idaction


                                Le resultat de cette requete me retournait 840

                                test2.png

                                et la sommeQT est calculé à partir de ça:

                                  Sum({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>} FORECAST_F.QTYESTIMATEDDISPLAY)  

                                             


                                et moi pour interprèter cette dans Qlikview j'ai donc procédé comme suit:


                                =SUM(

                                    Aggr(

                                        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

                                              FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>} DISTINCT FORECAST_F.CODART),

                                        FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

                                    )

                                ) ma formule me donne une réponse très loin de la valeur attendu.

                                Dans un premier temps, j'ai donc fait ceci:

                                 

                                SUM(

                                    Aggr(

                                        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

                                              FORECAST_F.QTYESTIMATEDDISPLAY ),

                                        FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

                                    )

                                )   

                                                /

                                SUM(AGGR(COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}> } DISTINCT FORECAST_F.CODART),FORECAST_F.CODDISPLAY, FORECAST_F.IDACTION))

                                 

                                mais je trouve 751,11 au lieu de 840

                                j'ai vraiment besoin d'aide sur cette formule.

                                peut-on faire un group by sans aggrega? (une question que je me pose)

                                  • Re: Calcul en qlikview
                                    Sébastien Fatoux

                                    Salut,

                                     

                                    Je crois que je suis sur une piste, peux-tu :

                                    • Créé une table simple
                                      • Avec les dimensions suivantes :
                                        • FORECAST_F.IDACTION
                                        • FORECAST_F.TYPE
                                        • FORECAST.CODEMEASURE
                                        • FORECAST_F.QTYESTIMATEDDISPLAY
                                        • FORECAST_F.CODART)
                                        • FORECAST_F.CODDISPLAY
                                      • Avec l'expression suivante:
                                        • Sum(1)
                                    • Me transmettre le résultat sous forme de fichier Excel

                                     

                                    Pour joindre un fichier, il faut utiliser l'éditeur avancé et cliquer sur Joindre en bas à droite

                                      • Re: Calcul en qlikview
                                        Djotohou Stella

                                        Bonjour Sébastien,

                                         

                                        Hier j'ai pas pu te répondre à temps. Je crois savoir d'ou viens mon problème,

                                        c'est au niveau de mon modèle de données des duplications de ligne ce qui fait que quand je fait la somme des

                                        • FORECAST_F.QTYESTIMATEDDISPLAY =20

                                        pour une même semaine, il me sort le double(exemple pour la semaine 37 pour le FORECAST_F.CODART= B1822501, il me sort une somme de 40. Ce qui est fausse, normalement je devrait avoir 20)

                                        La formule qu'on a fait est juste, mais pour eviter ce problème de doublon, j'ai un ami qui m'a conseillé de créer un aggrega sur le champ dans la somme mais je ne sais comment le faire. Tu sauras m'aider?

                                         

                                        La formule est la suivante:

                                        SUM(

                                            Aggr(

                                                Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

                                                      FORECAST_F.QTYESTIMATEDDISPLAY

                                                   )

                                                       /COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}> } DISTINCT FORECAST_F.CODART),FORECAST_F.CODDISPLAY, FORECAST_F.IDACTION

                                                )

                                            )

                                         

                                        Il faut que je prenne en compte dans ma formule l'unique valeur de FORECAST_F.QTYESTIMATEDDISPLAY

                                        et non les doublons.

                                         

                                        Merci

                                          • Re: Calcul en qlikview
                                            Sébastien Fatoux

                                            Le mieux, ce serait de résoudre tes problèmes de doublon.

                                             

                                            Si j'ai bien compris, QTYESTIMATEDDISPLAY est unique par CODDISPLAY et par semaine.

                                            Si cela est bien le cas, tu peux utiliser simplement l'expression ci-dessous.

                                             

                                            =Sum(
                                                 
                                            Aggr(
                                                      
                                            Only( {$<IDACTION={'00000000000SYSREP161010252345'}>}  QTYESTIMATEDDISPLAY ),
                                                      
                                            CODDISPLAY, semaine
                                                  )
                                            )

                                             

                                             

                                            Tu peux utiliser soit Only, soit Avg. Si pour une semaine et un CODDISPLAY le postulat de départ n'est pas respecté:

                                            • Only retournera Null pour cette combinaison
                                            • Avg retournera la moyenne des QTYESTIMATEDDISPLAY pour cette combinaison
                                              • Re: Calcul en qlikview
                                                Djotohou Stella

                                                , J'ai le sourire. c'est tout a fait la réponse que j'attendais. Oui pour chaque semaine le code QTYESTIMATEDDISPLAY

                                                est unique.

                                                Sum(

                                                              aggr(

                                                                    Only(

                                                                         {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

                                                              FORECAST_F.QTYESTIMATEDDISPLAY),FORECAST_F.CODDISPLAY,FORECAST_F.STARTDATE

                                                              )

                                                            )

                                                           

                                                Vraiment merci pour la réponse je vais pouvoir continuer avec le reporting. Pour le problème de doublon, je vais laisser le développeur de l'appli s'en chargé car on m'a juste demander de corriger les tickets.


                                                resultat.png

                                                Enfin, je peux sauter au plafond .

                                                Merci Sébastien