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 3 comments
  • Karen
    Responder

    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
    Responder

    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
    Responder

    Muchas gracias

    Justo lo que necesitaba.

Leave a Comment

Al continuar utilizando nuestro sitio web, usted acepta el uso de cookies. Más información

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra POLÍTICA DE COOKIES, pinche el enlace para mayor información. Además puede consultar nuestro AVISO LEGAL y nuestra página de POLÍTICA DE PRIVACIDAD.

Cerrar