Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
camilofp
Contributor II
Contributor II

restar dias no laborables

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)

CapturaDia1.JPG

CapturaDia2.JPG

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.

CapturaDia3.JPG

la idea es que al cargar los datos me quede asíCapturaDia4.JPG:

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.

12 Replies
camilofp
Contributor II
Contributor II
Author

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)

jmmolero
Partner - Creator
Partner - Creator

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:

fechas.PNG

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:

fechas2.PNG

4- Agregamos los IDRangoFecha para calcular los festivos

[totalFestivos]:

LOAD IDRangoFecha,

SUM(Festivo) as totalFestivos

Resident Fechas

Group by IDRangoFecha

fechas3.PNG

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.

camilofp
Contributor II
Contributor II
Author

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.