Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

previous()

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

1 Solution

Accepted Solutions
antoinelaviron
Partner - Contributor III
Partner - Contributor III

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;

View solution in original post

3 Replies
antoinelaviron
Partner - Contributor III
Partner - Contributor III

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;

Not applicable
Author

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;

antoinelaviron
Partner - Contributor III
Partner - Contributor III

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;