Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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.
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
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.
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
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 ?