Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

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

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

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

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))

View solution in original post

6 Replies
brunobertels
Master
Master

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

sfatoux72
Partner - Specialist
Partner - Specialist

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))

Anonymous
Not applicable
Author

Bonjour,

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

Maintenant c'est plus clair

Merci ça fonctionne

Anonymous
Not applicable
Author

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

sfatoux72
Partner - Specialist
Partner - Specialist

Dans un Aggr, tu as une expression et une ou plusieurs vrai dimensions (pas de dimension calculée).

Tu ne peux donc pas créer dynamiquement une de tes dimensions.

Donc oui, tu dois créer autant de champ $(vDecoupPlageMinute($1, X)) dans ton FormatDate pour traiter tous tes cas

florent1
Contributor III
Contributor III

Une fois de plus @sfatoux72 tu m'as été d'une aide précieuse. Merci !