Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

Highlighted
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

Tags (1)
1 Solution

Accepted Solutions
antoinelaviron
Not applicable

Re: previous()

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;

3 Replies
antoinelaviron
Not applicable

Re: previous()

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

Re: previous()

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
Not applicable

Re: previous()

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;