Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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));
Vous pouvez isoler le début de l'intervalle avec l'expression:
Subfield( PurgeString( GLOBJ , '[]' ) , ',' , 1 )
et la fin avec:
Subfield( PurgeString( GLOBJ , '[]' ) , ',' , -1 )
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.
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
)
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 ?
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
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
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.
where ((GLOBJ<=280000 and GLOBJ>=289999) or(GLOBJ=<680000 and GLOBJ>=689999));