Cálculo de WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunesMi empresa utiliza un calendario fiscal donde las semanas comienzan los sábados. Según la función JSL WEEKOFYEAR() tenemos dos opciones: Regla 1 y 2 para semanas que empiezan en domingo, y Regla 3, para semanas que empiezan en lunes.
¿Alguien ha creado un script JMP para calcular la semana del año para semanas que comienzan en un día que no sea domingo o lunes?
Re: Calcular WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunesDisculpa la demora en responder. Tu solución funciona bien. Gracias.
Solo para asegurarse de que la solución sea clara,
@txnelson escribió:
Buena captura, aquí hay una solución 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 ) );
agregando 1 día a la fecha de prueba con la función In Days(1), Sunday = 2, Monday = 3, ... Viernes = 7 y el sábado vuelve a ser 1 nuevamente ya que no hay un octavo día en una semana.
También me gusta que puedas definir una variable dentro de una fórmula. ¡Muy útil!
Re: Calcular WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunesBuena captura, aquí hay una solución 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: Calcular WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunesMe acabo de dar cuenta de que el cálculo parece fallar al final del año.
En el ejemplo de este año, el 30/9/17 es el comienzo de la semana 41. Todas las demás semanas que comienzan el sábado se incrementan correctamente hasta el 30/12/17, que es el comienzo de la semana 54.
Por alguna razón, en lugar de continuar con la semana 54 durante los próximos 6 días, o saltarse la semana 54 y comenzar la semana 1, JMP etiqueta el sábado 30/12 como la semana 54 y el domingo 31/12 como el primer día de la semana 1 en 2018. Parece una falla, ya que las semanas no deberían comenzar en dos días diferentes en un conjunto de datos.
Tendré que agregar un bucle if para cambiar todos los datos de la semana 54 a la semana 1.
Re: Calcular WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunes¡Gracias, txnelson!
Me gusta más tu respuesta que la que se me ocurrió. Tu respuesta es más eficiente...
Tengo una tabla de fechas y usé tres fórmulas separadas para agregar un día a la semana fiscal solo si el día es sábado:
En una columna, Fiscal_Week, uso la función WeekofYear(): Week Of Year(:TIMESTAMP)
En la siguiente columna, DayOfWeek, determino qué día de la semana es: Day Of Week(:ET_TIME)
Y en la tercera columna, CompanyFiscalWeek, pude obtener el valor correcto usando la fórmula:
If (:Día de la semana == 7, :Fiscal_Week + 1, :Fiscal_Week )
Usaré tu solución en su lugar. Gracias !
JensRe: Calcular WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunesSi añades un día al cálculo obtendrás lo que quieres
Names Default To Here( 1 );
Week Of Year( Today() + In Days( 1 ) );
Re: Calcular WEEKOFYEAR() para semanas que comienzan en un día que no sea domingo o lunesAdemás de los diferentes días para el "primero de la semana", también es un poco sorprendente cómo se calcula la semana del año en general.
Especialmente al comparar "Semana del año" y "Semana del año" (desde el menú contextual de la nueva fórmula).
En 2023, la Regla n.° 3 tuvo un retraso de más de 1 semana en comparación con la Regla 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 )
)
)