3 Replies Latest reply: Feb 5, 2018 7:52 AM by Martin Sorel RSS

    Comprendre la fonction CONCAT et MATCH dans l'utilisation d'un EXCEL

    Axel Beaugrand

      Bonjour à tous,

       

      Je souhaiterai utiliser un fichier Excel lié à mon application QV, je me suis intéressé aux instructions et on ma recommandé ces deux :

      Concat et MATCH

       

      En effectuant des recherches je m'aperçois que Concat effectue un recherche v et supprime les doublons si je ne me trompe pas ?

      match va tout simplement regarder si le numéro qu'on lui indique est bien dans la liste cependant j'ai du mal à l'intégrer dans un script.

       

      Aurez vous un exemple de script à me présenter svp ?

       

      En vous remerciant pour votre aide, excellente journée !

        • Re: Comprendre la fonction CONCAT et MATCH dans l'utilisation d'un EXCEL
          Martin Sorel

          Bonjour,

          Concat est une fonction d’agrégation (au même titre que sum ou count) qui permet de concaténer les différentes valeurs d'un champs.

          Par exemple , un fichier sous cette forme

           

          Equipe 1 Michel
          Equipe 1 Denis
          Equipe 1Michel
          Equipe 1Marc
          Equipe 1Sophie
          Equipe 2John
          Equipe 2Eric
          Equipe 3Stan
          Equipe 3Clara

           

          Donnera avec le script :

          LOAD A as Equipe,

            Concat(B,'-') as Noms

          FROM

          monfichier.xls

          (ooxml, no labels, table is Feuil1)

          group by A;

           

          La table:

             

          EquipeNoms
          Equipe 1Denis-Marc-Michel-Michel-Sophie
          Equipe 2Eric-John
          Equipe 3Clara-Stan

          En utilisant le qualificatif "Distinct" après Load, on peut élminier les doublons dans le résultat.

          cf l'aide:

          http://help.qlik.com/fr-FR/sense/June2017/Subsystems/Hub/Content/Scripting/StringAggregationFunctions/concat.htm

          Je l'utilise personnellement assez peu dans les scripts, plutôt comme fonction de calcul dans des graphiques.

           

           

          La fonction match retourne la position d'un élément (pas forcément numérique)  s'il est présent dans une liste.

          J'utilise plus fréquemment la fonction "wildmatch" qui permet d'utiliser des caractères 'Joke'r.

          Imaginons des codes produits pour des vêtements qui commencent par F,H,ou E selon qu'ils soient pour femme,homme ou enfant; on peut avoir ce genre de chose:

          Pick(Wildmatch(CODE_PRODUIT, 'F*','H*','E*'), 'Femme','Homme','Enfant') as Catégorie

           

          Dans tous les cas, l'aide en Ligne de Qlik fournit une explication des fonctions et souvent quelques exemples d'utilisation.

           

          Martin

            • Re: Comprendre la fonction CONCAT et MATCH dans l'utilisation d'un EXCEL
              Axel Beaugrand

              Bonjour Martin,

               

              Merci c'est exactement ce que je voulais, je te pose une dernière question pour ainsi comprendre l'utilisation de cette formule dans mon script.

               

              Dans mon app j'ai une table qui présente plein liste de codes, j'ai donc à insérer mon fichier Excel : REF_CODE qui lui rassemble les codes qui m'intéresse...

               

              Je dois donc le joindre par un left join sur la table qui rassemble les codes la recharger puis droper l'ancienne, supprimer les doublons de codes présent dans l'Excel et enfin réaliser un match...

               

              Mais ce que je comprends pas si je fais ma manipulation je n'ai pas besoin d'utiliser ces instruction vu qu'en rechargeant la table il devrait me récupérer que les champs en mode distinct ...

               

              Voici mon code

              FRM_FORMULAIRE0:
              LOAD

              FORM_CODE & '-' & FORM_LIBELLE  as [Code et lib. formulaire],
              FORM_ID_FORM  as @ID_FORM,
              FORM_LIBELLE  as [Nom du formulaire],
              FORM_ID_FORM,
              FORM_ID_OBJET,
              FORM_LIBELLE,
              FORM_DAT_DEB_VAL,
              FORM_DAT_FIN_VAL,
              FORM_ID_ETAB,
              FORM_NUM_VERSION,
              FORM_IND_VALIDATION,
              FORM_CODE

              FROM
              [$(CheminQVD)frm_formulaire.QVD](qvd)
              where FORM_CODE=146 //BILAN TDM6 CSV
              or FORM_CODE=153 //BILAN TDM6 CSS CSC
              or FORM_CODE=118 //VQ11 CSS
              or FORM_CODE=91 //VQ11 CSV VSC
              ;

               

              que j'aimerai transformer comme ca :

              REF_FORMULAIRES:
              LOAD

              ETB,
              [Date Debut],
              [Date Fin],
              Code,
              Libellé,
              [Num Form],
              Designation

              FROM
              [Referentiel-Indic-Soins.xlsx]
              (ooxml, embedded labels, table is [Variables-Form]);

               

               

              FRM_FORMULAIRE0:
              LOAD

              FORM_CODE & '-' & FORM_LIBELLE  as [Code et lib. formulaire],
              FORM_ID_FORM  as @ID_FORM,
              FORM_LIBELLE  as [Nom du formulaire],
              FORM_ID_FORM,
              FORM_ID_OBJET,
              FORM_LIBELLE,
              FORM_DAT_DEB_VAL,
              FORM_DAT_FIN_VAL,
              FORM_ID_ETAB,
              FORM_NUM_VERSION,
              FORM_IND_VALIDATION,
              FORM_CODE

              FROM
              [$(CheminQVD)frm_formulaire.QVD](qvd);

              LEFT JOIN (FRM_FORMULAIRE0)
              LOAD  [Num Form] RESIDENT REF_FORMULAIRES;

              FRM_FORMULAIRE:
              NOCONCATENATE LOAD *
              RESIDENT FRM_FORMULAIRE0

              match(FORM_CODE,([Num Form])>0;


              DROP TABLE FRM_FORMULAIRE0;

              DROP Fields  FORM_CODE;

               

              Je loupe quelque chose la par ce que pour moi ce que je fais ce n'est pas trop utile ...

                • Re: Comprendre la fonction CONCAT et MATCH dans l'utilisation d'un EXCEL
                  Martin Sorel

                  Bonjour,

                  Je ne suis pas sur d'avoir bien compris, le but est de ne garder que les codes présents dans le fichier référentiel?

                   

                  Il n'est pas utile d'utiliser la fonction match; une jointure fera le job (en renommant correctement les champs).

                   

                  Ou de manière plus simple, la fonction Exists() fait parfaitement l'affaire ici:

                   

                  REF_FORMULAIRES:

                  LOAD 

                  distinct

                  [Num Form]

                     FROM

                  [Referentiel-Indic-Soins.xlsx]

                  (ooxml, embedded labels, table is [Variables-Form]);

                   

                   

                  FRM_FORMULAIRE0:

                  LOAD

                   

                  FORM_CODE & '-' & FORM_LIBELLE  as [Code et lib. formulaire],

                  FORM_ID_FORM  as @ID_FORM,

                  FORM_LIBELLE  as [Nom du formulaire],

                  FORM_ID_FORM,

                  FORM_ID_OBJET,

                  FORM_LIBELLE,

                  FORM_DAT_DEB_VAL,

                  FORM_DAT_FIN_VAL,

                  FORM_ID_ETAB,

                  FORM_NUM_VERSION,

                  FORM_IND_VALIDATION,

                  FORM_CODE

                   

                  FROM

                  [$(CheminQVD)frm_formulaire.QVD](qvd)

                  WHERE EXISTS( [Num Form],FORM_ID_FORM);


                  DROP  TABLE REF_FORMULAIRES;



                  Martin