5 Replies Latest reply: Apr 5, 2017 11:33 AM by Sébastien Fatoux RSS

    [Qlik Sense] - Avg d'un Sum : AVG(AGGR(SUM)))

    Nicolas POUJADE

      Bonjour,

       

      Après avoir parcouru la communauté, je n'ai pas réussi à faire ma moyenne de somme.

       

      En base j'ai des dossiers avec 2 flags créé et résolu et une date (de création ou de résolution suivant le flag)

       

      DossierCreeResoluDate

      D1

      1Null01/01/2017
      D1Null101/01/2017
      D21Null01/01/2017
      D2Null102/01/2017

      etc...

       

       

      Je voudrais connaitre la moyenne de dossier créé par jour de semaine.

      Voici le calcul effectué : avg(aggr(sum(Cree), Cree,DateCalendrier.DateFormat.JourSemaine))

      et le résultat obtenu :

      avg(aggr(sum))).png

      Je ne comprends pas pourquoi ma moyenne est divisé par 2.

      Avez-vous une idée ?

       

      Je pensais que cela venait qu'il y avait 2 ligne par dossier, mais si j'essaye d'effectuer un calcul identique sur un autre champ qui ne possède pas de doublon, le résultat obtenu est dans ce cas divisé par 3 ???

       

      Merci pour votre aide.

       

      Nicolas

        • Re: [Qlik Sense] - Avg d'un Sum : AVG(AGGR(SUM)))
          bruno bertels

          Bonjour

           

          Peut être une piste

          Tu aggréges tes données par jour de semaine ( Lundi , Mardi etc)

          Tu as peut être dans ta base que deux semaines de données , et donc deux lundi ,deux mardis etc

           

          sinon inclus un set analysis dans ton aggr :

           

          avg(aggr(

          Sum({$<Cree={1}>}Cree),

          Cree,DateCalendrier.DateFormat.JourSemaine))

           

          Bruno

          • Re: [Qlik Sense] - Avg d'un Sum : AVG(AGGR(SUM)))
            Sébastien Fatoux

            Salut,

             

            Je ne comprend pas pourquoi tu utilise Cree comme dimension dans ton Aggr ?

             

            Ton Aggr te retourne cette table temporaire :

            CreeDateCalendrier.DateFormat.JourSemaineSum(Cree)
            1lun.739
            Nulllun.0
            .........

             

            Donc, lorsque tu fait la moyenne de cette table par DateCalendrier.DateFormat.JourSemaine, tu obtiens : (739 + 0) / 2 = 369.5

             

            Je pense qu'il te faut plutôt utiliser les dimension Date et DateCalendrier.DateFormat.JourSemaine dans ton Aggr pour qu'il te retourne la table temporaire suivante :

            DateDateCalendrier.DateFormat.JourSemaineSum(Cree)
            02/01/2017lun.30
            09/01/2017lun.26
            .........

             

            avg(aggr(sum(Cree), Date, DateCalendrier.DateFormat.JourSemaine))

             

            Tu peux essayé d'ajouter un set analysis en plus pour voir si c'est plus performant:

             

            avg(aggr(sum({$<Cree={1}>}Cree), Date, DateCalendrier.DateFormat.JourSemaine))

              • Re: [Qlik Sense] - Avg d'un Sum : AVG(AGGR(SUM)))
                Nicolas POUJADE

                Bonjour,

                 

                Je n'arrivais pas à visualiser exactement ce que pouvais faire l'aggr.

                 

                Maintenant c'est plus clair

                 

                Merci ça fonctionne

                • Re: [Qlik Sense] - Avg d'un Sum : AVG(AGGR(SUM)))
                  Nicolas POUJADE

                  Bonjour,

                   

                  Je souhaiterais ré-ouvrir le sujet car je voudrais rendre dynamique cette formule suivant une variable.

                   

                  J'utilise une fonction pour pouvoir découper par Minute une date comme suit :

                  /** VARIABLE QUI DECOUPE UNE DATE PAR TRANCHE DE MINUTE **/

                  // ex: $2=15 par quart d'heure ou 30 par demie heure

                  Set vDecoupPlageMinute = MakeTime(Hour($1), (Floor(Minute($1) / $2)) * $2);

                   

                   

                  J'ai défini un format pour mes dates :

                  FormatDate:

                  Declare Field Definition

                  Fields

                      Year($1) As Annee,

                      Month($1) As Mois,

                      Day($1) As Jour,

                      Hour($1) As Heure,

                  ....

                      $(vDecoupPlageMinute($1, 15)) As QuartHeure,

                      $(vDecoupPlageMinute($1, 30)) As DemiHeure;

                   

                  La mesure suivante fonctionne correctement et me renvoie bien par quart d'heure la moyenne d'appel entrant :

                  Num(Avg(Aggr(Sum({<$(vConditionPeriodeAppel)>}Entrant), DateCalendrier, DateComplete.DateFormat.QuartHeure)),'#,##')

                   

                  Je voudrais maintenant remplacer dans ma formule DateComplete.DateFormat.QuartHeure par ma fonction utilisée dans DateFormat pour découper mon champ DateComplete : $(vDecoupPlageMinute(DateComplete, X)) afin de pouvoir changer mon second paramètre et laisser libre l'utilisateur de découper sa date par X minutes.

                   

                  Voici ma mesure utilisant ma fonction :

                  Num(Avg(Aggr(Sum({<$(vConditionPeriodeAppel)>}Entrant), DateCalendrier, $(vDecoupPlageMinute(DateComplete, 15)))),'#,##').

                   

                  Pourquoi cette mesure ne peut fonctionne-t-elle pas ?

                   

                  Suis-je obligé de créer autant de champ $(vDecoupPlageMinute($1, X)) dans mon FormatDate pour traiter tous mes cas ?

                   

                  Merci pour votre aide