Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días a todos, soy nuevo en Qv... me gustaría saber si es posible hacer lo siguiente:
Tengo una fuente de datos [Tramites.qvd] en la que consta la siguiente información:
TRAMITE | FECHA_REGISTRO | FECHA_CORTE |
---|---|---|
1 | 2017-12-29 | 2018-05-15 |
2 | 2018-02-10 | 2018-05-15 |
3 | 2018-03-19 | 2018-05-15 |
4 | 2018-04-05 | 2018-05-15 |
5 | 2018-05-10 | 2018-05-15 |
6 | 2018-05-14 | 2018-05-15 |
La idea es contabilizar los días laborables que han transcurridos desde FECHA_REGISTRO hasta FECHA_CORTE, la misma que estoy calculando con la función NetWorkDays (excluyo sábados y domingos), el problema radica que aparte de calcular los días laborables que en este caso son (lunes a viernes), también debo considerar en restar los días no laborados que fueron considerados como FERIADOS (la cantidad de días libres entre semana que no se laboraron por considerarse días festivos y que se deben excluir de la contabilizacion), para lo cual cargo en un catalogo con todas las fechas que se consideran festivos y no son laborables durante el año.
[FERIADOS.qvd]
DIA | FECHA | EVENTO |
---|---|---|
LUNES | 01/01/2018 | AÑO NUEVO |
LUNES | 12/02/2018 | CARNAVAL |
MARTES | 13/02/2018 | CARNAVAL |
VIERNES | 30/03/2018 | VIERNES SANTO |
MARTES | 01/05/2018 | DÍA DEL TRABAJO |
JUEVES | 25/05/2018 | BATALLA DE PICHINCHA |
VIERNES | 10/08/2018 | PRIMER GRITO DE LA INDEPENDENCIA |
LUNES | 08/10/2018 | INDEPENDENCIA DE GUAYAQUIL |
VIERNES | 02/11/2018 | DÍA DE LOS DIFUNTOS |
MARTES | 25/12/2018 | NAVIDAD |
En mi caso (que no tengo experiencia en qv), e intentando agregar una nueva columna DIAS_FERIADOS, mediante base de datos los haría de la siguiente manera:
Ejemplo para el caso TRAMITE: 1
select count(*) DIAS_FERIADOS from FERIADOS where FECHA between '2017-12-29' and '2018-05-15' //lo que me da un total de 7, pero el problema es que no se como agregar una subconsulta dentro de un select en QlikView
TramiteCalculado:
LOAD TRAMITE,
FECHA_REGISTRO,
FECHA_CORTE,
NetWorkDays(FECHA_REGISTRO, FECHA_CORTE) as DIAS_TRASCURRIDOS, //días hábiles
DIAS_FERIADOS, //calcular para luego poder restar entre DIAS_TRASCURRIDOS y obtener DIAS_TOTAL
DIAS_TOTAL // DIAS_TRASCURRIDOS - DIAS_FERIADOS
FROM [path\Tramites.qvd] (qvd);
STORE *from TramiteCalculado into path\TramiteCalculado.qvd;
DROP Table TramiteCalculado;
El reporte debería quedar de la siguiente manera:
TRAMITE | FECHA_REGISTRO | FECHA_CORTE | DIAS_TRASCURRIDOS | DIAS_FERIADOS | DIAS_TOTAL |
---|---|---|---|---|---|
1 | 2017-12-29 | 2018-05-15 | 164 | 7 | 157 |
2 | 2018-02-10 | 2018-05-15 | 133 | 6 | 127 |
3 | 2018-03-19 | 2018-05-15 | 108 | 4 | 104 |
4 | 2018-04-05 | 2018-05-15 | 95 | 3 | 92 |
5 | 2018-05-10 | 2018-05-15 | 70 | 2 | 68 |
6 | 2018-05-14 | 2018-05-15 | 68 | 2 | 66 |
Por favor si alguien puede ayudarme con este problema o darme una pista de cómo hacerlo si existiese otro método se lo agradecería infinitamente.
Gracias de antemano
Saludos,
PJ
Ya lo logré, resulta que dentro de la misma función NetWorkDays puedes agregar los días festivos; yo lo hice mas o menos así:
TramiteCalculado:
LOAD TRAMITE,
FECHA_REGISTRO,
FECHA_CORTE,
NetWorkDays(FECHA_REGISTRO, FECHA_CORTE) as DIAS_TRASCURRIDOS, //días hábiles
NetWorkDays(FECHA_REGISTRO, FECHA_CORTE, '2018-01-01',
'2018-02-12',
'2018-02-13',
'2018-03-30',
'2018-05-01',
'2018-05-25',
'2018-08-10',
'2018-10-08',
'2018-11-02'
) as DIAS_LABORABLES
FROM [path\Tramites.qvd] (qvd);
STORE *from TramiteCalculado into path\TramiteCalculado.qvd;
DROP Table TramiteCalculado;
Es decir, la función NetWorkDays excluye por defecto el conteo de los fines de semana y para excluir también los días festivos, se debe agregar la fecha específica de cada uno de los días que no se laboraron y que se desee que no se contabilice.
Espero le sirva a alguien
Saludos,
PJ