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

11 de febrero de 2014

Mapa de Calor usando Asistente

Para definir colores tipo "Mapa de Calor" en un gráfico, puede usarse el "Asistente de Mezcla de Colores", obteniendo colores como los siguientes::












Para acceder al asistente, se va a las propiedades de un grafico, se selecciona la expresion que se quiere asignar color y se selecciona "Color de Fondo" de la expresión. Luego en el Editor de Expresión se elige Archivo>Asistente de Mezcla de Colores y se configura el color.

El asistente permite crear un color calculado, usando la expresión especificada.


Referencias:
1.http://qlikboard.com/tag/colormix/
2. http://www.youtube.com/watch?v=YasIe3VUJrg
3. http://poverconsulting.com/?p=66

10 de febrero de 2014

Nomenclaturas

Algunas nomenclaturas, normalizacion y estandarizacion usadas en desarrollo qlikview.

1. Nombres de las solapas de script con nombres en plural (Ej:Clientes, Productos)
2. Evitar Siglas en nombres de solapas de script (Evitar:Cli, Prod)
3. En nombres solapas script, usar espacios (Ej:Clientes Activos), y evitar Clie_Act
4. Usar prefijos Map para nombres de tablas mapeadas. (Ej:Map_TablaGeo)
5. Crear todos los Maping_Tables en una sola solapa de Script
6. Usar tmp para tablas temporales: (Ej:Productos_tmp)
7. Usar espacios al nombrar campos, usando [ ] y evitar siglas (Ej:[Total Venta])
8. Usar prefijo % en campos claves. (Ej: [% Id Product])
9. Ocultar campos claves con SET HidePrefix=’%’
10. Usar prefijo # para campos con cantidades (Ej:[# Total Cliente])
11. Usar prefijo _ para Flag  (Ej: (_FLAG_Activo)
12. Usar prefijo v para variables (Ej: vMesActual)
13. Usar numeracion en nombres de qvw por orden de ejecución 
      Ejemplo:. 01_Clientes.qvw, 02_Venta.qvw
14. En nombre de qvd usar numeracion del qvw que lo crea  
      Ejemplo: 01_Clientes.qvd, 02_Venta.qvd
15. Usar campos renombrados alineados en columna a la derecha
IdCli          as [Id Cliente],
DescrpCli      as [Nombre Cliente],
Month(fecha)   as [Mes]
             

6 de febrero de 2014

Crear Campo Acumulado

El siguiente script crea el campo VentaAcumulada diariamente en cada Sucursal

Ventas_tmp:
LOAD * INLINE [
    Sucursal,   Fecha,     Venta
    Sur,      01/04/2012,    45
    Norte,    01/01/2012,    30
    Sur,      01/08/2012,    70
    Norte,    01/05/2012,    22
    Norte,    01/07/2012,    43
    Sur,      01/09/2012,    50
    Norte,    01/03/2012,    65
    Sur,      01/06/2012,    90
    Sur,      01/02/2012,    24]
;
   
Ventas:
LOAD *,
If(Sucursal=Previous(Sucursal),PEEK(VentaAcumulada)+Venta,Venta) AS VentaAcumulada
Resident Ventas_tmp Order By Sucursal,Fecha;
DROP Table Ventas_tmp; 

La tabla Ventas quedaría así:













NOTA: La función PEEK no reconoce valores nulos, por lo cual el campo Venta no debe contener Null, estos deben transformarse a cero previamente. Para transformar valores nulos, ver nota publicada aquí



3 de febrero de 2014

Gráfico Pareto

Para identificar en color gris cuales son los productos que representan el 80% de las ventas en un gráfico de barras, y obtener la siguiente visualización:












1. Cargar datos ejemplo:
LOAD * INLINE [
    Productos, Venta
    Azucar,       20
    Carne,
       175
    Arroz,
        15
    Leche,
        21
    Vegetales,
    10
    Pescado,
      20
    Marisco,
     135
    Embutido,     20
    Cafe,         12
    Pan,           9
    Frutas,        8
    Bebidas,     198
    Sal,          18]
;

2. Crear gráfico de barra con:
Dimension:  Productos
Expresion: Sum(Venta)

3. En "Definición" del "Color de Fondo" de la expresión, incluir:
if(RangeSum(Above(Sum(Venta), 0, RowNo()))/Sum(total Venta)<.8,DarkGray())

4. En Propiedades\Ordenar marcar opción Expresión>Descendente e incluir  Sum(Venta)


El qvw de ejemplo puede descargarse aqui.