Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
Je récupère d'un fichier de base de donnée 3 champs pour la date (année / mois / jour).
Je concatène ces derniers, pour obtenir un champ reconnu comme une date, de la manière suivante :
AN&'-'&MOIS&'-'&JOUR as DATE
Jusque là QlikView reconnaît bien mon champ comme une date.
En revanche je veux, dans mon script, exclure les données rattachées à une date ultérieure. Exemple <=28/02/2018 (soit 43131 date depuis le 1er janvier 1900).
Pour ceci j'utilise un where.
Ci-dessous mon script :
LOAD
Champ 1,
Champ 2,
AN&'-'&MOIS&'-'&JOUR as DATE;
SQL SELECT *
FROM BDD
WHERE DATE<= 43131;
J'ai un message d'erreur comme quoi mon champ DATE est introuvable.
Merci d'avance pour votre aide.
Cdlt Baptiste.
C’est normal
Ton chargement comporte 2 partie bien distinctes. la première à s’exécuter est celle du bas (en orange), dans ce cas c’est une requête SQL qui est envoyée à la base de donnée qui va te retourner un jeu de données qui sera exploitées par la seconde partie (en vert).
La seconde partie est du pur script Qlik.
LOAD
Champ 1,
Champ 2,
AN&'-'&MOIS&'-'&JOUR as DATE;
SQL SELECT *
FROM BDD
WHERE DATE<= 43131;
Tu comprends du coup que tu ne peux pas utiliser dans la 1ère partie (Orange) un champ qui est créé dans la 2eme partie (vert)
Tu as alors 2 possibilités:
1) Tu exportes tout de la table (Orange) et tu filtre dans Qlik.
LOAD
Champ 1,
Champ 2,
MakeDate(AN, MOIS, JOUR) as DATE
WHERE MakeDate(AN, MOIS, JOUR) <= MakeDate(1900);
SQL SELECT *
FROM BDD;
2) Tu récupères de la base de données uniquement les données dont tu as besoin. Dépend de la base de données (ci-dessous un exemple pour SQL Server)
LOAD
Champ 1,
Champ 2,
MakeDate(AN, MOIS, JOUR) as DATE;
SQL SELECT *
FROM BDD
WHERE CAST(AN+'-'+MOIS+'-'+JOUR as DATE ) >= CAST('1900-01-01' as DATE );
C’est normal
Ton chargement comporte 2 partie bien distinctes. la première à s’exécuter est celle du bas (en orange), dans ce cas c’est une requête SQL qui est envoyée à la base de donnée qui va te retourner un jeu de données qui sera exploitées par la seconde partie (en vert).
La seconde partie est du pur script Qlik.
LOAD
Champ 1,
Champ 2,
AN&'-'&MOIS&'-'&JOUR as DATE;
SQL SELECT *
FROM BDD
WHERE DATE<= 43131;
Tu comprends du coup que tu ne peux pas utiliser dans la 1ère partie (Orange) un champ qui est créé dans la 2eme partie (vert)
Tu as alors 2 possibilités:
1) Tu exportes tout de la table (Orange) et tu filtre dans Qlik.
LOAD
Champ 1,
Champ 2,
MakeDate(AN, MOIS, JOUR) as DATE
WHERE MakeDate(AN, MOIS, JOUR) <= MakeDate(1900);
SQL SELECT *
FROM BDD;
2) Tu récupères de la base de données uniquement les données dont tu as besoin. Dépend de la base de données (ci-dessous un exemple pour SQL Server)
LOAD
Champ 1,
Champ 2,
MakeDate(AN, MOIS, JOUR) as DATE;
SQL SELECT *
FROM BDD
WHERE CAST(AN+'-'+MOIS+'-'+JOUR as DATE ) >= CAST('1900-01-01' as DATE );
Essai ceci,
1)après avoir charger ton fichier de cette façon:
Table_Temp:
LOAD
Champ 1,
Champ 2,
AN&'-'&MOIS&'-'&JOUR as DATE;
SQL SELECT *
FROM BDD;
2)Tu crées une autre table comme ceci
Table:
Load
*,
DATE
Resident Table_Temp Where Num(DATE) <= 43131;
3)Enfin tu effaces la première table:
DROP TABLE Table_Temp;
Bonjour,
Tout d'abord merci pour votre aide.
Je rencontre des difficultés sur l'application de vos propositions:
1) Mon script n'exclu pas les dates demandées :
LOAD
Champ 1,
Champ 2,
MakeDate(AN, MOIS, JOUR) as DATE
MakeDate(AN, MOIS, JOUR) < MakeDate(2018, 03);
SQL SELECT *
FROM BDD;
2) J'ai un message d'erreur dans l'application du script : "DATE de type *SQLUDT dans *LIBL non trouvé"
LOAD
Champ 1,
Champ 2,
MakeDate(AN, MOIS, JOUR) as DATE;
SQL SELECT *
FROM BDD
WERE CAST(AN+'-'+MOIS+'-'+JOUR as DATE ) < CAST('2018-03-01' as DATE );
Bonjour,
Tout d'abord merci pour votre aide.
Je n'arrive pas à appliquer votre script. J'ai un message d'erreur :
"Les noms des champs doivent être uniques dans la table
NewFCA:
LOAD
*,
DATE
Resident FCA Where Num(DATE)<43131;"
Ci-dessous mon script entier :
FCA:
LOAD
Champ 1,
Champ 2,
AN&'-'&MOIS&'-'&JOUR as DATE;
SQL SELECT *
FROM BDD;
NewFCA:
LOAD
*,
DATE
Resident FCA Where Num(DATE)<43131;
DROP Table FCA;
Je pense que tu auras une erreur car tu as 2 fois le champ DATE dans ta table Table.
En effet j'ai un message d'erreur sur l'unicité du champ.
As-tu une proposition ?
ok, j’ai corrigé mon message précédent:
Je réponds depuis mon téléphone pendant mon voyage en train, le code n’est donc pas facile à écrire et je ne peux pas le vérifier
jespere que cette fois c’est bon
Pas de soucis.
La première méthode fonctionne !
Par contre j'avais corrigé de moi même le WHERE de la seconde méthode et j'avais le message d'erreur. Je pense qu'il y a un autre problème dans le code mais pour ma part je suis parti avec la première proposition.
En tout cas merci pour l'aide et les explications.
Ha oui,
En effet le signe (*) utilisé dans la table "NewFCFA" contient déjà le champ DATE.
Donc dans la table nommée "NewFCFA", remplacez le signe * par les champs "Champ 1" et "Champ 2" comme ci-dessous:
FCA:
LOAD
Champ 1,
Champ 2,
AN&'-'&MOIS&'-'&JOUR as DATE;
SQL SELECT *
FROM BDD;
NewFCA:
LOAD
Champ 1,
Champ 2,
DATE
Resident FCA Where Num(DATE)<43131;
DROP Table FCA;