Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

Highlighted
Not applicable

Resident load

Bonjour,

Je cherche à effectuer une comparaison entre des données de 2 tables déjà chargées précédemment dans le script.

Je charge dans un premier temps les nouveaux clients, avec des jointures entre plusieurs tables et des conditions.

Puis je cherche à obtenir des données résultantes de ces nouveaux clients (le CA qu'ils génèrent...). Je veux donc dire que la date_paiement concernant ces données résultantes doit être supérieure à la date de paiement du 1er achat.

Aperçu du script :

//table 1

NouveauxClients:

LOAD

          "date_paiement" as nouveaux_date_paiement,

          "date_creation_compte" as nouveaux_date_creation_compte;

SQL SELECT

          date_paiement,

          date_creation_compte

FROM

    source1

JOIN

    source2

ON...

WHERE date_paiement > date_creation_compte

AND............;

//table 2

Resultant:

LOAD

    "date_paiement" as resultant_date_paiement;

SQL SELECT

    date_paiement

FROM

    source1

JOIN

    source2

ON...

WHERE...;

//table finale de comparaison

Resultantfinal:

LOAD

    nouveaux_date_paiement

Resident NouveauxClients;

JOIN

LOAD

    resultant_date_paiement as rf_date_paiement

Resident Resultant

WHERE rf_date_paiement > nouveaux_date_paiement;

Le problème c'est qu'il ne reconnait pas nouveaux_date_paiement dans la dernière table.

Je sais que c'est normal car le premier LOAD est terminé par un ";" mais je ne vois pas comment faire autrement.

Auriez-vous des idées ?

Merci d'avance

1 Solution

Accepted Solutions
fredericmante
Not applicable

Re: Resident load

bonjour,

essaye ce code:

Table1:

LOAD * INLINE [

    F1

    0

    2

];

Table2:

load * INLINE [

    F2

    1

    2

    3

    4

];

temp:

load max(F1) as F1max resident Table1;

Let Vmax = peek('F1max',0,'temp');

drop table temp;

Tablefinal:

noconcatenate Load F1 resident Table1;

outer Join load F2 resident Table2 where F2 > $(Vmax);

drop table Table1;

drop table Table2;

cdt

9 Replies
flochi75
Not applicable

Re: Resident load

Bonjour Jean-François,

tu n'as pas de message d'erreur au chargement ? car je pense déjà que rf_date_paiement n'est pas encore connu à ce stade, je mettrai plutôt resultant_date_paiement dans le where...

Florent.

Not applicable

Re: Resident load

Bonjour Florent,

J'ai un message d'erreur au chargement mais concernant nouveaux_date_paiement :

Field not found - <nouveaux_date_paiement>

JOIN

LOAD resultant_date_paiement as rf_date_paiement,

Resident Resultant

WHERE resultant_date_paiement > nouveaux_date_paiement

En fait on dirait qu'il oublie le premier LOAD, donc il ne peut pas faire la comparaison...

flochi75
Not applicable

Re: Resident load

tu peux joindre ton appli et une partie des fichiers que tu charges (les champs concernés) ?

je pourrai faire des tests...

Florent.

fredericmante
Not applicable

Re: Resident load

bonjour,

essaye ce code:

Table1:

LOAD * INLINE [

    F1

    0

    2

];

Table2:

load * INLINE [

    F2

    1

    2

    3

    4

];

temp:

load max(F1) as F1max resident Table1;

Let Vmax = peek('F1max',0,'temp');

drop table temp;

Tablefinal:

noconcatenate Load F1 resident Table1;

outer Join load F2 resident Table2 where F2 > $(Vmax);

drop table Table1;

drop table Table2;

cdt

Not applicable

Re: Resident load

Bonjour,

Ce code me donne une erreur de script :

Garbage after statement

outer Join LOAD resultant_date_paiement resident Resultant where resultant_date_paiement > 42607,095280475

fredericmante
Not applicable

Re: Resident load

bonjour donne ton script, il doit manqué des caractères.

A+

Not applicable

Re: Resident load

Voilà mon script :


NouveauxClients:

LOAD Date(Date("date_paiement" , 'DD/MM/YYYY')) As date,

Day(Date("date_paiement" , 'DD/MM/YYYY')) As Jour,

Year(Date("date_paiement" , 'DD/MM/YYYY')) As Annee,

Week(Date("date_paiement" , 'DD/MM/YYYY')) As Semaine,

Month(Date("date_paiement" , 'DD/MM/YYYY')) As Mois,

"date_paiement" as nouveaux_date_paiement,

"date_creation_compte" as nouveaux_date_creation_compte;

SQL SELECT co.date_paiement,

cli.date_creation_compte

FROM *************** as cli

JOIN *************** as co

ON cli.code_client = co.code_client

WHERE co.date_paiement > cli.date_creation_compte;

Resultant:

LOAD Date(Date("date_paiement" , 'DD/MM/YYYY')) As date,

Day(Date("date_paiement" , 'DD/MM/YYYY')) As Jour,

Year(Date("date_paiement" , 'DD/MM/YYYY')) As Annee,

Week(Date("date_paiement" , 'DD/MM/YYYY')) As Semaine,

Month(Date("date_paiement" , 'DD/MM/YYYY')) As Mois,

"date_paiement" as resultant_date_paiement,;

SQL SELECT date_paiement,

FROM ***************;

temp:

LOAD max(nouveaux_date_paiement) as nouveaux_date_paiementmax resident NouveauxClients;

Let Vmax = peek('nouveaux_date_paiementmax',0,'temp');

drop table temp;

Tablefinale:

NoConcatenate LOAD nouveaux_date_paiement resident NouveauxClients;

outer Join LOAD resultant_date_paiement resident Resultant where resultant_date_paiement > $(Vmax);

drop table Resultant;

(je ne fais pas de drop table sur la table NouveauxClients car elle me sert pour d'autres calculs dans mon graphique)

Merci de ton aide

fredericmante
Not applicable

Re: Resident load

essaye avec

....where resultant_date_paiement > '$(Vmax)';

Not applicable

Re: Resident load

Parfait ça marche comme ça !

A moi de voir maintenant si ce script génère bien les chiffres que j'attends. En tout cas merci beaucoup pour ton aide précieuse !