Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Champ concatener et synthaxe where

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.

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

‌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 );

View solution in original post

9 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

‌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 );

intergnek
Partner - Contributor III
Partner - Contributor III

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;

Anonymous
Not applicable
Author

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 );

Anonymous
Not applicable
Author

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;

lcloatre
Partner - Creator III
Partner - Creator III

Je pense que tu auras une erreur car tu as 2 fois le champ DATE dans ta table Table.

Anonymous
Not applicable
Author

En effet j'ai un message d'erreur sur l'unicité du champ.

As-tu une proposition ?

sfatoux72
Partner - Specialist
Partner - Specialist

‌ok, j’ai corrigé mon message précédent:

  • Dans le premier j’avais oublier le mot clé WHERE
  • Dans le second, j’ai mal écrit WHERE

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

Anonymous
Not applicable
Author

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.

intergnek
Partner - Contributor III
Partner - Contributor III

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;