3 Replies Latest reply: Nov 18, 2014 12:25 PM by Antoine Laviron RSS

    previous()

    safa guedria

      Bonjour,

       

      Je voudrais charger un fichier Excel qui contient un tableau où une valeur d'un champ est répartie sur plusieurs lignes, du coup, lorsque je fais le chargement il prend la valeur de la première ligne et met vide pour les autres lignes.

       

      HC
      traitement1H1 OK
      Traitement2H2 OK
      Traitement3H3 OK
      H4 OK
      H5 OK
      H6 OK
      H7 OK
      H8 OK
      H9 OK
      H10 OK
      Traitement4H11

      OK

      j'ai essayé ce code:

       

      load    if(len(trim(B)>0,B,PREVIOUS(B)) as Traitement,

               H,

               C

      from table;

       

      le résultat donné: il répété seulement deux fois la valeur du champ "Traitement" et les autres lignes sont vides pour ce champ!

       

      J'ai besoin de vos aides!

       

      Merci d'avance

        • Re: previous()
          Antoine Laviron

          Bonjour,

           

          Il faut utiliser la fonction peek(), elle offre plus de possibilité que Previous() (Cf l'aide QV)

           

          Voici un script qui marche (on part du principe que pour la première ligne, B est toujours renseigné)

           

           

          Tb1:

          LOAD * INLINE [
          B, H, C
          traitement1 , H1 , OK
          Traitement2 , H2 , OK
          Traitement3 , H3 , OK
          , H4 , OK
          , H5 , OK
          , H6 , OK
          , H7 , OK
          , H8 , OK
          , H9 , OK
          , H10 , OK
          Traitement4 , H11 , OK
          ]
          ;


          Tb2:
          NoConcatenate
          LOAD *,
          if(len(trim(B))>0,B,peek(T)) as T

          Resident Tb1
          Order by H;


          DROP TABLE Tb1;

            • Re: previous()
              safa guedria

              Bonjour,

               

              Merci pour votre réponse, ça a bien marché!

              mais lorsque je l'applique dans une boucle, car j'ai plusieurs onglets dans le fichier Excel, il affiche toutes les lignes que pour le premier onglet!


              FOR i=1 to 52

              Source_Gestion_Mensuel:

              LOAD

                B,

                C,

                H,

                J

              FROM File;

               

               

              Data:

              load

                if(len(B),B,peek(Traitement))      as Traitement,

                   C                                         as date_reception,

                   H                                         as date_traitement,

                   if(len(J),J,peek(Objectif))        as Objectif

              Resident Source_Gestion_Mensuel ;

               

               

              drop table Source_Gestion_Mensuel;

              NEXT;

                • Re: previous()
                  Antoine Laviron

                  Il faut charger tous les onglets dans une table avec Concatenate puis ensuite utiliser la fonction peek sur la table contenant toutes les données.

                   

                  Mais il y a plus simple en fait...

                  Lorsqu'on charge un fichier Excel avec l'assistant QV, à la seconde fenêtre, il est possible de transformer les données et notamment remplir les cellules vides.

                  FileWizard.JPG

                   

                  Ensuite pour la boucle de lecture, je me base souvent sur le script suivant : http://community.qlik.com/docs/DOC-4452

                   

                  Donc pour un fichier Book1.xlsx avec 3 onglets (Sheet1, Sheet2, Sheet3), on aurait le script suivant:

                   

                  LET vStartSheetNumber = 1;

                  LET vEndSheetNumber = 3;
                  LET vExcelFileName = 'Book1';
                  // Generate Empty table

                  Data:
                  LOAD '' AS Field1

                  AutoGenerate(0);

                  FOR index = vStartSheetNumber TO vEndSheetNumber

                  Concatenate(Data)
                  LOAD *
                  FROM

                  [$(vExcelFileName).xlsx]
                  (
                  ooxml, embedded labels, table is [Sheet$(index)], filters(Replace(1, top, StrCnd(null))));
                  NEXT

                   

                   

                  DROP Field Field1;

                  exit script;