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

Appliquer une boucle For.....next à plusieurs fichiers

Bonjour,

Je continue la création de mon fichier d'analyse et grâce à la communauté et aux docs en ligne je progresse... Cependant, il me manque quelques bases ce qui ralentit ma progression.

Mon dernier objectif est reproduire la totalité du scrip (en noir) ci-dessous pour l'ensemble des fichiers mensuels de l'année disponibles. Donc pouvoir disposer de tous les enregistrements ci-dessous pour chaque jour.

J'ai testé (en rouge) la création d'une boucle For.....next qui agit directement sur la construction de l'adresse des fichiers mais ....ça ne marche pas ! Auriez vous une idée svp ...peut-être plus simple ?

Le script (en noir) fonctionne très bien pour 1 seul mois et si je remplace le '06' par une * seule les données du dernier mois donc du dernier fichier sont présentes sur mes graphes.

let VAR03='01';

For a=0 to 11

let VAR04=VAR03+1;

if VAR04<10 then

VAR05='0'&VAR04

else

VAR05=VAR04

end if

let VAR06='[lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_'&VAR05&'_M-1.xls]';

//--------------------------------------------------------------------------------------------------

//Récupération du Nom du fichier source

//--------------------------------------------------------------------------------------------------

FICHIER:

LOAD distinct

     FileBaseName() as Nom_Fichier

//FROM [lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_06_M-1.xls]

    FROM VAR06

(biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

//--------------------------------------------------------------------------------------------------

//Récupération du Mois analysé directement à partir du nom du fichier source

//--------------------------------------------------------------------------------------------------

let MoisFichier =  Left(Subfield(Peek('Nom_Fichier', 0,'FICHIER'),'_',5),2);

DROP Table FICHIER;

//--------------------------------------------------------------------------------------------------

//Création des variable de Début et Fin de mois étudié

//--------------------------------------------------------------------------------------------------

let VAR01='01/'&(MoisFichier) &'/2016';

let VAR02=date(VAR011,'DD/MM/YYYY');

let Date_jour_deb = monthstart(VAR02);

let Date_jour_fin = monthend(VAR02);

set  Errormode=0;

//--------------------------------------------------------------------------------------------------

//Initialisation de la boucle de recherche de Champs par rapport à chacun des jour du mois étudié

//--------------------------------------------------------------------------------------------------

For Date_jour= '$(Date_jour_deb)' to '$(Date_jour_fin)'

let Jour= left(date('$(Date_jour)'),5);   

let Nom_jour= Capitalize(left(weekday('$(Date_jour)'),2));

let FieldN= '$(Nom_jour)'&' '&'$(Jour)';

//--------------------------------------------------------------------------------------------------

//Chargement des données dans la boucle pour un jour précisé ci-dessus

//--------------------------------------------------------------------------------------------------

[Disponibilité des ressources$]:

LOAD

[ID Activité],

    [Structure Responsable],

    [Libellé Activité],

...

    [Spécificité],

    [Ressource affectée],   

    [$(FieldN)] as QteCharge,

    '$(Jour)' as Jour,  

    [Commentaire affectation]

//   FROM [lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_06_M-1.xls]

    FROM VAR06

(biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

//--------------------------------------------------------------------------------------------------

//Relance de la Boucle pour le jour suivant

//--------------------------------------------------------------------------------------------------

Next

next a

10 Replies
almamy_diaby
Creator
Creator

FOR  MOIS= 1 to 12

    

      if $(MOIS) <10 then

             let MOIS='0'&$(MOIS);

      endif 

   

      let MoisFichier = '$(MOIS)';

     

      

        IF( FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls')>0) then

  //--------------------------------------------------------------------------------------------------

  //Création des variable de Début et Fin de mois étudié

  //--------------------------------------------------------------------------------------------------

  let VAR01='01/'&(MoisFichier) &'/2016';

  let VAR02=date(VAR011,'DD/MM/YYYY');

  let Date_jour_deb = monthstart(VAR02);

  let Date_jour_fin = monthend(VAR02);

  set  Errormode=0;

  

  //--------------------------------------------------------------------------------------------------

  //Initialisation de la boucle de recherche de Champs par rapport à chacun des jour du mois étudié

  //--------------------------------------------------------------------------------------------------

  For Date_jour= '$(Date_jour_deb)' to '$(Date_jour_fin)'

  let Jour= left(date('$(Date_jour)'),5);  

  let Nom_jour= Capitalize(left(weekday('$(Date_jour)'),2));

  let FieldN= '$(Nom_jour)'&' '&'$(Jour)';

  

  //--------------------------------------------------------------------------------------------------

  //Chargement des données dans la boucle pour un jour précisé ci-dessus

  //--------------------------------------------------------------------------------------------------

  [Disponibilité des ressources$]:

  LOAD

  [ID Activité],

     [Structure Responsable],

     [Libellé Activité],

  //...

     [Spécificité],

     [Ressource affectée],  

     [$(FieldN)] as QteCharge,

     '$(Jour)' as Jour, 

     [Commentaire affectation]

    FROM [lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls]

          (biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

  

  

  //--------------------------------------------------------------------------------------------------

  //Relance de la Boucle pour le jour suivant

  //--------------------------------------------------------------------------------------------------

  Next

  ENDIF

  

Next

Not applicable
Author

Bonjour et Merci,

Ceci ne fonctionne pas !!! Je n'ai pas de message d'erreur mais je ne charge pas de donnée .

Pour vérifier la fonction IF en amont, j'ai ajouté une variable pour visualiser comment elle se charge. Malheureusement, je constate qu'elle est toujours à valeur NULL malgré la présence des fichiers, de la bonne adresse de répertoire et aussi de la bonne orthographe. Auriez une idée car là je ne trouves vraiment pas ?

FOR  MOIS= 1 to 12 

if $(MOIS) <10 then

let MOIS='0'&$(MOIS);

endif  

let MoisFichier = '$(MOIS)';

let VAR03 = FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls');

IF( FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls')>0) then

mohamed_ahid
Partner - Specialist
Partner - Specialist

essais ça:

//--------------------------------------------------------------------------------------------------

//Récupération du Nom du fichier source

//--------------------------------------------------------------------------------------------------

for Each File in ('//EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*.xls ')

FICHIER:

LOAD distinct

     FileBaseName() as Nom_Fichier

//FROM [lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_06_M-1.xls]

    FROM $(File)

(biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

next  File

LET Rows1 = NoOfRows('FICHIER'); //nombre de fichier dans ton dossier

For i=1 to $(Rows1)

  let Code_Met = peek('Nom_Fichier',$(i),'FICHIER');

//--------------------------------------------------------------------------------------------------

//Récupération du Mois analysé directement à partir du nom du fichier source

//--------------------------------------------------------------------------------------------------

let MoisFichier =  Left(Subfield('$(Code_Met)','_',5),2);

//--------------------------------------------------------------------------------------------------

//Création des variable de Début et Fin de mois étudié

//--------------------------------------------------------------------------------------------------

let VAR01='01/'&(MoisFichier) &'/2016';

let VAR02=date(VAR011,'DD/MM/YYYY');

let Date_jour_deb = monthstart(VAR02);

let Date_jour_fin = monthend(VAR02);

set  Errormode=0;

//--------------------------------------------------------------------------------------------------

//Initialisation de la boucle de recherche de Champs par rapport à chacun des jour du mois étudié

//--------------------------------------------------------------------------------------------------

For Date_jour= '$(Date_jour_deb)' to '$(Date_jour_fin)'

let Jour= left(date('$(Date_jour)'),5);  

let Nom_jour= Capitalize(left(weekday('$(Date_jour)'),2));

let FieldN= '$(Nom_jour)'&' '&'$(Jour)';

//--------------------------------------------------------------------------------------------------

//Chargement des données dans la boucle pour un jour précisé ci-dessus

//--------------------------------------------------------------------------------------------------

[Disponibilité des ressources$]:

LOAD

[ID Activité],

    [Structure Responsable],

    [Libellé Activité],

    [Spécificité],

    [Ressource affectée],  

    [$(FieldN)] as QteCharge,

    '$(Jour)' as Jour, 

    [Commentaire affectation]

//   FROM [lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_06_M-1.xls]

    FROM $(Code_Met)

(biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

//--------------------------------------------------------------------------------------------------

//Relance de la Boucle pour le jour suivant

//--------------------------------------------------------------------------------------------------

Next

Not applicable
Author

Bonsoir et merci,

J'ai bien le comptage de mes 2 fichiers et après avoir ajouté 'Next i' en bas j'ai aussi une boucle de chargement MAIS ceci ne fonctionne que pour le nom du dernier fichier compté car le Nom_Fichier est chargé avant la boucle FOR i = .... donc lorsque i devient i=2 le Nom_Fichier est NULL !

J'ai essayé de monter la boucle FOR i=.... plus en amont mais cela ne marche pas non plus ;-(

Avez vous une autre idée ???

//--------------------------------------------------------------------------------------------------

//Récupération du Nom du fichier source

//--------------------------------------------------------------------------------------------------

For each File in ('Lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_M-1.xls')

FICHIER:

LOAD distinct

     FileBaseName() as Nom_Fichier

    FROM $(File)

(biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

next File

Let Rows1 = NoOfRows('FICHIER');

For i=1 to $(Rows1)

let Code_Met = peek('Nom_Fichier',$(i),'FICHIER');

// //--------------------------------------------------------------------------------------------------

// //Récupération du Mois analysé directement à partir du nom du fichier source

// //--------------------------------------------------------------------------------------------------

let MoisFichier =  Left(Subfield('$(Code_Met)','_',5),2);

//--------------------------------------------------------------------------------------------------

//Création des variable de Début et Fin de mois étudié

//--------------------------------------------------------------------------------------------------

let VAR01='01/'&(MoisFichier) &'/2016';

....

[Commentaire affectation]

    FROM $(Code_Met)

(biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

//--------------------------------------------------------------------------------------------------

//Relance de la Boucle pour le jour suivant

//--------------------------------------------------------------------------------------------------

Next

next i

almamy_diaby
Creator
Creator

Le code que je t'ai envoyé précédemment ne fonctionne pas parce que il y avait une erreur on niveau du IF:

        IF( FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls')>0) then

En effet je devait pas mettre les parenthèses.

Le code ci-dessous devrait fonctionner. Je l'ai testé à mon niveautest.PNG

FOR  MOIS= 1 to 12

   

      if $(MOIS) <10 then

             let MOIS='0'&$(MOIS);

      endif

  

      let MoisFichier = '$(MOIS)';

    

     

        IF  FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls')>0 then

  //--------------------------------------------------------------------------------------------------

  //Création des variable de Début et Fin de mois étudié

  //--------------------------------------------------------------------------------------------------

  let VAR01='01/'&(MoisFichier) &'/2016';

  let VAR02=date(VAR01,'DD/MM/YYYY');

  let Date_jour_deb = monthstart(VAR02);

  let Date_jour_fin = monthend(VAR02);

  set  Errormode=0;

 

  //--------------------------------------------------------------------------------------------------

  //Initialisation de la boucle de recherche de Champs par rapport à chacun des jour du mois étudié

  //--------------------------------------------------------------------------------------------------

  For Date_jour= '$(Date_jour_deb)' to '$(Date_jour_fin)'

  let Jour= left(date('$(Date_jour)'),5); 

  let Nom_jour= Capitalize(left(weekday('$(Date_jour)'),2));

  let FieldN= '$(Nom_jour)'&' '&'$(Jour)';

 

  //--------------------------------------------------------------------------------------------------

  //Chargement des données dans la boucle pour un jour précisé ci-dessus

  //--------------------------------------------------------------------------------------------------

  [Disponibilité des ressources$]:

  LOAD

  [ID Activité],

     [Structure Responsable],

     [Libellé Activité],

  //...

     [Spécificité],

     [Ressource affectée], 

     [$(FieldN)] as QteCharge,

     '$(Jour)' as Jour,

     [Commentaire affectation]

    FROM [lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls]

          (biff, embedded labels, header is 3 lines, table is [Disponibilité des ressources$]);

 

 

  //--------------------------------------------------------------------------------------------------

  //Relance de la Boucle pour le jour suivant

  //--------------------------------------------------------------------------------------------------

  Next

  ENDIF

 

Next

Not applicable
Author

:-(( ,

Je ne comprends pas car j'ai repris l'ensemble du code que vous m'avez donné et j'ai conservé ma variable VAR03 pour vérifier la valeur de la fonction Filesize..... La valeur reste toujours NULL (cf. ci-dessous) et le chargement ne fonctionne toujours pas.

Peut-être que cela vient du fait que je travail avec Qlik Sense et non Qlik View ???

FOR  MOIS= 1 to 12 

if $(MOIS) <10 then

             let MOIS='0'&$(MOIS);

      endif

      let MoisFichier = '$(MOIS)';

     

let VAR03 = FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls');

IF FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_*_$(MoisFichier)_M-1.xls')>0  then

almamy_diaby
Creator
Creator

MoisFichier=1

VAR03= NULL

Est ce que le fichier de Janvier Existe?

Et regarde  la valeur que doit prendre VAR2  dans ton code initial ( let VAR02=date(VAR011,'DD/MM/YYYY')) .

Alors corrige VAR011 en VAR01

Not applicable
Author

Non le fichier de Janvier n'existe pas mais Juin et Juillet oui et VAR03 reste à NUL quand même !!!

En effet il y avait une erreur sur VAR02 avec VAR011 mais la boucle ne va pas à cette ligne car la condition IF Filesize n'est pas respectée donc saut direct à Next !!

Je cherche aussi de mon côté donc j'ai remplacé le nom du fichier par sa désignation exact :

IF FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_20160527_06_M-1.xls')<>0  then

Et dans ce cas aussi la condition IF Filesize donne est null donc j'en déduis que c'est la fonction Filesize qui n'est pas correct !

almamy_diaby
Creator
Creator

Tu as écris IF FileSize('lib://EXTRACTIONS/LAPLACE_PlanDeCharge_Ressource_20160527_06_M-1.xls')<>0

tu as mis <>  alors qu'on doit tester si le fichier donc la taille de celui doit > 0

Essai de revoir le nom du fichier parce que à mon niveau le test a été concluant