Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Cof59
Contributor II
Contributor II

Compter le nombre d'occurences d'une chaines de mots précis dans un champ

Bonjour,

j'ai un fichier csv source provenant des réponses à un questionnaire.

Pour l'une des questions, les répondants devaient choisir entre 1 et 4 termes/phrases qui leur étaient proposés. Au final, ceci se retranscris pour moi dans une chaine de ce type (et ce pour chaque ligne correspondant à un répondant)

Chaque terme/phrase est séparé par un "|" et en plus il peut y avoir des caractères comme "?" , des guillemets etc... Un même terme/phrase ne puet apparaître qu'une et une seule fois pour une ligne correspondant à un répondant.

Ci-joint un fichier exemple : 

J'aimerais, pour chaque terme/phrase pour avoir le nombre de fois où il a été choisie par les répondants en le ventilant par l'âge des répondants (champ "Q2: Age?"

J'ai essayé la fonction substringCount mais ce n'est valable que pour une chaine précise et là, les chaines varient forcément pour chaque ligne .

Merci d'avance pour votre aide

Cdt,

Stéphane

4 Replies
Cof59
Contributor II
Contributor II
Author

Bonjour Boris,

 

Désolé pour ce retard derrière ton message.

J'ai en effet regardé ces discussions et finalement cela ne m'a pas aidé. La seconde discussion marche parfaitement mais pour une chaine de caractère définie. Je n'ai pas réussi à l'appliquer à l'ensemble des chaines de caractères pouvant faire partie d'une des colonnes d'une table de mon modèle.

Au final, il m'a été plus simple d'intervenir sur les données en amont de mon modèle QlikView.

Merci en tout cas pour ce lien vers ces discussions

Bonne journée

dmap_jacky
Contributor III
Contributor III

Bonjour,

Peut-être la solution consiste-t-elle à travailler sur le script en générant un champs réponse qui contient une seule réponse.

Exemple sur ton fichier en prenant le cas d'un maxi de 3 réponses

LOAD
CLE_ID,
"Q2:âge ?",
"Q15:qualités ?",
textbetween("Q15:qualités ?",'|','|') as Rep
// textbetween("Q15:qualités ?",'|','|',2) as Rep2,
// textbetween("Q15:qualités ?",'|','|',3) as Rep3
FROM [lib://AttachedFiles/exemple données.xlsx]
(ooxml, embedded labels, table is Sheet1);

concatenate


LOAD
CLE_ID,
"Q2:âge ?",
"Q15:qualités ?",
textbetween("Q15:qualités ?",'|','|',2) as  Rep

FROM [lib://AttachedFiles/exemple données.xlsx]
(ooxml, embedded labels, table is Sheet1);


concatenate


LOAD
CLE_ID,
"Q2:âge ?",
"Q15:qualités ?",
textbetween("Q15:qualités ?",'|','|',3) as  Rep

FROM [lib://AttachedFiles/exemple données.xlsx]
(ooxml, embedded labels, table is Sheet1);

 

 

L'inconvénient l'on multiplie les enregistrements.

dmap_jacky_0-1655469545506.png

 

Pour 4 choix possibles

ajouter

concatenate


LOAD
CLE_ID,
"Q2:âge ?",
"Q15:qualités ?",
textbetween("Q15:qualités ?",'|','|',4) as  Rep

FROM [lib://AttachedFiles/exemple données.xlsx]
(ooxml, embedded labels, table is Sheet1);

 

dmap_jacky_1-1655469709609.png

 

Dref278
Creator
Creator

Bonjour,

Vous connaissez les réponses possibles, vous pouvez donc les charger dans une table à part, sans lien avec la table des résulat.  Admettons que vous les chargiez dans le champ nommé ReponsesPossibles (J'en ai peut être oublié):

Dref278_0-1660145673764.png

Ensuite, vous pouvez comptabiliser le nombre de réponse en utilisant  la formule suivante basé sur la fonction Subfield qui permet de décomposer une chaine de caractère en indiquant le séparateur :

SUM(IF(WildMatch(ReponsesPossibles,Subfield([Q15:qualités ?],'|',1),Subfield([Q15:qualités ?],'|',2),Subfield([Q15:qualités ?],'|',3),Subfield([Q15:qualités ?],'|',4))>0,1,0))

J'obtiens le résultat suivant :

Dref278_1-1660145782168.png

 

Cdlt

 

Pour avoir une bonne réponse, il faut poser la bonne question (Chat GPT, 2023)