Qlik Community

Groupe des Utilisateurs Francophones

Announcements
June 28, 10AM ET: Qlik Nation and Qlik Community present: CyberSleuth REGISTER TODAY
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Quel opérateur logique est mieux approprié ?

Bonjour,

Dans le script ci-dessous se trouve le champ GLOBJ  qui contient des nombres (Les nombres représentent en fait des comptes comptable).

F0911:
LOAD num(GLKCO) as KCO,
GLDCT,
GLDOC,
GLDGJ,
GLMCU,
GLOBJ,
GLSBL,
GLSBLT,
GLLT,
GLPN,
GLFY,
GLAA,
GLEXR,
GLODOC,
GLPDCT,
GLAN8,
GLPO,
GLLNID,
GLPN&'_'&GLFY&'_'&GLSBL&'_'&GLMCU as Key2

FROM
[..\F0911.QVD]
(
qvd) where ((GLOBJ<280000 or GLOBJ>289999) and (GLOBJ<680000 or GLOBJ>689999));

Je voudrais charger les données  des intervalles suivant [280000,289999] et [680000,689999].

Mon soucis c'est comment intégrer cela dans la condition where . Pensez-vous que la clause where suivante est correcte avec les opérateurs logiques utilisés et peut répondre à mon besoin :

FROM
[..\F0911.QVD]
(
qvd) where ((GLOBJ<280000 or GLOBJ>289999) and (GLOBJ<680000 or GLOBJ>689999));

Labels (1)
8 Replies
rlp
Creator
Creator

Vous pouvez isoler le début de l'intervalle avec l'expression:

Subfield( PurgeString( GLOBJ , '[]' ) , ',' , 1 )

et la fin avec:

Subfield( PurgeString( GLOBJ , '[]' ) , ',' , -1 )

Not applicable
Author

Bonjour Richard,

il ne s'agit pas d'exclure uniquement les valeurs qui sont aux extrémités de l'intervalle mais d'exclure totalement les éléments de l'intervalle qui vont de 280000 à 289999 et de 680000 à 689999. Toutes mes excuses pour le besoin mal exprimé si c'est le cas. j'aurais dû écrire [280000;289999] ---> [280000...289999] et [680000,689999] ---> [680000...689999].

cordialement.

rlp
Creator
Creator

J'avais bien compris : lorsque je parlais d' "isoler le début et la fin", je parlais d'expressions à insérer dans votre clause WHERE qui devrait être:

WHERE

     // Est dans le premier intervalle

     (

               Subfield( PurgeString( GLOBJ , '[]' ) , ',' , 1 ) < 280000

     OR

               Subfield( PurgeString( GLOBJ , '[]' ) , ',' , -1 ) < 28999

     )

AND

     // Dans le second intervalle

(

               Subfield( PurgeString( GLOBJ , '[]' ) , ',' , 1 ) < 680000

     OR

               Subfield( PurgeString( GLOBJ , '[]' ) , ',' , -1 ) < 68999

     )

christophebrault
Specialist
Specialist

ET si vous utilisez le début de la valeur du champs :

WHERE left(GLOBJ,2)<>28 or left(GLOBJ,2)<>68;

Ceci répond à votre besoin ?

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
pgrenier
Partner
Partner

Bonjour Raymond,

Les tables de JDE étant très grosses, appliquer des transformations ou des filtres lors du chargement de données peut sensiblement ralentir la vitesse de chargement d'un fichier, même si ce dernier est de format QVD. De fait, afin de permettre à QlikView d'utiliser le chargement optimal (mention Optimized dans le log) de son contenu, aucune transformation ni opération ne doit être effectuée.

Peut-être pourriez-vous d'abord tout charger le contenu dans une table temporaire, puis basculer les informations désirées dans la table finale, tout en applicant les transformations désirées, en utilisant la suggestion de Christophe Brault.

Ainsi, vous auriez le script suivant:

F0911_tmp:

LOAD GLKCO, GLDCT, GLDOC, GLDGJ, GLMCU, GLOBJ, GLSBL, GLSBLT, GLLT, GLPN,
GLFY, GLAA, GLEXR, GLODOC, GLPDCT, GLAN8,GLPO, GLLNID
From [..\F0911.QVD] (qvd);


F0911:

LOAD Num(GLKCO) as KCO, GLDCT, GLDOC, GLDGJ, GLMCU, GLOBJ, GLSBL, GLSBLT, GLLT, GLPN

   , GLFY, GLAA, GLEXR, GLODOC, GLPDCT, GLAN8,GLPO, GLLNID

   , GLPN&'_'&GLFY&'_'&GLSBL&'_'&GLMCU as Key2
Resident F0911_tmp

Where Left(GLOBJ,2)<>28 or Left(GLOBJ,2)<>68;


DROP Table F0911_tmp;


Cordialement,


Philippe

Not applicable
Author

Bonjour Christophe,

Votre réponse est utile dans la mesure où elle m'apprend d'autres aspects de mon problème.

Mais j'ai fini par me rendre compte à partir d'une vérification profonde des données chargées que ma clause initiale (... where ((GLOBJ<280000 or GLOBJ>289999) and (GLOBJ<680000 or GLOBJ>689999));)

répondait déjà à mon besoin car elle exclut les données indésirables du chargement.Merci donc pour votre intervention.

Cordialement

 

Not applicable
Author

Bonjour Philippe,

je remarque qu'en plus de votre intervention utile vous connaissez le système à partir duquel les données sont extraites, en l’occurrence JDE . Merci pour votre intervention, mais la clause where (... where ((GLOBJ<280000 or GLOBJ>289999) and (GLOBJ<680000 orGLOBJ>689999));) de mon script répondait déjà à ma préoccupation sans que je m'en rendre compte.

Par ailleurs je prendrai le temps de faire des tests avant de tirer des conclusions concernant vos dires qui suivent : <<Les tables de JDE étant très grosses, appliquer des transformations ou des filtres lors du chargement de données peut sensiblement ralentir la vitesse de chargement d'un fichier, même si ce dernier est de format QVD. De fait, afin de permettre à QlikView d'utiliser le chargement optimal (mention Optimized dans le log) de son contenu, aucune transformation ni opération ne doit être effectuée.>>

Cordialement.

almamy_diaby
Creator
Creator

where ((GLOBJ<=280000 and GLOBJ>=289999) or(GLOBJ=<680000 and GLOBJ>=689999));