Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Pb count distinct

Bonjour

J'essaie de compter les jours distinct d'un mois (ex, tous les lundi, mardi.....) j'ai essayé avec

count(Distinct(JourSemaine),

dans ma base j'obtien jour semaien en faisant :

Weekday(DateDebut) AS JourSemaine,

ma base contient une date a chaque ligne, je voudrais donc "cumuler" mes donnée de type joursemaine j'ai essayé  aussi en utilisant la fonction aggr(countdistinc(Mois, JourSemaine) sans succès

je me suis dis que cela venait de mes dispositions et j'ai rajouté la dimension "Mois" pour voir si c’était bon mais sans succès non plus.

je ne comprends pas ce qu'il faut faire? Quelqu'un aurait une piste . Merci beaucoup

Mes données ci dessous. j'aimerai trouver (en janvier) pour lundi 5, mardi 5 , mercredi 4 ...et si je ne mets pas  la dimension "Mois",

en cumulant janvier ert février (par exemple) : Lundi (9), mardi (9) mercredi (8)......

Labels (1)
1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

L'aggr crée une table temporaire en fonction de l'expression et de la ou des dimensions qui lui ont été fournie en paramètre.

Cette table temporaire va associer ces lignes aux lignes de ton tableau et utiliser la fonction d'agrégation autour de l'aggr pour agréger les lignes du tableau temporaire si plusieurs sont liée à une ligne de ton tableau principal.

Le problème arrive si la table temporaire ne peux pas se lier à toutes les lignes du tableau principal. C'est le problème que tu rencontrais, le tableau principal comporte la dimension Machine alors que l'aggr pas, il va donc se connecter par défaut à la première machine et pas au autres.

Tu peux donc avoir un Aggr avec plus de dimension que le tableau principal, mais pas le contraire. Attention tout de même, plus l'aggr comporte de dimension, plus il sera couteux en place mémoire et en temps de calcul.

Tu voudrais avoir quoi comme données dans ton Cas 2 ?

  • Le nombre de lundi associé à LAV-01
  • ou le nombre de lundi peut importe la machine donc des 9 sur les 6 première lignes

Dans les 2 cas l'aggr devra contenir au minimum les dimension du tableau (JourSemaine, Machine)

, mais c'est la façon d'écrire la fonction count qui va changer.

View solution in original post

11 Replies
Not applicable
Author

bonjour,

juste une idée...

j'essaierais d'ajouter dans le script :

if (num(weekday(date)) = 0, 1,) as Compteur_lundi,

if (num(weekday(date)) = 1, 1,) as Compteur_mardi,

...

ensuite de faire un sum(Compteur_lundi) pour avoir le nombre de lundi sur la période.

sfatoux72
Partner - Specialist
Partner - Specialist

Essaye avec:

Sum(Aggr(Count( Distinct tonChampDate), JourSemaine, Mois))

Anonymous
Not applicable
Author

Bonjour Yves

Désolé du retard et merci de ta réponse.

l'idée est bonne mais je ne vois pas comment faire ensuite dans mon expression car mes jourSemaine sont une dans une dimension..

Anonymous
Not applicable
Author

Bonjour Sébastien

du retard dans mes réponses désolé.

Merci de ton apport. mais ça ne fonctionne pas? ou plutôt, ça ne fonctionne que pour quelques données.

J'ai également remarqué que si ma dimension "JourSemaine" était au premier niveau (dans les dimension) , alors seulement la première valeur de chacun des jour était prise en compte?

Le seul cas ou c'est OK c'est lorsque je n'ai qu'une seule dimension JourSemaine...

une idée ?

Cas N° 1

Cas N° 2

sfatoux72
Partner - Specialist
Partner - Specialist

Lorsque l'on utilise un Aggr dans un tableau, il faut au minimum qu'il contienne les dimensions du tableau, afin qu'il puisse s'y lier correctement.

Dans le cas du tout premier tableau de ta question, il manque Machine :

Sum(Aggr(Count( Distinct tonChampDate), JourSemaine, Mois, Machine))

Pour les tableaux ci-dessus, il manque également Machine, mais Mois n'est pas nécessaire :

Sum(Aggr(Count( Distinct tonChampDate), JourSemaine, Machine))

Anonymous
Not applicable
Author

Bonjour Sébastien

Je ne comprends pas la fonction aggr.. trop bête ou fatigué!

En fait ce que je ne comprends pas c'est que je devrais avoir une valeur fixe, le nombre de jours étant déterminé par le nombre de mois que je sélectionnerais, et non (dans l'exemple) lié a une machine ou a un programme. 

Je voudrai trouver, quelque soit la dimension de mon tableau le nombre de lundi, mardi ou mercredi mais uniquement par rapport a ma sélection sur le mois. la "somme" des JourSemaine Distinct , par rapport au Mois sélectionnés..

sfatoux72
Partner - Specialist
Partner - Specialist

L'aggr crée une table temporaire en fonction de l'expression et de la ou des dimensions qui lui ont été fournie en paramètre.

Cette table temporaire va associer ces lignes aux lignes de ton tableau et utiliser la fonction d'agrégation autour de l'aggr pour agréger les lignes du tableau temporaire si plusieurs sont liée à une ligne de ton tableau principal.

Le problème arrive si la table temporaire ne peux pas se lier à toutes les lignes du tableau principal. C'est le problème que tu rencontrais, le tableau principal comporte la dimension Machine alors que l'aggr pas, il va donc se connecter par défaut à la première machine et pas au autres.

Tu peux donc avoir un Aggr avec plus de dimension que le tableau principal, mais pas le contraire. Attention tout de même, plus l'aggr comporte de dimension, plus il sera couteux en place mémoire et en temps de calcul.

Tu voudrais avoir quoi comme données dans ton Cas 2 ?

  • Le nombre de lundi associé à LAV-01
  • ou le nombre de lundi peut importe la machine donc des 9 sur les 6 première lignes

Dans les 2 cas l'aggr devra contenir au minimum les dimension du tableau (JourSemaine, Machine)

, mais c'est la façon d'écrire la fonction count qui va changer.

kevinchevrier
Partner - Creator III
Partner - Creator III

Voici la formule pour savoir le nombre de lundi dans le mois :

=floor(((MonthEnd(Date(MakeDate(EXERCICE,MOIS,'01'),'DD/MM/YYYY')))-pick((WeekDay((MonthEnd(Date(MakeDate(EXERCICE,MOIS,'01'),'DD/MM/YYYY')))-(1-1)+1)),1,2,3,4,5,6,7)-(MonthStart(Date(MakeDate(EXERCICE,MOIS,'01'),'DD/MM/YYYY'))+1)+8)/7)

Ensuite, pour le nombre de mardi dans le mois tu changes le chiffre en gras ci-dessus :

=floor(((MonthEnd(Date(MakeDate(EXERCICE,MOIS,'01'),'DD/MM/YYYY')))-pick((WeekDay((MonthEnd(Date(MakeDate(EXERCICE,MOIS,'01'),'DD/MM/YYYY')))-(2-1)+1)),1,2,3,4,5,6,7)-(MonthStart(Date(MakeDate(EXERCICE,MOIS,'01'),'DD/MM/YYYY'))+1)+8)/7)


Voici le chiffre à mettre en fonction du jour pour lequel tu veux effectuer le calcul :

Lundi =1

Mardi = 2

Mercredi = 3

Jeudi = 4

Vendredi = 5

Samedi = 6

Dimanche = 7


Tiens moi informé si cela correspond bien à ce que tu recherches.


Kevin

sfatoux72
Partner - Specialist
Partner - Specialist

‌Alors???