21 Replies Latest reply: Jan 28, 2016 9:48 AM by Florent Lelarge-Otiniano RSS

    Déterminer valeur min/max en fonction filtre année

    Florent Lelarge-Otiniano

      Bonjour à toutes et à tous,

       

      j'aimerai comparer les valeurs de certains champs  entre ceux de la première semaine du dossier et ceux de la dernière semaine.

      Pour les dossiers débutés dans l'année étudiée, la première semaine porte le N°1. Pour les dossiers débutés l'année N-1, dans l'année étudiée, le N° de semaine est variable (dépend de la semaine de démarrage du dossier...)

      Enfin, la N° de la dernière semaine est variable également...

       

      Je n'arrive pas à m'en sortir...

       

      Merci pour votre aide...

       

      Florent.

        • Re: Déterminer valeur min/max en fonction filtre année
          Aline CLOZEL

          Florent,

           

          Pour ma part j’essaierais avec un set analysis de ce type (j'ai moi aussi pas mal tourné en rond pour trouver la formule sur une année) :

          {<Date= {"$(=Max(Date))"} >}

          Dans ton cas il faudrait avoir un champ combiné avec ANNEE + N°mois (ou de la semaine)

          Chez moi ça marche pour bien retenir la dernière année que j'ai en matière de données statistiques

           

          Tiens moi au courant

            • Re: Déterminer valeur min/max en fonction filtre année
              Florent Lelarge-Otiniano

              En fait, c'est pas si simple :

              je m'explique  :

              le "NO_SEMAINE" = numérotation par dossier des semaines : si je crée un dossier aujourd'hui, son "NO_SEMAINE" sera 1. Pour un dossier créé le 1er janvier 2016, aujourd'hui son "NO_SEMAINE" sera 4...

              Pour une même date, chaque dossier a un "NO_SEMAINE" différent...

               

              J'ai 6 champs scores différents par dossiers et par semaine. Je voudrais comparer les valeurs de ces 6 champs entre la 1ère et la dernière semaine de chaque dossier...

               

              J'ai essayé dans le script de chargement de rajouter les champs "flags" 1ere semaine et dernière semaine par dossier (via la syntaxe group by) mais je dois filtrer ces données une année, et je pense que c'est là que ça coince...

               

              je ne sais pas si c'est plus clair..

            • Re: Déterminer valeur min/max en fonction filtre année
              bruno bertels

              Bonjour Florent

               

              Comme le dit Aline je pense aussi que la solution passe par un set analysis.

               

              Pour t'aider au mieux je pense qu'il faudrait détailler ta demande : par exemple en mettant un tableau excel de l'état de tes données et de ce que tu veux comme représentation finale.

              Voire le mieux un échantillon de ton fichier Qlik Sense

               

              Bruno

                • Re: Déterminer valeur min/max en fonction filtre année
                  Florent Lelarge-Otiniano

                  Bonjour Bruno,

                   

                  je joins la table utilisée (en MAJUSCULE les Champs cibles):

                  je voudrais dans un tableau avoir les valeurs de

                                                   1ère semaine (NO_SEMAINE)                   dernière semaine (NO_SEMAINE)

                  ALIMENTATION              3                                                                    2

                  COMPORTEMENT          4                                                                      2

                  CONTINENCE                  1                                                                    2

                  DEPLACEMENT                1                                                                    1

                  HABILLAGE                      2                                                                    2

                  RELATION                        1                                                                    1




                  Merci d'avance.

                  • Re: Déterminer valeur min/max en fonction filtre année
                    Florent Lelarge-Otiniano

                    le voici en xls.

                     

                    (le logiciel QVEYE permet de lire les QVD et a une fonction d'export xls...)

                     

                    merci.

                      • Re: Déterminer valeur min/max en fonction filtre année
                        bruno bertels

                        Bonjour Florent

                         

                        A partir de ton fichier excel je me suis permis de restreindre les données et garder que certains champs pour me faciliter la tâche.

                         

                        voici ce que cela donne en échantillon :

                         

                        ID_SEJOURDATE_DEBUT_SEMDATE_FIN_SEMN°MoisMoisAnnéeRELATIONALIMENTATIONCOMPORTEMENTCONTINENCEDEPLACEMENTHABILLAGENO_SEMAINENO_SEMAINE_CIVILE
                        40382010/05/201510/11/201510oct.20152224441201541
                        40382011/02/201511/08/201511nov.20152224445201545
                        40382016/11/201522/11/201511nov.20152224447201547
                        40382011/09/201515/11/201511nov.20152224446201546
                        40382010/12/201518/10/201510oct.20152224442201542
                        40382023/11/201529/11/201511nov.20152224448201548
                        40382019/10/201525/10/201510oct.20152224443201543
                        40382026/10/201511/01/201511nov.20152224444201544
                        40382030/11/201512/06/201512déc.20152224449201549
                        40382012/07/201513/12/201512déc.201522244410201550
                        40382014/12/201520/12/201512déc.201522244411201551

                         

                         

                        Je constate que les champs relation alimentation etc , sont des colonnes distinctes dans ta base.

                        Déjà par rapport a çà il y a deux solutions soit passer par un crosstable dans le script pour regrouper ces colonnes sous un même champs "évènements" par exemple, soit dans un tableau passer par une dimension calculée avec la formule VALUELIST.

                         

                        J'ai pris cette deuxième option avec VALUELIST

                         

                        Aussi en regardant la colonne NO_SEMAINE je constate que quelque soit l'évènement (relation alimentation etc) les NO_SEMAINE sont les même.

                         

                        A partir de ça j'ai fait un fichier Qlik Sense ( normalement ouvrable sous Qlikview) en prenant un table avec

                         

                        Filtre ID SEJOUR

                         

                        DIM ID SEJOUR

                         

                        DIM EVENEMENT ( en prenant : valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')

                         

                        puis MESURES :

                        MIN SEM avec cette formule de base : Min({$<NOM_EVENEMENT={'>0'}>}NO_SEMAINE)

                        MAX SEM MAX({$<NOM_EVENEMENT={'>0'}>}NO_SEMAINE)

                         

                        mais pour l'adapter à la DIM Evenement il faut les développer pour chaque évènement en fonction de valuelist : qui dit en somme si la valeur de la liste de valeur de value liste = A alors prendre formule A et ainsi de suite :

                         

                        if(

                        valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                        'ALIMENTATION',Min({$<ALIMENTATION={'>0'}>}NO_SEMAINE),

                        if(

                        valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                        'COMPORTEMENT',Min({$<COMPORTEMENT={'>0'}>}NO_SEMAINE),

                        if(

                        valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                        'CONTINENCE',Min({$<CONTINENCE={'>0'}>}NO_SEMAINE),

                        if(

                        valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                        'DEPLACEMENT',Min({$<DEPLACEMENT={'>0'}>}NO_SEMAINE),

                        if(

                        valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                        'HABILLAGE',Min({$<HABILLAGE={'>0'}>}NO_SEMAINE),

                        if(

                        valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                        'RELATION',Min({$<RELATION={'>0'}>}NO_SEMAINE)))))))

                         

                        valeur dans la colonne évènement avec ceci :

                        Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}ALIMENTATION)

                        ( je ne sais pas si c'est utile)

                         

                        çà me donne çà :

                         

                        Si il y a des évènement en début de semaine sur N-1 il faudra rajouter un set avec MIN(ANNEE) mais je n'en ai pas vu dans tes données.

                         

                        je n'ai pas tester si les formules fonctionne avec des Min Sem et MAX semaine différents suivant les évènements ; pas eu le temps mais je nen ai pas vu non plus dans tes données.

                         

                        voila en espérant que çà te permette d'avancer.

                         

                         

                        Ci joint le QVF

                         

                        Bruno

                          • Re: Déterminer valeur min/max en fonction filtre année
                            Florent Lelarge-Otiniano

                            Ouahou,

                            je suis abasourdi par la rapidité et l'aisance à laquelle tu as sorti cela !

                             

                            par contre, cela remonte la valeur min et max des NO_SEMAINE par ID_Sejour et "Evenement"

                            ce qui je voudrais, c'est la valeur de chaque évenement, par séjour, sur les NO_SEMAINE min et max...

                             

                             

                            Florent.

                              • Re: Déterminer valeur min/max en fonction filtre année
                                bruno bertels

                                Bonjour

                                 

                                Est ce que ceci correspond a ton besoin ?  :

                                 

                                 

                                si oui je te renvois mon fichier test

                                 

                                les deux mesures sont pour

                                * valeur dans l'évènement pour min sem :

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'ALIMENTATION',Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}ALIMENTATION),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'COMPORTEMENT',Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}COMPORTEMENT),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'CONTINENCE',Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}CONTINENCE),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'DEPLACEMENT',Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}DEPLACEMENT),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'HABILLAGE',Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}HABILLAGE),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'RELATION',Min({$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}RELATION)))))))

                                 

                                Et pour valeur dans l'évènement pour MAX sem :

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'ALIMENTATION',min({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'COMPORTEMENT',min({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}COMPORTEMENT),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'CONTINENCE',min({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}CONTINENCE),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'DEPLACEMENT',min({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}DEPLACEMENT),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'HABILLAGE',min({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}HABILLAGE),

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'RELATION',min({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}RELATION)))))))

                                 

                                en gros çà dit pour min semaine

                                 

                                cherche dans la liste d'évènements possibles (A,B,C,D)  l'évènement A :

                                if(

                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                'ALIMENTATION'

                                puis pour le plus petit NO_semaine  de l'événement :

                                {$<NO_SEMAINE={$(=min(NO_SEMAINE))}>}

                                renvoi la valeur trouvée dans l'évènement :

                                min(évènementA) [ici j'ai pris min mais c'est juste pour renvoyer la valeur trouvée

                                 

                                Bruno

                                  • Re: Déterminer valeur min/max en fonction filtre année
                                    Florent Lelarge-Otiniano

                                    ça me semble ça...

                                    du coup, pourquoi le 1er min ?

                                    je faisais         DIM 1 : ID_SEJOUR

                                                          DIM 2 : ALIMENTATION

                                                          EXPR 1 : mod($<NO_SEMAINE={$(=Min(NO_SEMAINE))}>}ALIMENTATION)

                                                          EXPR 2 :mod({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION)

                                     

                                    et ça ne marchait pas...

                                      • Re: Déterminer valeur min/max en fonction filtre année
                                        Florent Lelarge-Otiniano

                                        j'ai aussi remplacer "mod" par "avg"

                                         

                                        puis j'ai essayé avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION),ID_SEJOUR)) en enlevant DIM 1 et ça ne marchait pas non plus... (je ne suis pas sûr ici de la position des parenthèses mais qvw était ok...)

                                          • Re: Déterminer valeur min/max en fonction filtre année
                                            bruno bertels

                                            Re,

                                             

                                            Pour ca  :

                                            j'ai aussi remplacer "mod" par "avg"

                                             

                                             

                                            puis j'ai essayé avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION),ID_SEJOUR)) en enlevant DIM 1 et ça ne marchait pas non plus... (je ne suis pas sûr ici de la position des parenthèses mais qvw était ok...)

                                             

                                            avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION),ID_SEJOUR))


                                            ta formule dit en gros la moyenne de la moyenne des valeurs de ALIMENTATION suivant les semaines distinctes MAX aggrégé par ID SEJOUR


                                              • Re: Déterminer valeur min/max en fonction filtre année
                                                Florent Lelarge-Otiniano

                                                oui, c'est ce que je voulais, mais ca ne marchait pas non plus...

                                                 

                                                 

                                                  • Re: Déterminer valeur min/max en fonction filtre année
                                                    bruno bertels

                                                    OK

                                                     

                                                    je l'ai testé  indépendamment elle marche

                                                     

                                                     

                                                    mais un fois dans un tableau elle n'affiche de résultat que pour alimentation alors que je l'ai adapté pour chaque évenement :

                                                     

                                                    if(

                                                    valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                    'ALIMENTATION',avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION),ID_SEJOUR)),

                                                    if(

                                                    valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                    'COMPORTEMENT',avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}COMPORTEMENT),ID_SEJOUR)),

                                                    if(

                                                    valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                    'CONTINENCE',avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}CONTINENCE),ID_SEJOUR)),

                                                    if(

                                                    valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                    'DEPLACEMENT',avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}DEPLACEMENT),ID_SEJOUR)),

                                                    if(

                                                    valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                    'HABILLAGE',avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}HABILLAGE),ID_SEJOUR)),

                                                    if(

                                                    valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                    'RELATION',avg(aggr(avg(distinct {$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}RELATION),ID_SEJOUR))))))))

                                              • Re: Déterminer valeur min/max en fonction filtre année
                                                bruno bertels

                                                Re

                                                 

                                                alors pour ceci :

                                                ça me semble ça...

                                                du coup, pourquoi le 1er min ?

                                                je faisais         DIM 1 : ID_SEJOUR

                                                                      DIM 2 : ALIMENTATION

                                                                      EXPR 1 : mod($<NO_SEMAINE={$(=Min(NO_SEMAINE))}>}ALIMENTATION)

                                                                      EXPR 2 :mod({$<NO_SEMAINE={$(=Max(NO_SEMAINE))}>}ALIMENTATION)

                                                 

                                                et ça ne marchait pas...


                                                pour MOD voici ce que dit l'aide Mod() est une fonction modulo mathématique qui renvoie le reste non négatif d'une division entière. Je sais pas bien a quoi peut servir cette fonction mais pour Mod( 7,2 ) çà divise 7 par 2 et renvoi le reste si il existe , 0 si le reste est 0 et null si le reste n'est pas un entier

                                                 

                                                Ensuite pour les EXPR 1 et 2 , ceux sont les formes de base qu'il faut ensuite "étendre" à chaque événements possible avec des IF et Valuelist ce qui donne sous la forme complète ceci une fois étendue : ( pour afficher le NO_SEM mini)

                                                if(

                                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                'ALIMENTATION',Min({$<ALIMENTATION={'>0'}>}NO_SEMAINE),

                                                if(

                                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                'COMPORTEMENT',Min({$<COMPORTEMENT={'>0'}>}NO_SEMAINE),

                                                if(

                                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                'CONTINENCE',Min({$<CONTINENCE={'>0'}>}NO_SEMAINE),

                                                if(

                                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                'DEPLACEMENT',Min({$<DEPLACEMENT={'>0'}>}NO_SEMAINE),

                                                if(

                                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                'HABILLAGE',Min({$<HABILLAGE={'>0'}>}NO_SEMAINE),

                                                if(

                                                valuelist('ALIMENTATION','COMPORTEMENT','CONTINENCE','DEPLACEMENT','HABILLAGE','RELATION')=

                                                'RELATION',Min({$<RELATION={'>0'}>}NO_SEMAINE)))))))