Semana ISO, la fórmula de Ron de Bruin en DAX y en M
Ron de Bruin es un profesional de Excel que escribió y publicó en su blog una fórmula para calcular el número de semana ISO de cualquier fecha. La fórmula propuesta por Ron utiliza los nombres de las funciones de Excel en inglés pero he realizado la traducción utilizando funciones en español:
=ENTERO((A2-FECHA(AÑO(A2-DIASEM(A2-1)+4),1,3)+DIASEM(FECHA(AÑO(A2-DIASEM(A2-1)+4),1,3))+5)/7)
Me he permitido el lujo de trasladar la fórmula de Ron de Bruin a los entornos en los que trabajo ahora mismo y donde la necesito: DAX y Power Query
La fórmula de Ron de Bruin, trasladada al lenguaje M de Power Query queda como sigue:
Number.RoundDown((Int64.From([Fecha])- Int64.From(#date(Date.Year(Date.From(Int64.From([Fecha])-(if (Date.DayOfWeek(Date.AddDays([Fecha],1)))=0 then 7 else (Date.DayOfWeek(Date.AddDays([Fecha],1))))+4)),1,3))+
(if (Date.DayOfWeek(Date.AddDays((#date(Date.Year(Date.From(Int64.From([Fecha])-(if (Date.DayOfWeek(Date.AddDays([Fecha],1)))=0 then 7 else (Date.DayOfWeek(Date.AddDays([Fecha],2))))+4)),1,3)),1)))=0
then 7 else (Date.DayOfWeek(Date.AddDays((#date(Date.Year(Date.From(Int64.From([Fecha])-(if (Date.DayOfWeek(Date.AddDays([Fecha],1)))=0 then 7 else (Date.DayOfWeek(Date.AddDays([Fecha],1))))+4)),1,3)),2))))+5)/7)
Por el contrario, en lenguaje DAX, podemos calcular la semana ISO con la siguiente fórmula:
ROUNDDOWN((dCalendario[Date]-DATE(year(dCalendario[Date]-WEEKDAY(dCalendario[Date]-1)+4);1;3)+WEEKDAY(DATE(YEAR(dCalendario[Date]-WEEKDAY(dCalendario[Date]-1)+4);1;3))+5)/7;0)
La semana ISO, tan empleada en las empresas agricolas, ya no es obstáculo para nuestros análisis en Power BI.
Hola, buen día tengo una pregunta, en medicina las semanas epidemiológicas van desde Domingo a Sábado, como se podría modificar el query para que sea así, ya que veo que el query lo calcula de Lunes a Domingo.
Buenos días, agradeciendo el valioso contenido del post, quisiera agregar que en DAX es posible obtener el número de la semana en una nueva columna, con una fórmula como la siguiente:
FORMAT(tabla[fecha], «ww»)
Saludos.
Muchas gracias
Justo lo que necesitaba.
y que tal WEEKNUM(mifecha,2) ?
Sou do Canal PowerBIna Real e estou adorando essa página!
Muchas Gracias!!! Excelente!!! Abrazos desde Colombia