Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días comunidad, primero que todo gracias por la atención.
Mi problema es que no se como hacer para restar los días No Laborables en un rango de fechas que no precisamente es en el mismo mes. para hacer entendible el problema presento el siguiente ejemplo: calcular los días hábiles contando el sábado y restar los no laborables (6 días) la resta me debe dar 18 días (entre el 9 de junio al 03 de julio)
Para facilitar las cosas hice una tabla con las fechas No Laborables para restar a los 24 días calendario que hay entre el 9 de junio al 03 de julio.
la idea es que al cargar los datos me quede así:
he tratado con la función Networkdays() pero el problema es que no logro integrar las dos tablas, también probé con tablas temporales pero en las selecciones no me toma todos los días. como sería la mejor manera de hacer esto?
muchas gracias por la atención.
Hola Carlos muchas gracias por la información, el problema es que en el calculo no se tienen en cuenta solo los días trabajados sino los días calendarios del lunes a sábado menos los días festivos y domingos. como ya tengo todos los días calendarios de una parte y por otro lado los días no laborados lo que tendría que hacer es una resta pero el asunto es que debo seleccionar los días no laborables del rango de dos fechas (Fecha de Consignación y Fecha Real Entrega).
Días Calendario = Fecha de Consignación - Fecha Real Entrega = 24 dias
Días No Laborados = >= Fecha de Consignación and <= Fecha Real Entrega = 6
Total días a Pagar = 18 días.
El problema es que no sé como hacer los Días No Laborados ya que no se que función utilizar teniendo en cuenta que la versión aquí es muy antigua (8.20)
Buenas Camilo,
Puedes intentar lo que te explico a continuación con pseudocódigo
1 - En tu tabla de hechos ([Base liquidación] ?¿) crear un campo concatenando las fechas [Fecha Consignacion] Y [Fecha Real Entrega]:
[Hechos]
LOAD ...
[Fecha Consignacion] & '-' & [Fecha Real Entrega] as IDRangoFecha,
....
2- Por cada registro generamos las fechas entre [Fecha Consignacion] y [Fecha Real Entrega] :
[Fechas]:
LOAD IDRangoFecha,
Date([Fecha Real Entrega] + IterNo() - 1) AS Fechas
RESIDENT [Base liquidación]
WHILE IterNo() <= [Fecha Consignacion] - [Fecha Real Entrega] + 1;
Se crear una tabla como esta:
3 - Identificar los días festivos y domingos:
Los primero sería coger tu tabla de festivos y crear un mapping
[map_festivos]:
Mapping LOAD Fecha,
1
FROM ExcelFestivos...
Luego sobre la misma tabla crear en el paso 2 creamos un campo "Festivo" que indicar si el día es festivo o domingo
[Fechas]:
LOAD *,
if(WeekDay(Fecha) = 'Sun' or Applymap('festivos',Fecha,0) = 1 ,1,0) as Festivo;
LOAD IDRangoFecha,
Date([Fecha Real Entrega] + IterNo() - 1) AS Fecha
RESIDENT [Base liquidación]
WHILE IterNo() <= [Fecha Consignacion] - [Fecha Real Entrega] + 1;
Se genera esta tabla:
4- Agregamos los IDRangoFecha para calcular los festivos
[totalFestivos]:
LOAD IDRangoFecha,
SUM(Festivo) as totalFestivos
Resident Fechas
Group by IDRangoFecha
Con esto ya sabes cuantos festivos hay entre las fecha de [Fecha Real Entrega] y [Fecha Consignacion].
Usando el campo IDRangoFecha puedes añadir esta información a cada registro de tu tabla de hechos.
Espero que te haya ayudado.
Un saludo.
Hola José María. muchas gracias por el aporte, me ayudo a solucionar mi problema. Si bien no lo hice al pie de la letra ya con la concatenación de las fechas puede seguir adelante.
Mil gracias.