Semana ISO, la fórmula de Ron de Bruin en DAX y en M

 In Power Bi

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.

 

 

 

 

Recommended Posts
Showing 6 comments
  • Karen

    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.

  • Cristian

    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.

  • Brandon

    Muchas gracias

    Justo lo que necesitaba.

  • Antoine Dirat

    y que tal WEEKNUM(mifecha,2) ?

  • Eric VIeira

    Sou do Canal PowerBIna Real e estou adorando essa página!

  • Jenny

    Muchas Gracias!!! Excelente!!! Abrazos desde Colombia