9 Replies Latest reply: Mar 15, 2018 7:43 AM by Poté Amaud GNEKOHI RSS

    Champ concatener et synthaxe where

    Baptiste Pgt

      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.

        • Re: Champ concatener et synthaxe where
          Sébastien Fatoux

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

            • Re: Champ concatener et synthaxe where
              Baptiste Pgt

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

            • Re: Champ concatener et synthaxe where
              Poté Amaud GNEKOHI

              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;