Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
ab92
Creator II
Creator II

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

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 !

1 Solution

Accepted Solutions
martinien
Partner - Contributor III
Partner - Contributor III

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

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

View solution in original post

3 Replies
martinien
Partner - Contributor III
Partner - Contributor III

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

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

ab92
Creator II
Creator II
Author

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

martinien
Partner - Contributor III
Partner - Contributor III

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