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

Comment compter un nombre de ligne dans un tableau ?

Bonjour,

J'ai créé une table dans Qlik Sense basée sur une base de donnée SQL et un fichier Excel.

J'ai également un volet de filtre par mois.

La base de données contient le CA réalisé par mes commerciaux, le fichier Excel leurs objectifs mois par mois.

J'ai créé une colonne de Mesure dans ma table qui calcule l'écart entre le CA et l'objectif.

Si le CA est supérieur à l'objectif j'écris "Réussi", sinon "Raté".

Je voudrais lorsque je sélectionne 6 mois par exemple pouvoir compter le nombre de mois réussi car suivant celui-ci le pourcentage du calcul de prime peut varier.

Avez-vous une idée ?

Je vous remercie par avance.

5 Replies
flochi75
Creator III
Creator III

Bonsoir philippe,

Normalement, il suffit que tu fasses un count(if(mon_champ='reussi',mois) pour compter toute les valeurs du champ "mois" dont sur la ligne le champ "mon_champ" contient 'reussi'.

Si tu rajoutes "distinct" il ne comptera qu'une fois chaque valeur de "mois", soit 6...
Florent.

Not applicable
Author

Bonjour et merci pour cette réponse.

Malheureusement cela ne fonctionne pas (ou alors je ne sais pas comment). La colonne dans laquelle s'inscrit "Raté" ou "Réussi" n'est pas un champ de ma requête, mais un calcul que je fait à la volée dans le tableau Qlik.

Ma requête me renvoie 4 choses :

- Le prix de vente (VenteSession)

- Le coût (Couts)

- Le prix de vente totale (VenteSessionTotale)

- La date de la vente (DateFin)

Et je récupère via Excel les objectifs (ObjectifsMarge)

Voilà le calcul que je fais dans mon tableau pour obtenir "Raté" ou "Réussi" :

if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi')

Cela fonctionne très bien.

J'ai donc adapté cela à la réponse fournie et j'ai fait ceci (sachant que dans l'exemple donné il manque une parenthèse)  :

count(if((sum(PrimeVenteSession)-(sum(PrimeCouts)/(sum(PrimeVenteSessionTotale)/sum(PrimeVenteSession)))*1)-Sum(ObjectifsMarge)<0,DateFin))

Et j'obtiens le message d'erreur suivant : "Nested aggregation not allowed"

Je suis complètement bloqué, si quelqu'un peut m'aider...

Merci d'avance

flochi75
Creator III
Creator III

ce qu'il faudrait alors, c'est de faire dans le script de rechargement :

une concaténation de tes 2 tables (genre "left join"),

rechager ta table avec un

load*,

if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi') as ATTEINTE_OBJECTIF,

load * inline

resident Matabble_concaténée;

et après, dans ton graphe tu appliques l'expression

count(if(ATTEINTE_OBJECTIF='Réussi',mois)


Florent.

Not applicable
Author

Bonjour,

Encore merci pour ta réponse, mais je ne suis pas bien familier et ces LOAD et je n'arrive pas à le faire fonctionner.

Je t'explique précisément ce que j'ai fait :

Dans le chargement j'ai un MAIN avec 3 requêtes :

- J'ai un premier SELECT qui me renvoie un IDSession avec le CA, la date et le nom du commercial (il est nommé Sessions : )

- J'ai un deuxième SELECT qui me renvoie un IDSession avec le coût de la session (nommé Couts : )

- J'ai un troisième SELECT qui me renvoie un IDSession avec le prix de vente totale ( Nommé VentesTotales : )

Donc dans mon modèle de données, ces trois tables sont reliées sur l'IDSession

Ensuite, dans le chargement,j'ai rajouté une session Objectifs qui me permet de charger mon fichier Excel :

- J'ai un LOAD qui me renvoie la date, le nom du commercial et l'objectif de CA (nommé Objectifs)

Qilk m'a donc créé une relation entre cette table et la première basée sur la date et le nom du commercial

Comme tu me l'as dit, j'ai rajouté à la suite de ce LOAD, les informations suivantes :

load*,

if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi') as ATTEINTE_OBJECTIF,

load * inline

resident Sessions;

Lorsque je lance le chargement, j'ai en retour "Field not found - <Couts>

Dans la partie "Resident" puis-je/dois-je déclarer plusieurs tables ? (il me semble que l'erreur vient de là)

Merci pour ton aide

Philippe

flochi75
Creator III
Creator III

je ne pense pas que tu puisse appeler plusieurs tables mais :

il faut que tu nommes la table appelée dans le script : par exemple tes données utilisées dans le "resident" sont dans la table BDD.xls :

Sessions:

load*,

from BDD.xls

load*,

if((sum(VenteSession)-(sum(Couts)/(sum(VenteSessionTotale)/sum(VenteSession)))*1)-Sum(ObjectifsMarge)<0,'Raté','Réussi') as ATTEINTE_OBJECTIF,

load * inline

resident Sessions;

si tes données sont dispersées dans plusieurs tables, à mon avis tu doit en générer avant une seule, et appeler cette dernière...

si ça ne marche pas, peux tu joindre ton app et les fichiers sources ?