Calcolo di WEEKOFYEAR() per le settimane che iniziano in un giorno diverso da domenica o lunedìLa mia azienda utilizza un calendario fiscale in cui le settimane iniziano il sabato. Secondo la funzione JSL WEEKOFYEAR() abbiamo due opzioni: Rule 1 e 2 per le settimane che iniziano di domenica, e Rule 3, per le settimane che iniziano di lunedì.
Qualcuno ha creato uno script JMP per calcolare la settimana dell'anno per le settimane che iniziano in un giorno diverso da domenica o lunedì?
Re: Calcolo di WEEKOFYEAR() per settimane che iniziano in un giorno diverso da domenica o lunedìScusa il ritardo nella risposta. La tua soluzione funziona bene. Grazie.
Giusto per essere sicuri che la soluzione sia chiara,
@txnelson ha scritto:
Buona cattura, ecco una soluzione semplice
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 ) );
aggiungendo 1 giorno a testdate con la funzione In Days(1), Sunday = 2, Monday = 3, ... Venerdì = 7 e sabato torna a essere 1 poiché non esiste l'ottavo giorno in una settimana.
Mi piace anche che tu possa definire una variabile all'interno di una formula. Molto utile!
Re: Calcolo di WEEKOFYEAR() per settimane che iniziano in un giorno diverso da domenica o lunedìBuona cattura, ecco una soluzione semplice
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: Calcolo di WEEKOFYEAR() per settimane che iniziano in un giorno diverso da domenica o lunedìHo appena notato che il calcolo sembra fallire alla fine dell'anno.
Nell'esempio di quest'anno, il 30/09/17 è l'inizio della settimana 41. Tutte le altre settimane che iniziano di sabato aumentano correttamente fino al 30/12/17, che è l'inizio della settimana 54.
Per qualche ragione, invece di continuare con la settimana 54 per i successivi 6 giorni, o saltare la settimana 54 e iniziare la settimana 1, JMP etichetta sabato 30/12 come settimana 54 e domenica 31/12 come primo giorno della settimana 1 nel 2018. Sembra un difetto, dal momento che le settimane non dovrebbero iniziare in due giorni diversi su un set di dati?
Dovrò aggiungere un ciclo if per modificare tutti i dati della settimana 54 alla settimana 1.
Re: Calcolo di WEEKOFYEAR() per settimane che iniziano in un giorno diverso da domenica o lunedìGrazie xnelson!
Mi piace la tua risposta migliore di quella che mi è venuta in mente. La tua risposta è più efficiente...
Ho una tabella di date e ho utilizzato tre formule separate per aggiungere un giorno alla settimana fiscale solo se il giorno è sabato:
In una colonna, Fiscal_Week, utilizzo la funzione WeekofYear(): Week Of Year(:TIMESTAMP)
Nella colonna successiva, DayOfWeek, determino quale giorno della settimana è: Day Of Week(:ET_TIME)
E nella terza colonna, CompanyFiscalWeek sono stato in grado di ottenere il valore corretto utilizzando la formula:
If (:Day of Week == 7, :Fiscal_Week + 1, :Fiscal_Week )
Userò invece la tua soluzione. Grazie !
JensRe: Calcolo di WEEKOFYEAR() per settimane che iniziano in un giorno diverso da domenica o lunedìSe aggiungi un giorno al calcolo otterrai ciò che desideri
Names Default To Here( 1 );
Week Of Year( Today() + In Days( 1 ) );
Ri: Calcolo WEEKOFYEAR() per settimane che iniziano in un giorno diverso da domenica o lunedìOltre ai giorni diversi per il "primo della settimana", è anche un po' sorprendente il modo in cui viene calcolata in generale la settimana dell'anno.
Soprattutto quando si confrontano "Settimana dell'anno" e "Settimana dell'anno" (dal menu contestuale della nuova formula).
Nel 2023, la regola n. 3 è stata ritardata di oltre 1 settimana rispetto alla regola 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 )
)
)