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.

1 Solution

Accepted Solutions
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.

View solution in original post

12 Replies
adriansalas
Contributor III
Contributor III

Como es tu modelo de datos? podrías poner un qvw con unos pocos datos para revisarlo??

camilofp
Contributor II
Contributor II
Author

Hola Adrian, este es un ejemplo:

DiasNoLaborables:
LOAD @1 as Fecha,
   Month(@1) as Mes,
   Day(@1) as Dia,
@2 as Laborable
FROM C:\Calendario.xls (biff, header is line, no labels, table is [Hoja1$])
where @2 = 0;


Liquidacion:
LOAD Vendedor,
CodigoCliente,
cl_nombre,
ROC,
EmisionROC,
Factura,
EmisionFactura,
VencimientoFactura,
FechaRealEntrega,
FechaConsignacion,
ValorTotalROC,
IVAValorTotalROC,
DiasRecaudo,
%Comision,
ComisionaPagar,
RecalculoFechaVencimiento
FROM (biff, embedded labels, table is [Sheet1$]);

Tabla Días No laborables (0) - Laborables (1)

FechaLaborable
1/04/20180
2/04/20181
3/04/20181
4/04/20181
5/04/20181
6/04/20181
7/04/20181
8/04/20180
9/04/20181
10/04/20181
11/04/20181
12/04/20181
13/04/20181
14/04/20181
15/04/20180

Tabla Liquidación:

VendedorCodigoClientecl_nombreROCEmisionROCFacturaEmisionFacturaVencimientoFacturaFechaRealEntregaFechaConsignacionValorTotalROCIVAValorTotalROCDiasRecaudo%ComisionComisionaPagarRecalculoFechaVencimiento
105B_6385854 31140607/03/20181606/14/201806/14/201806/23/201806/29/2018948.210796.81561,50%23.904,4507/12/2018
110B_6385918 31140707/03/20188806/22/201806/22/201806/25/201806/29/20181.773.0021.489.91841,50%22.348,7607/03/2018
502Q_359831 40045907/04/2018150158005/31/201806/30/201806/09/201807/03/2018354.960298.286240,75%2.237,1407/13/2018
adriansalas
Contributor III
Contributor III

Yo vincularía el campo Fecha de tu tabla de días inhábiles y con la tabla principal mediante el campo que usas para seleccionar meses y días, (no se aprecia que campo utilizas). Lo mejor sería hacer una Tabla de Fechas maestras, pero no es obligatorio.

Captura06.PNG

camilofp
Contributor II
Contributor II
Author

OK Adrián si, aunque ya lo intente pero no me resultó. traté con estos dos campos que son los que tienen la fecha inicial y final pero como son dos fechas las que debo tener en cuenta debería hacer una tabla temporal o algo así??

Liquidacion:

LOAD Vendedor,……..

FechaRealEntrega,

FechaConsignacion,

ValorTotalROC,......

FechaRealEntrega, (Fecha Inicial)

FechaConsignacion, (Fecha Final)

de esa misma forma había pensado y quería hacer esto...

días = ((Fecha Final) - (Fecha Inicial)) - (# días No Laborables)


adriansalas
Contributor III
Contributor III

Viendo así el problema lo ideal sería una tabla de fechas maestra, pero antes de eso intenta con algo así:

Sum({<Fecha={">$(=max(date(FechaRealEntrega)))<=$(=max(date(FechaConsignacion)))"}> }Laborable)

camilofp
Contributor II
Contributor II
Author

Gracias Adrián, otro problema adicional es que mi versión es la 8.20 la cual esta muy desactualizada y no tengo set análisis..

adriansalas
Contributor III
Contributor III

Pues haz una tabla de fechas maestra, con una tabla sirva para hacer link entre los diferentes tipos de fechas y la tabla maestra. aunque aún así no se si vaya a funcionar sin un poco de set analysis.

camilofp
Contributor II
Contributor II
Author

ok Adrián vale. muchas gracias. lo voy a intentar por ahí..

Anonymous
Not applicable

Estimado, buen día.

En algun momento me encontre en un caso parecido al de Ud. lo que hice fue crearme una tabla calendario desde mi BD central, las fechas lo armo con las fechas de documentos emitidos (Fact), lo cual me asegura que si un documento fue registrado en un dia particular hace que el dia haya sido laborable, al final hago la suma de todos los dias unicos encontrados con emision de documentos.

quedo atento.

Carlos C.