Skip to main content
Announcements
Accelerate Your Success: Fuel your data and AI journey with the right services, delivered by our experts. Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Créer un filtre dans le script

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.

1 Solution

Accepted Solutions
ogautier62
Specialist II
Specialist II

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

View solution in original post

8 Replies
ogautier62
Specialist II
Specialist II

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

ogautier62
Specialist II
Specialist II

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

flochi75
Creator III
Creator III

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

Anonymous
Not applicable
Author

Merci pour ta réponse mais malheureusement le script ne fonctionne pas :erreur script.pngtest.png

j'ai peut être fait une erreur dans la saisie ?

ogautier62
Specialist II
Specialist II

excuses moi comme il y a un group by

il faut virer * dans load *

mais mettre DEVIS_AFFAIRE pour le relier à Affaire ensuite

Anonymous
Not applicable
Author

Merci beaucoup ça fonctionne parfaitement !

Anonymous
Not applicable
Author

Merci pour ton aide, mais j'ai opté pour la réponse d'Olivier qui m'a semblé plus simple à mettre en place

flochi75
Creator III
Creator III

pas de pb.