Calcul de WEEKOFYEAR() pour les semaines qui commencent un jour autre que dimanche ou lundiMon entreprise utilise un calendrier fiscal où les semaines commencent le samedi. Selon la fonction JSL WEEKOFYEAR(), nous avons deux options : les règles 1 et 2 pour les semaines qui commencent le dimanche et la règle 3 pour les semaines qui commencent le lundi.
Quelqu'un a-t-il créé un script JMP pour calculer la semaine de l'année pour les semaines qui commencent un jour autre que le dimanche ou le lundi ?
Re : Calculer WEEKOFYEAR() pour les semaines qui commencent un jour autre que dimanche ou lundiDésolé le retard dans la réponse. Votre solution fonctionne bien. Merci.
Juste pour s'assurer que la solution est claire,
@txnelson écrit:
Bonne prise, voici une solution simple
Names Default To Here( 1 );
testdate = Date MDY( 12, 31, 2017 );
Week Of Year( testdate + If( Year( testdate ) == Year( testdate + In Days( 1 ) ), In Days( 1 ), 0 ) );
en ajoutant 1 jour à testdate avec la fonction In Days(1), Sunday = 2, Monday = 3, ... Vendredi = 7 et samedi revient à 1 puisqu'il n'y a pas de 8e jour dans une semaine.
J'aime aussi le fait que vous puissiez définir une variable dans une formule. Très utile!
Re : Calculer WEEKOFYEAR() pour les semaines qui commencent un jour autre que dimanche ou lundiBonne prise, voici une solution simple
Names Default To Here( 1 );
testdate = Date MDY( 12, 31, 2017 );
Week Of Year( testdate + If( Year( testdate ) == Year( testdate + In Days( 1 ) ), In Days( 1 ), 0 ) );
Re : Calculer WEEKOFYEAR() pour les semaines qui commencent un jour autre que dimanche ou lundiJe viens de remarquer que le calcul semble s'effondrer à la fin de l'année.
Dans l'exemple de cette année, le 30/09/17 est le début de la semaine 41. Toutes les autres semaines commençant le samedi s'incrémentent correctement jusqu'au 30/12/17 qui est le début de la semaine 54.
Pour une raison quelconque, plutôt que de continuer avec la semaine 54 pendant les 6 prochains jours ou de sauter la semaine 54 et de commencer la semaine 1, JMP marque le samedi 30/12 comme la semaine 54 et le dimanche 31/12 comme le premier jour de la semaine 1 en 2018. Cela ressemble à un défaut, puisque les semaines ne devraient pas commencer deux jours différents sur un ensemble de données ?
Je devrai ajouter une boucle if pour changer toutes les données de la semaine 54 en semaine 1.
Re : Calculer WEEKOFYEAR() pour les semaines qui commencent un jour autre que dimanche ou lundiMerci txnelson !
J'aime mieux votre réponse que celle que j'ai trouvée. Votre réponse est plus efficace...
J'ai un tableau de dates et j'ai utilisé trois formules distinctes pour ajouter un jour à la semaine fiscale uniquement si le jour est le samedi :
Dans une colonne, Fiscal_Week, j'utilise la fonction WeekofYear() : Week Of Year(:TIMESTAMP)
Dans la colonne suivante, DayOfWeek, je détermine de quel jour de la semaine il s'agit : Day Of Week(:ET_TIME)
Et dans la troisième colonne, CompanyFiscalWeek, j'ai pu obtenir la valeur correcte en utilisant la formule :
Si (:Jour de la semaine == 7, :Fiscal_Week + 1, :Fiscal_Week )
Je vais utiliser votre solution à la place. Merci !
JensRe : Calculer WEEKOFYEAR() pour les semaines qui commencent un jour autre que dimanche ou lundiSi vous ajoutez un jour au calcul, vous obtiendrez ce que vous voulez
Names Default To Here( 1 );
Week Of Year( Today() + In Days( 1 ) );
Re : Calculer WEEKOFYEAR() pour les semaines commençant un jour autre que le dimanche ou le lundiOutre les différents jours pour le "premier de la semaine", la façon dont la semaine de l'année est calculée en général est également un peu surprenante.
Surtout lorsque l'on compare "Semaine de l'année" et "Année Semaine" (à partir du nouveau menu contextuel de la formule).
En 2023, la règle n°3 était en retard de plus d'une semaine par rapport à la règle n°1 :


New Table( "Week",
Add Rows( 30 ),
New Column( "date",
Format( "m/d/y", 12 ),
Formula( Date MDY( 1, 1, 2023 ) + (Row() - 11) * (24 * 3600) )
),
New Column( "\!"Year Week\!"",
Character,
"Nominal",
Formula(
Local(
{w = Week Of Year( :date, 3 ), y = Year( :date ), m = Month( :date )
},
If( Is Missing( :date ),
"",
Char( If( m / w >= 12, y + 1, w / m >= 52, y - 1, y ) ) ||
If( w >= 10, "W", "W0" ) || Char( w )
)
)
)
),
New Column( "Week of Year, rule1",
Formula( Week Of Year( :date ) )
),
New Column( "Week of Year, rule3",
Format( "Best", 12 ),
Formula( Week Of Year( :date, 3 ) ),
Color Cells( {32, {19, 20, 21, 22, 23, 24, 25}} )
),
New Column( "day",
Formula( Day Of Week( :date ) ),
Value Labels( {1 = "Sun", 2 = "Mon"} ),
Use Value Labels( 1 )
)
)