Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Problème boucle for

Bonjour.

J'ai crée une liste de jours fériés dynamique en fonction des dates chargées:

Let listeFeries = Null();

Set DateDebut = =Year(Min($(CreationDate_Field)));

Set DateFin = =Year(Max($(CreationDate_Field)));

For Annee=DateDebut To 2017

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 1, 1) & chr(39);                  // Jour de l'an

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 5, 1) & chr(39);                  // Fete du travail 1er Mai

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 5, 😎 & chr(39);                  // Armistice 1945 8 Mai

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 7, 14) & chr(39);                // Fete National 14 Juillet

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 8, 15) & chr(39);                // Assomption 15 Aout

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 11, 1) & chr(39);                // Toussaint 1er Novembre

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 11, 11) & chr(39);                // Armistice 1918 11 Novembre

  listeFeries=listeFeries & ',' & chr(39) & makedate($(Annee), 12, 25) & chr(39);                // Noel

    

  DatePaques = Date(Round(makedate($(Annee),4,day(Minute($(Annee)/38)/2+55))/7)*7-6);            // Dimanche de Paques

  listeFeries=listeFeries & ',' & chr(39) & DatePaques & chr(39);                              // Dimanche de Paques

  listeFeries=listeFeries & ',' & chr(39) & Date((DatePaques + 1), 'DD/MM/YYYY') & chr(39);    // Lundi de Paques

  listeFeries=listeFeries & ',' & chr(39) & Date((DatePaques + 39), 'DD/MM/YYYY') & chr(39);    // Jeudi de l'Ascension

  listeFeries=listeFeries & ',' & chr(39) & Date((DatePaques + 49), 'DD/MM/YYYY') & chr(39);    // Dimanche de Pentecote

  listeFeries=listeFeries & ',' & chr(39) & Date((DatePaques + 50), 'DD/MM/YYYY') & chr(39);    // Lundi de Pentecote

Next

  Let listeFeries = Mid(vlisteFeries,2);

    let DatePaques = Null();

    Let Annee = Null();

Ce script marche très bien, mais comme vous le voyez, j'ai saisi la date 2017 en dur dans la boucle for. Je ne comprends pas pourquoi ceci: For Annee=DateDebut To DateFin , me renvoie une erreur:

Syntax error

Unexpected token: '1', expected nothing

listeFeries=listeFeries & ',' & chr(39) & makedate(-, >>>>>>1<<<<<<, 1) & chr(39)

Du coup je ne peux pas avoir de borne supérieure dynamique ce qui m’embête.

Cordialement

30 Replies
Not applicable
Author

Même erreur...

Not applicable
Author

C'est bizarre. Rien que la ligne que tu m'as écrite renvoie l'erreur:

Syntax error

Unexpected token: ')', expected nothing

Let DateDebut = Year(Min(Date([Date de création],'DD/MM/YYYY'))>>>>>>)<<<<<<

kevinchevrier
Partner - Creator III
Partner - Creator III

Une dernière idée, on ne sait jamais... :

=Year(Min($("CreationDate_Field")));


Sinon désolé mais je ne vois pas...


Kevin

sfatoux72
Partner - Specialist
Partner - Specialist

‌Bonjour,

pour commencer, les fonctions d'agrégation (Max, Min, Sum, ...) peuvent être utilisées dans un script de chargement, mais uniquement dans un LOAD (pour faire référence à un jeu de données ) avec un "Group By" (pour qu'il y aie agrégation )

Si tu veux stocker le résultat d'une expression dans une variable il faut utiliser LET à la place de SET .

Il faut donc utiliser un LOAD pour calculer ton Min et ton Max suivi de LET pour récupérer tes valeur comme tu la fait plusieurs fois dans ton script et comme te l'avait dit Jean Eude.

Tu lui avais répondu que tu ne pouvais pas le faire car la table était chargée bien plus tard dans ton script. Si c'est le cas, sur quelles données comptais-tu utiliser tes expressions?

kevinchevrier
Partner - Creator III
Partner - Creator III

Bertrand,

Tu ne devrais pas mettre ta variable Annee après ton Next ?

Et Let listeFeries = Mid(ListeFeries,2); au lieu de Let listeFeries = Mid(vlisteFeries,2);

Kevin

kevinchevrier
Partner - Creator III
Partner - Creator III

Bonjour Bertrand,

Ton script ne fonctionnait pas chez moi.

Je l'ai donc adapté. Changes 2014 et 2017 par tes variables, logiquement ça devrait être bon.

// Jours fériés fixes


Let Annee='';

Let An='';                 

Let Travail='';                 

Let ArmisticeMai='';                 

Let National='';               

Let Assomption='';            

Let Toussaint='';              

Let ArmisticeNovembre='';

Let Noel='';

 

For Annee = 2014 TO 2017

  An=An & ',' & chr(39) & makedate($(Annee), 1, 1) & chr(39);                  // Jour de l'an

  Travail=Travail & ',' & chr(39) & makedate($(Annee), 5, 1) & chr(39);                  // Fete du travail 1er Mai

  ArmisticeMai=ArmisticeMai & ',' & chr(39) & makedate($(Annee), 5, 😎 & chr(39);                  // Armistice 1945 8 Mai

  National=National & ',' & chr(39) & makedate($(Annee), 7, 14) & chr(39);                // Fete National 14 Juillet

  Assomption=Assomption & ',' & chr(39) & makedate($(Annee), 8, 15) & chr(39);                // Assomption 15 Aout

  Toussaint=Toussaint & ',' & chr(39) & makedate($(Annee), 11, 1) & chr(39);                // Toussaint 1er Novembre

  ArmisticeNovembre=ArmisticeNovembre & ',' & chr(39) & makedate($(Annee), 11, 11) & chr(39);                // Armistice 1918 11 Novembre

  Noel=Noel & ',' & chr(39) & makedate($(Annee), 12, 25) & chr(39);                // Noel

Next

// Jours fériés variables

Let DatePaques='';                            

Let PaquesLundi='';   

Let Ascension='';   

Let Pentecote='';  

Let PentecoteLundi='';

For Annee = 2014 to 2017

DatePaques =DatePaques & ','&  chr(39) & Date(Round(makedate($(Annee),4,day(Minute($(Annee)/38)/2+55))/7)*7-6) & chr(39);            // Dimanche de Paques

PaquesLundi =PaquesLundi & ','&  chr(39) & (Date(Date(Round(makedate($(Annee),4,day(Minute($(Annee)/38)/2+55))/7)*7-6)+1,'DD/MM/YYYY')) & chr(39); // Lundi de Paques

Ascension =Ascension & ','&  chr(39) & (Date(Date(Round(makedate($(Annee),4,day(Minute($(Annee)/38)/2+55))/7)*7-6)+39,'DD/MM/YYYY')) & chr(39);    // Jeudi de l'Ascension

Pentecote =Pentecote & ','&  chr(39) & (Date(Date(Round(makedate($(Annee),4,day(Minute($(Annee)/38)/2+55))/7)*7-6)+49,'DD/MM/YYYY')) & chr(39);    // Dimanche de Pentecote

PentecoteLundi =PentecoteLundi & ','&  chr(39) & (Date(Date(Round(makedate($(Annee),4,day(Minute($(Annee)/38)/2+55))/7)*7-6)+50,'DD/MM/YYYY')) & chr(39);   // Lundi de Pentecote

Next

// Tous les jours fériés dans une seule variable

Let listeFeries = mid(An & Travail & ArmisticeMai & National & Assomption & Toussaint & ArmisticeNovembre & Noel & DatePaques & PaquesLundi & Ascension & Pentecote & PentecoteLundi, 2);

// Raz des variables

Let Annee = '';

Let An='';                 

Let Travail='';                 

Let ArmisticeMai='';                 

Let National='';               

Let Assomption='';            

Let Toussaint='';              

Let ArmisticeNovembre='';

Let Noel='';

Let DatePaques='';                            

Let PaquesLundi='';   

Let Ascension='';   

Let Pentecote='';  

Let PentecoteLundi='';

Kevin

Not applicable
Author

Bonjour Sébastien.

Je veux bien faire quelque chose comme ça:

TempDate: 

Load

min($(CreationDate_Source)) as minDate, 

max($(CreationDate_Source)) as maxDate 

Resident '$(TableName_Source)';

Mais quelle table prendre en "resident" puisque je ne charge la requête SQL qu'après. Quelque chose m'échappe.

kevinchevrier
Partner - Creator III
Partner - Creator III

Bonjour Bertrand,

As-tu testé ma dernière solution ?

Kevin

Not applicable
Author

Oui. Mais elle présente le même problème. A savoir, les années en dures que je ne parviens pas à dynamiser.

kevinchevrier
Partner - Creator III
Partner - Creator III

Ok... Et ta table tu peux pas la charger avant puis la drop ?

Et question bête : pourquoi tu veux générer des jours fériés par rapport alors que tu utiliseras les mêmes au global ?

Kevin