5 diciembre, 2022

FUNCIÓN DEFINIDA EN POWER QUERY PARA CALCULAR DÍAS LABORABLES ENTRE DOS FECHAS

Hola a todos!, parece que este fin de semana le ha tocado a Power Query!.

El post de hoy trata sobre un tema que tenía pendiente desde hace tiempo, y es el de crear una función definida por el usuario (UDF) o si preferís custom function, que nos permita calcular días hábiles entre dos fechas, y además tenga en cuenta una lista de fechas que pueden ser tratadas como vacaciones o festividades.

Allá por Agosto del año pasado escribí un post realizando este ejercicio pero calculando el dato en una columna personalizada con lenguaje M: CALCULAR DÍAS LABORABLES CON POWER QUERY

En esta ocasión lo vamos a hacer pero con una función. Veamos los datos que necesitaremos inicialmente, datos de fechas (inicio y final) y listado de días festivos.

Estas tablas las vamos a subir por separado a Power Query.

Y a continuación en una consulta en blanco vamos a añadir el siguiente código en nuestro editor de Query:

(Inicio as date, Fin as date, optional Festividades as list) =>
let
    Fechas = List.Dates(Inicio, Duration.Days(Fin - Inicio)+1, #duration(1, 0, 0, 0)),
    nFechas=List.Difference(Fechas, Festividades),
    DiasLab = List.Select(nFechas, each Date.DayOfWeek(_,1) < 5 ),
    nDias = List.Count(DiasLab)
in
    nDias

Quedaría así:

y a la consulta le llamaré DIASLAB. Después de pulsar en el botón «Listo», tendremos nuestra función ya creada:

Una vez que ya hemos creado la función, ya la podemos usar .: Abrimos MITABLA y seleccionamos las columnas INICIO y FIN y a continuación pulsamos en «Invocar función personalizada». Entonces ya podremos especificar el nombre de nuestra función DIASLAB e incluir los campos INICIO y FIN. También debemos añadir el campo de las FESTIVIDADES.

El resultado lo vamos a exportar a una hoja que he denominado RESULTADO:

Y esto es todo. Os dejo el archivo:

Y esto es todo, espero que sea de utilidad!!.

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡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

Comparte este post

3 comentarios en «FUNCIÓN DEFINIDA EN POWER QUERY PARA CALCULAR DÍAS LABORABLES ENTRE DOS FECHAS»

  1. Buenos días Segu,

    Gracia por seguir enriqueciéndonos siempre con éste y todos los grandes aportes de tu canal. La función es muy útil, pero está limitada a una sola lista de festividades, es decir sólo puedes aplicarla para todos los que sean festivos nacionales, por tanto se limita y no puedes aplicarla para los festivos de cada provincia (que sería lo correcto). La función debería permitir que según el código postal de su provincia (es decir tener una tabla con las columnas de cada provincia y sus festivos en lugar de sólo la nacional) eligiera dicha lista y la aplicara al periodo indicado de fechas de nuestra tabla.

    Para aquellos que no tenemos grandes conocimientos, la solución sería hacer condiciones If – else condicionado a un campo de código postal, siendo éste el que determine qué columna de nuestra tabla de festividades debe elegir, pero supondrá hacer 52 comparaciones (una por cada columna de los festivos de las distintas provincias ) no siendo una opción muy funcional de aplicar.

    Si tu aporte de función definida por el usuario fuera teniendo presente los festivos de las 52 provincias de España, creo que la misma sería de mayor interés e utilidad para todos nosotros.

    Agradecerte todos tus aporte y conocimientos compartidos en tu Web.

    Un saludo.

      1. Buenas noches,
        Muchas gracias por tu rápida respuesta y el aporte en VBA facilitado, funciona muy bien y resuelve ésta necesidad perfectamente; desde luego que nos ayudará a muchos el poder utilizarla.
        Ahora te animo a ese reto de replicarlo en Power Query (en lenguaje M), lenguaje con un gran futuro en la transformación y modelado de datos y en el que todos seguimos aprendiendo y sorprendiéndonos contigo.
        Agradecerte de nuevo este gran aporte.
        Un saludo.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

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.plugin cookies

ACEPTAR
Aviso de cookies