11 Replies Latest reply: Apr 19, 2017 8:10 AM by f m RSS

    Pb count distinct

    f m

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

        • Re: Pb count distinct
          yves lepape

          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.

          • Re: Pb count distinct
            Sébastien Fatoux

            Essaye avec:

             

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

              • Re: Pb count distinct
                f m

                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

                 

                  • Re: Pb count distinct
                    Sébastien Fatoux

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

                      • Re: Pb count distinct
                        f m

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

                          • Re: Pb count distinct
                            Sébastien Fatoux

                            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.

                    • Re: Pb count distinct
                      Kevin Chevrier

                      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

                        • Re: Pb count distinct
                          f m

                          Merci Kevin

                           

                          ça fonctionne bien également, mais pour des raisons de facilité de lecture je vais passer par un agrégat  qui va couvrir mon besoin sur ce tableau.

                          par contre merci pour la formule qui va me servir pour un autre cas.