Hola a todos,
Hoy os mostraré un código en lenguaje M que nos va a servir para obtener los días laborables entre dos fechas. Imaginad las siguientes fechas:
Por un lado tenemos las fechas de inicio y fin y por otro las fechas de días que son festivos y que no tendrémos que tener en cuenta en el cálculo de días laborables.
El siguiente paso es importar las tablas al editor de Query:
Y una vez que las tenemos, vamos a agregar una columna con los días calculados según nuestra función:
Esta es la función:
List.Count(
List.Select(
List.Difference(
List.Dates([INICIO], Duration.Days([FIN] - [INICIO])+1, #duration(1, 0, 0, 0)),
List.Transform(#"FESTIVIDADES"[FESTIVOS], Date.From)
), each Date.DayOfWeek(_, 1) < 5
)
)
y aquí ya la tenemos en query en nuestra columna personalizada (DIAS LAB):
El resultado es el siguiente:
Y esto es todo, con esta consulta ya tenemos los días laborables entre las dos fechas, es decir, días entre el 0 y el 4, que no sean sábado ni domingo y descontando los días festivos (o si se quiere los de vacaciones).
Luego solo tenéis que exportarlo a vuestra hoja y ya tenéis la información.
Espero que sea de utilidad 🙂
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
Muy bueno, lo unico es que es demaciado lento cuando hay regular cantidad de datos, hay alguna forma de optimizarlo.
Pues tendría que analizar una programación alternativa en Query, pero teniendo en cuenta que Excel tiene una función nativa para hacer esto » días.lab» yo consideraría utilizarla o en VBA si fuese necesario. Tienes ejemplos en esta web.
O también con Python y Pandas: https://excelsignum.com/2021/04/30/calcular-dias-laborables-con-python/
Saludos.
Hola, feliz día. Se observa que funciona de maravilla para formatos de «Fecha» pero y si el campo esta en formato «Fecha/Hora», ¿existe alguna manera de no dar error? Gracias.
Lo único que tienes que hacer es en los primeros pasos pasar el formato a fecha. Esto lo haces cuando tienes la tabla de PQ y seleccionas pestaña Transformar > y en Fecha seleccionas Fecha. Para que extraiga solo la fecha.
Es un paso intermedio antes de finalizar.
O lo que es lo mismo en lenguaje M:
= Table.TransformColumns(#"Tipo cambiado",{{"INICIO", DateTime.Date, type date}, {"FIN", DateTime.Date, type date}})
Entendido, gracias por el aporte. Se logra implementar la solución. Pura Vida!
Muy bueno y funciona de maravilla, lo único sería como podría aplicarlo para distintas festividades, como pueden ser los festivos de cada provincia de España al tener una tabla general de datos con todas las provincias y querer aplicar a cada provincia los que les corresponden.
Agradecería sus comentarios.
Un saludo y agradecerle sinceramente el reporte publicado, para nada es lento y funciona muy bien.
tendría que estudiar la mejor forma de hacerlo. Seguramente con algún tipo de condición.
Buenos días, sería posible algún tipo de ejemplo que me pudiera llevar a poder hacer el tipo de condición; ejemplo creo tablas con las festividades para cada provincia y las denomino por el nombre de la provincia (en lugar de crear una tabla general de «festividades»), ¿Cómo puedo llamar a la tabla que tiene las festividades de esa provincia? Yo por el código postal puedo saber siempre a qué provincia corresponde y que tabla tendría que llamar, el problema es que no sé como hacer la condición para decirle qué tabla de festividades debe coger para que pueda hacer el cálculo correcto.
Sería tan amable de indicarme alguna condición que me permita poder elegir la tabla de festividades de la provincia correspondiente para poder hacer el cálculo ( yo en todo momento sabría que tabla debo elegir por el código postal, el problema es que no sé como condicional la tabla de festividades de su cálculo)
Agradecerle tanto sus comentarios como su anterior contestación.
Un saludo.
Muchas gracias por el aporte, tenía un problema de rendimiento haciendo el cálculo en DAX (modelo con muchas tablas y relaciones) y hacerlo con Power Query fue la solución. Gracias por compartir