Mostrando entradas con la etiqueta Calendario y Fechas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Calendario y Fechas. Mostrar todas las entradas

11 de octubre de 2014

Flags para idenficar Fechas

Si se tienen Ventas por cliente y se quiere identificar:
    1. Ultimo Consumo de cada  Cliente
    2. Primer Consumo de cada Cliente
    3. Si el Cliente consume en ultimo día del mes
    4. Si el Cliente consume en primer día de la semana
    5. Si el Cliente consume en ultimo día de semana

Una técnica podría ser crear campos tipo Flag, quedando como resultado:











Para lograr esto el scrip seria:

9 de abril de 2014

Selector Desde Hasta con Variables


Para lograr filtros de fecha de tipo Desde Hasta usando variables, y obtener un resultado como el siguiente:















PASOS:

1. Cargar datos ejmplo:
Load
Date(RecNo()+41274) As Fecha,
RowNo()*(1+Rand())  As Ventas
AutoGenerate(365); 

8 de abril de 2014

19 de febrero de 2014

Maxima Fecha para Carga Incremental

Diferentes técnicas para obtener la máxima fecha de un qvd y asignarla a una variable para luego usar esta variable en una Carga Incremental.

1. Asignar la fecha de la última actualización del qvd a la variable UltimaFecha
LET UltimaFecha=QvdCreateTime('C:\Datos.qvd'); 


2. Crear tabla de un registro con la fecha máxima, leyendo todos los registros del campo Fecha de un qvd.
TablaFechas_tmp:
LOAD Max(Fechaas Fecha
From Data.qvd (qvd);
LET UltimaFecha=Peek('Fecha',0,'TablaFechas_tmp');


3. Cargar todos los registros del campo Fecha de un qvd y después ordena las fechas de mayor a menor en una tabla nueva nombrándola TablaFechas_tmp. Luego asigna la primera fecha de la TablaFechas_tmp a la variable UltimaFecha. 

TablaFechas:
LOAD Fecha
FROM Data.qvd (qvd);
TablaFechas_tmp:
NoConcatenate LOAD Fecha
Resident TablaFechas Order By Fecha desc;

LET UltimaFecha=Peek('Fecha',0,'TablaFechas_tmp');


4. ..
//  Carga el campo Fecha del qvd
Temporal_1:
LOAD Fecha
FROM Fact_Ventas.qvd (qvd);


// Load Precedente que carga la tabla creada
// inmediatamente después
Temporal_2:
NoConcatenate
LOAD MaxString(Fecha) as UltimaFecha;

// Crea tabla de un registro con la Fecha Máxima, 
// leyendo los campos Fecha cargados previamente
LOAD fieldvalue('Fecha',iterno()) as Fecha AUTOGENERATE
WHILE not IsNull(fieldvalue('Fecha',iterno()));
// Asigna a la variable vUltimaFecha el valor 
// del campo UltimaFecha de la tabla Temporal_2
let vUltimaFecha = FieldValue('UltimaFecha',1);

//Borra tablas
DROP Table Temporal_1, Temporal_2; 


Referencias:
1. http://www.learnqlickview.com/qlikview-tutorial-a-how-to-tip-on-data-load/
2. http://qlikviewnotes.blogspot.com.ar/2013/09/fastest-methd-to-read-maxfield-from-qvd.html
3. http://qlikviewnotes.blogspot.com.ar/2013/08/super-fast-method-to-retrieve-qvd-high.html
4. http://www.qlikcommunity.com/thread/35463
5. http://qlikviewmaven.blogspot.com.ar/2009/06/quick-load-of-max-field-value.html

31 de enero de 2014

Campos en un Calendario

El siguiente script crea una tabla Calendario con los campos mas comunes




LET vMin=num('01/01/2012'); //<--Inicio del calendario

Calendario:
LOAD
Date(Fecha)                              as Fecha,
Year(Fecha)&Num(Month(Fecha),'00')       as Periodo,
Year(Fecha)                              as Año,
Month(Fecha)                             as Mes,
MonthName(Fecha)                         as MesAño,
Num(Month(Fecha),'00')                   as MesNumero,
'Q-'&
Ceil (month(Fecha)/3)               as Cuatrimestre,
'T-'&
Ceil (month(Fecha)/4)               as Trimestre,
year(Fecha)&'-'&month(Fecha)
&'-'&Ceil(Day(Fecha)/7)                  as AñoMesSemana,
Day(Fecha)                               as Dia,
Dual(Num(Day(Fecha),'00')&
     '-'&
Month(Fecha),Fecha)             as Dia_Mes,
WeekDay(Fecha)                           as DiaSemana;

LOAD Date(IterNo()+$(vMin)-1)            as Fecha
AutoGenerate 1 While IterNo()+$(vMin)-1<=num(Today());






15 de diciembre de 2013

Transformación de fechas

Ejemplos de Función Date# Date para transformar fechas y luego darles formato. Esto como método alternativo a MakeDate, que usa 4 funciones haciendo más lento el load. Ejemplo: MakeDate(Left(20130628,4), Mid(20130628,5,2),Right(20130628,2))


1. Date#(20130628,'YYYYMMDD')
Devuelve 41453 en formato 20130628

2. Date(Date#(20130628,'YYYYMMDD'),'DD-MMM-YY')
             Devuelve 41453 con formato 28-jun-13

3. Date(Date#('2013.06.28','YYYY.MM.DD'),'DD-MMM-YY')
             Devuelve 41453 con formato 28-jun-13


4. Date(Date#('06-28-13','MM-DD-YY'),'DD-MMM-YY')
             Devuelve 41453 con formato 28-jun-13

5. Date(Date#('28.06.13' ,'DD.MM.YY'),'DD-MMM-YY')
              Devuelve 41453 con formato 28-jun-13

6. Date(Date#('jun.28.2011', 'MMM.DD.YYYY'), 'DD-MMM-YY')
              Devuelve 41453 con formato 28-jun-13

7. Para eliminar hora de una fecha
Date(Floor'2013-06-28 07:30:38),'DD-MMM-YY')
                     Devuelve 41453 con formato 28-jun-13 sin minutos

8. Para obtener solo la hora de una fecha
Time(Frac( '2013-06-28 11:30:38' ),'hh:mm:ss')
     Devuelve 0,47960648148 con formato 11:30:38

9. Para obtener Fecha y Hora
             DateTimestamp#( '20130628 11:30:38', 'YYYYMMDD hh:mm:ss'), 'DD-MMM-YY hh:mm:ss'   )
                      Devuelve 41453,479606481  con formato 28-jun-13 11:30:38

10. Para obtener día de la semana en fecha
             Date'2013-06-28', 'WWW DD-MMM-YY')
                      Devuelve 41453  con formato  vie 28-jun-13

11. Resta un mes a la fecha
AddMonths('2013-06-28',-1)
Devuelve 41422 en formato 28/05/2013 (formato predeterminado)



12. Suma un mes a la fecha
AddMonths('2013-06-28', 1)
Devuelve 41453 en formato 28/07/2013 (formato predeterminado)

13. Transforma la hora en un rango de 30 minutos:
Time( Floor('09:55',0.02083333333333330),'hh:mm') 
           Devuelve 0.395833333 en formato 09:30



14. Transforma la hora en un rango de 10 minutos
TimeFloor('09:55',0.006944444444444440),'hh:mm') 
           Devuelve 0.4097222222 en formato 09:50


NOTAS:
Al indicar un formato de hora en Qlikview la letra mayuscula M= mes,  y letra minuscula m= minutos



Otras transformaciones:
Para eliminar ceros a la izquierda, ver nota publicada aquí
Para transformar campos en escala normalizada, ver notas publicada aqui
Para transformar campos en escala normalizada especifica, ver notas publicada aqui






Calendario Maestro

Algunas veces es necesario mostrar valores cero en series de tiempo, para visualizar, por ejemplo, los días sin venta. Al cargar los datos en Qlikview obtenemos lo siguiente:
Factable_1.jpg


Cuando en realidad necesitamos un gráfico con todos los días transcurridos:
Factable__3.jpg

Para esto creamos una tabla Calendario Maestro (o master calendar) que contenga desde la fecha mínima hasta la máxima, con los siguientes pasos:
Paso 1: Cargar FactTable
Paso 2: Crear una tabla con dos campos que contenga únicamente la fecha mínima y máxima del campo Fecha de la FactTable
Paso 3: Crear dos variables con las fechas máximas y mínimas
Paso 4: Crear la tabla CalendarioMaestro que contenga todas las fechas
Paso 5: Borrar la tabla utilizada para asignar las variables con fechas máximas y mínimas
Paso 6: Borrar las variables vMin y vMax utilizada para indicar inicio y fin del CalendarioMaestro.

//  Paso 1:
FactTable:
LOAD * INLINE [
Fecha, Venta
01/01/2013,93
02/01/2013,62,
08/01/2013,39,
09/01/2013,94
10/01/2013,63]
;

//  Paso 2:
TablaMinMax:
LOAD
min(Fecha)      as FechaMin,
max(Fecha)      as FechaMax
Resident FactTable;

//Paso3:
LET vMin=num(Peek('FechaMin',0,'TablaMinMax'));
LET vMax=num(Peek('FechaMax',0,'TablaMinMax'));

//  Paso 4:
CalendarioMaestro:
LOAD
Date(IterNo()+$(vMin)-1)   as Fecha
AutoGenerate 1 While IterNo()+$(vMin)-1<=$(vMax);

//  Paso 5:
DROP Table TablaMinMax;  

//  Paso 6:
LET vMin=;LET vMax=;


El visor de tablas quedaría así:
Factable__2.jpg
Luego se agrega un gráfico de líneas con la dimensión Fecha y  expresión Sum(Venta).
Después ir a Propiedades del gráfico, pestaña Presentación y se desmarca la opción Suprimir Valores Cero.


NOTAS:
Para crear otro campos Mes y Trimestre,  agregar otras líneas en el paso 4:
Month(IterNo()+$(vMin)-1)         as Mes
Ceil(Month(IterNo()+$(vMin)-1)/3) as Trimestre

Referencias