Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
J'aimerais créer une dimension qui me permettrait de filtrer mes données.
Actuellement dans QlikView j'ai une table nommée "DEVIS" qui regroupe toutes les lignes de tous les devis émis. Chaque devis peut contenir une ou plusieurs lignes de "Frais", "Achat" ou de "Temps" identifié par le champ "DEVIS_TYPE_LIGNE". Cette table comporte aussi un champ "ETAT_DEVIS" qui indique l'état du devis "envoyé", "validé", "commandé" ou "refusé". Il faut aussi savoir qu'un devis est attaché à une affaire. Il peut donc y avoir plusieurs devis sur une affaire. Les affaires sont nommées sous le format Axxxxxx et les devis sous le format Axxxxxx-01, Axxxxxx-02.
J'aimerais créer un filtre qui mettrait en évidence tous les devis de l'état "Refusé" pour les affaires composées de plusieurs devis.
EX: si une affaire comporte un seul devis en état "refusé" je le prends
si une affaire comporte plusieurs devis dont un refusé, je ne prends pas le "refusé".
Pour ce "filtre" j'avais imaginé l'introduire dans le script directement mais je ne vois pas comment m'y prendre, j'essaie d'utiliser l'expression if() mais sans succès, je n'arrive pas à introduire un nouveau champ.
sinon dans le script :
tmp:
load *,count(devis) as nbDevisAffaire, sum(if(etat='refusé',1,0)) as NbDevisRefus resident Devis group by NoAffaire
load if(nbDevisAffaire=NbDevisRefus,1,0) as FlagRefuse resident tmp
il reste ensuite à faire un join avec la table Affaire
cdt
Bonjour,
il faut faire un peu travailler l'utilisateur, il y a trop de set analysis dans ces applications 😉
Dans Etat :
selectionner 'Refusé' puis sélectionner les valeurs exclues
Dans Affaire :
Sélectionner les valeurs exclues
il reste les affaires comportant que des devis à l'état refusé
(à supposer qu'il n'y a pas de null dans état)
cdt
sinon dans le script :
tmp:
load *,count(devis) as nbDevisAffaire, sum(if(etat='refusé',1,0)) as NbDevisRefus resident Devis group by NoAffaire
load if(nbDevisAffaire=NbDevisRefus,1,0) as FlagRefuse resident tmp
il reste ensuite à faire un join avec la table Affaire
cdt
Bonjour Rémi,
si j'ai bien compris, tu veux filtrer sur les dossiers avec plusieurs devis dont au moins 1 est refusé
je ferai plusieurs passe en script :
1/ je compterai le nb de devis :
//je fais une clé
Matable:
load*,
AFFAIRES as CLEAFFAIRE
from Monfichier;
//puis je compte le nb de dossier par CLEAFFAIRE
left join
load CLEAFFAIRE,
count(distinct DEVIS) as Nb_DEVIS
resident Matable group by CLEAFFAIRE;
2/ je stocke Matable
store Matable into C:\....Matable2.qvd (QVD);
3/ je supprime Matable
drop table Matable;
4/ je charge Matable2 avec un champ avec condition
load*,
if(Nb_DEVIS>1 and ETAT_DEVIS='refusé',1,0) as MonFiltre
from C:\...Matable2.qvd;
et là, normalement, MonFiltre vaut 1 si j'ai plusieurs devis sur 1 affaire dont au moins 1 est refusé, et 0 s'il n'y a qu'1 devis sur une affaire ou aucun devis refusé...
A tester.
Florent
Merci pour ta réponse mais malheureusement le script ne fonctionne pas :
j'ai peut être fait une erreur dans la saisie ?
excuses moi comme il y a un group by
il faut virer * dans load *
mais mettre DEVIS_AFFAIRE pour le relier à Affaire ensuite
Merci beaucoup ça fonctionne parfaitement !
Merci pour ton aide, mais j'ai opté pour la réponse d'Olivier qui m'a semblé plus simple à mettre en place
pas de pb.