Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
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

Labels (1)
1 Solution

Accepted Solutions
fredericmante
Partner - Contributor III
Partner - Contributor III

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

View solution in original post

9 Replies
flochi75
Creator III
Creator III

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
Author

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
Creator III
Creator III

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

je pourrai faire des tests...

Florent.

fredericmante
Partner - Contributor III
Partner - Contributor III

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
Author

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
Partner - Contributor III
Partner - Contributor III

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

A+

Not applicable
Author

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
Partner - Contributor III
Partner - Contributor III

essaye avec

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

Not applicable
Author

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 !