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());






30 de enero de 2014

EXECUTE para copiar archivos y otras funciones

Algunas sentencias del comando EXECUTE

NOTA: Para recargar varios qvw usado execute, ver ejemplo adjunto aqui

1. Mueve todos los archivos QVD de la carpeta anterior "Nuevos" a la carpeta "Cargados"
EXECUTE cmd /c Move "..\Nuevos\*.qvd" "..\Cargados\";

2. Borra todos los QVD ubicados en la carpeta anterior "Cargados"
EXECUTE cmd /c Del "..\Cargados\*.qvd"; 

3. Copia todos los QVD de la carpeta anterior "Cargados" a la carpeta "Historico"
EXECUTE cmd /c Copy "..\Cargados\*.qvd" "..\Historico\";

4. Renombra el archivo Enero.qvd por Enero_old.qvd
EXECUTE cmd /c Ren "..\Cargados\Enero.qvd" "Enero_old.qvd";

5. Abre y ejecuta el Script del qvw Historico.qvw. Al terminar la ejecución, guarda y cierra el qvw.
EXECUTE 
"C:\Program Files\QlikView\QV.exe"  
"..\ArchvosQVDs\Historico.qvw" /R;


6. Abre y ejecuta el Script en  Historico.qvw.   Al terminar la ejecución, deja abierto el qvw
EXECUTE 
"C:\Program Files\QlikView\QV.exe"  "..\ArchvosQVDs\Historico.qvw" /L;

7. Abre y ejecuta el Script en Historico.qvw. Luego asigna el valor 2014  a la variable ULTIMO_AÑO (variable existente en Historico.qvw). Al terminar la ejecución, guarda y cierra el qvw. NOTA: la v minuscula en vULTIMO_AÑO no es parte del nombre de la variable, sino un parametro. 
EXECUTE 
"C:\Program Files\QlikView\QV.exe"  /vULTIMO_AÑO=2014 "..\ArchvosQVDs\CreacionQVD_Historico.qvw" /R;

8. Abre el archivo DatosHistoricos.qvw sin datos cargados
EXECUTE
"C:\Program Files\QlikView\QV.exe" /NODATA "..\ArchvosQVDs\DatosHistorico.qvw";

9. Crea  la carpeta nueva ENERO
EXECUTE cmd /c mkdir C:\QVD\ENERO; 



NOTA: Para programar recargas diarias de varios qvw, ver ejemplo publicado aqui

Referencias:
1. http://www.naturalsynergies.com/q-tip-7-execute-a-command-using-execute/
2. http://qlikviewmaven.blogspot.com.ar/2008/08/qlikview-command-line-and-automation.html
3. http://www.youtube.com/watch?v=HaHjMPBGlxw#t=535

27 de enero de 2014

Indicador de Máximo en Objeto Texto

 En algunos diseños (en Dashboard por ejemplo) se requiere mostrar indicadores como "la sucursal con mayor venta" en un objeto de texto, y obtener visualizaciones como la siguiente:





Una técnica para lograr esto puede ser:
1. Cargar datos ejemplo:
LOAD * INLINE [
    Sucursal, ImporteVenta, CantidadVendida
    Norte,       213,              5
    Sur,         241,              4
    Norte,       253,              7
    Oeste,       410,              8
    Sur,         221,              6
    Oeste,       319,              8
    Sur,         284,              2]

2. Crear objetos de texto:
Para mostrar la "Sucursal con Mayor Venta":
=Only({1} If(  Aggr(Rank(sum( ImporteVenta),4, 3),Sucursal) = 1,Sucursal)) 
Para mostrar "$ Importe Vendido" de la sucursal con mayor venta:
=maxAggr(sum(ImporteVenta),Sucursal))
Para mostrar "Cantidad Vendida" de la sucursal con mayor venta:
=max({<Sucursal={$(=Only({1} If(  Aggr(Rank(sum(ImporteVenta),4, 3),Sucursal) = 1,Sucursal)))}>} Aggr(sum(CantidadVendida),Sucursal))


El qvw de ejemplo puede descargarse aquí

NOTA:
Para "máximo y mínimo" en gráfico de linea, ver nota publicada aqui 
Para notas sobre diseño de dashboard, ver nota publicada aqui

26 de enero de 2014

Dos Dimensiones en Gráfico Barras

Para obtener el gráfico:











 1. Cargar datos
LOAD * INLINE [
    Año, Sucursal, Venta
    2009, Norte,   245
    2009, Sur,     121
    2010, Norte,   397
    2010, Sur,     178
    2011, Norte,   131
    2011, Sur,     283
    2012, Norte,   436
    2012, Sur,     537
    2013, Norte,   648
    2013, Sur,     325]

2. Crear Gráfico de Barra y asignar: 
Dimensión 1: Sucursal
Dimensión 2: Año
Expresión 1: sum(Venta)
Expresión 2: 0

3. En Propiedades de Gráfico > Presentación desmarcar Mostrar Leyenda

Referencia: http://www.qlikcommunity.com/thread/50491


El qvw de ejemplo puede descargarse aquí


22 de enero de 2014

Sustituir valores Null

Diferentes técnicas para sustituir valores null en Script

1.  Cuando el Campo es número y se quiere sustituir los Null por 0
       Alt(CampoNumero*1,0) as CampoNumero


2.   Cuando el valor es texto y se quiere sustituir los Null por 'Sin Dato'
      If(Len(Trim(CampoTexto))=0,'Sin Dato', CampoTexto) As CampoTexto


3. Cuando se quiere sustituir los Null del CampoNumero y del CampoTexto el por 'Valor Desconocido'
    NullAsValue CampoTexto,CampoNumero;
    SET NullValue='Valor Desconocido';
    LOAD CampoTexto,
                
CampoNumero,
                
OtroCampo
  FROM Datos.qvd  Where 1=1


4. Cuando se quiere sustituir los Null de todos los campos por 'Valor Desconocido'
 NullAsValue *;
SET NullValue='Valor Desconocido';    
LOAD  CampoTexto,
             
CampoNumero,
             
OtroCampo
  FROM Datos.qvd   Where 1=1


 
NOTA:
• Para seleccionar valores nulos, ver nota publicada AQUI
• Para excluir valores nulos en Load, ver nota publicada AQUI
Con cargas  QVD Optimez no asigna el NullValue, por eso se incluye Where 1=1 para "romper" el QVD Optimez.



Referencia: https://www.youtube.com/watch?v=l20fjOQgbRc




20 de enero de 2014

Selecionar muestra aleatoria

Diferentes técnicas para elegir una muestra de datos de una tabla

1.El siguiente Script asigna a cada registro una probabilidad de 50% de ser seleccionado (cargado), usando la función SAMPLE:
Sample 0.5
LOAD * INLINE [
    Sucursal, Venta
    Norte,    23
    Sur,      54
    Norte,    53
    Oeste,    90
    Sur,      21
    Oeste,    39
    Sur,      84
    Norte,    36
    Este,     33

    Sur,      93]

Para usar Sample en un QVD debe usarse Where, quedando:
Sample 0.5
LOAD SucursalVenta
FROM Datos.qvd
Where 1=1; 

NOTA: La probabilidad con Sample puede ser de 0 a 1


2. Otra técnica para seleccionar una muestra aleatoria es usar la funcion RAND() quedando:
LOAD * WHERE Rand()<0.5;
LOAD * INLINE [
    Sucursal, Venta
    Norte,    23
    Sur,      54
    Norte,    53
    Oeste,    90
    Sur,      21
    Oeste,    39
    Sur,      84
    Norte,    36
    Este,     33
    Sur,      93]
;

3. Para cargar los 100 primeros registros (No Aleatorio) de una tabla, puede usarse:
First 100 LOAD From Datos.qvd


4.Para cargar una cantidad especifica de registros aleatorios, puede crearse un campo aleatorio y despues ordenar la tabla con este campo. Luego que el orden sea aleatorio se eligen, por ejemplo, los primeros 100 registros, y será una elección aleatorios de 100 registros:


Base_Cliente:
LOAD
     
RecNo()     as IdCliente,
     
rand()      as Aleatorio
AutoGenerate
 10000;

Clientes_Aleatorios:
First
100
Noconcatenate

LOAD
 * Resident Base_Cliente
Order
 By Aleatorio;
DROP
 Table Base_Cliente;



5. Para cargar los 100 primeros registros (No Aleatorios) de todas las tablas, ir al Editor Script>Depurar y en Carga Limitada seleccionar 100, luego elegir Ejecutar.

Referencia: https://gist.github.com/ralfbecher/5314810

18 de enero de 2014

Concepto D-A-R para Analisis

D-A-R (Dashboard-Analysis-Report) es un concepto de jerarquía en exploración de información, donde primero se muestra la información de forma resumida o en Dashboard, luego se pasa a Analizar datos específicos de la información, y por último se muestra la información en detalle con Reportes.

DASHBOARD
Debe indicar/alertar las situaciones criticas de los procesos o indicadores claves. Es la primera visualización en una aplicación, y debe indicar qué está bien y qué está mal, sin necesidad de explicar el por qué de la situación.
Pasos a seguir:
1. Identificar todas las métricas relevantes
2. Elegir sólo indicadores más importantes (con mayor relación en la actividad principal del área o negocio). Menos de 7 indicadores es lo usual por cada Dashboard.
3. Elegir métricas que cambien de forma periódica.
4. Los Indicadores siempre deben compararse (Actual Vs Anterior, Actual Vs Meta, Acual Vs Promedio, etc.)
5. No resaltar los indicadores positivos (en color verde, por ejemplo), sólo identificar los malos o negativos (en rojo, por ejemplo) en los cuales se debe accionar.
6. Todos los graficos/tablas del Dashboard deben mostrarse preferentemente en primera instancia. Si existen gráficos minimizados es porque son análisis de menor importancia, y no deberían estar en el Dashboard, sino en análisis.
NOTA: Ver pdf en Referencia No.3 para detalles de un dashboard

ANÁLISIS
Debe detallar el por qué y el cómo de los indicadores mostrados en el Dashboard. (Tendencia, Max, Min, Vs, %, Pareto, Outliers, Relaciones entre variables, etc.)
REPORTE
Enfocado a mostrar detalles de registros en tablas (Detalles de facturas, llamadas, ordenes de compras, solicitudes, listas de productos, listas empleados, etc.)


Referencia:

17 de enero de 2014

Personalizar Formato Celda

Para dar formato a las celdas en Tablas Simples y Tablas Pivotantes, y obtener formatos como el siguiente:











Ir a Configuración > Preferencias de Usuario > Diseño  y marcar  Mostrar Siempre Opciones de Menú de Diseño.Luego se agrega una Tabla Simple o Pivotante, y al hacer click derecho sobre la tabla, elegir Personalizar Formato de Celta.

Se presenta esta ventana para personalizar formato de celdas:











Referencia: http://community.qlikview.com/message/375302#375302







Esquema Keep




















Referencias: http://community.qlikview.com/groups/qvscriptor-from-schema-to-script/blog/2011/11/11/understanding-join-keep-and-concatenate

14 de enero de 2014

Cuadro de Lista Dinamico

Si se tiene poco espacio para las visualizaciones, podría ser útil tener sólo dos Cuadros de Lista que permitan hacer todas las Selecciones necesarios.

Para crear un Cuadro de Lista que contenga Dimensiones especificas, y otro Cuadro de Lista que muestre los valores de la dimensiones seleccionada en el Cuadro de Lista anterior, obteniendo:









1. Se cargan los datos:
LOAD * INLINE [
    Año, Mes, Dia, Fecha, Region, Continente, Pais, Venta, Margen
    2010, Ene, 14, 14/01/2010, Norte, America, EEUU, 230, 32%
    2010, Ene, 11, 11/01/2010, Sur, Europa, Francia, 245, 31%
    2011, Feb, 10, 10/02/2011, Norte, Asia, China, 682, 69%
    2011, Feb, 12, 12/02/2011, Sur, America, Canada, 338, 42%
    2012, Mar, 13, 13/03/2012, Norte, Europa, Alemania, 380, 64%
    2012, Mar, 15, 15/03/2012, Sur, Asia, Japon, 764, 22%
    2013, Abr, 17, 17/04/2013, Norte, America, Cuba, 380, 18%
    2013, Abr, 18, 18/04/2013, Sur, Europa, Italia, 407, 63%]
;


2. Se crea el Cuadro de Lista 1 en  Diseño > Nuevo Objeto de Hoja > Cuadro de Lista  y en Campo se elije <Expresión>  y se ingresa la función:
=Aggr(
Only({<[$Field]={'Año','Mes','Continente','Pais','Region'}>}[$Field]),[$Field]

3. Se crea el Cuadro de Lista 2 en  Diseño > Nuevo Objeto de Hoja > Cuadro de Lista  y en Campo se Elije <Expresión>  y se ingresa la función: 
=$(='['&Only([$Field])&']') 



El qvw de ejemplo puede descargarse AQUI. 


Referencia: 

13 de enero de 2014

Etiquetas sobre Grafico de Linea

Para obtener el gráfico:
















1. Cargar datos
LOAD * INLINE [
    Fecha, Sucursal, Venta
    14/01/2013, Norte, 448
    14/01/2013, Sur, 121
    10/02/2013, Norte, 710
    10/02/2013, Sur, 178
    13/03/2013, Norte, 131
    13/03/2013, Sur, 283
    17/04/2013, Norte, 436
    17/04/2013, Sur, 537
    29/05/2013, Norte, 648
    29/05/2013, Sur, 325]
;
 

2. Crear Gráfico de linea con
Dimensión 1: Fecha 
Dimensión 2: Sucursal
Expresión 1Dual( if(Fecha=max(TOTAL Fecha),
             Sucursal,''),
             Sum(Venta)) 

3. En la expresión elegir Valores sobre los datos y en Solapa Numero elegir Expresión Predefinida




El qvw de ejemplo puede descargarse aquí


12 de enero de 2014

Ordenar Cuadro de Lista con Match

Para personalizar el orden el siguiente Cuadro de Lista según jerarquía de Posición:










En objeto Cuadro de Lista, ir a Propiedades>Orden  y en Expresión se agrega función:
Match(Posicion,'Gerente','SubGerente','Analista')

El resultado seria: