Trabajar para un adicto al trabajo: 10 consejos para recuperar el equilibrio entre tu vida laboral y personal

Trabajar para un adicto al trabajo: 10 consejos para recuperar el equilibrio entre tu vida laboral y personal
Infografía ofrecida por Wrike – Gestión De Proyectos Software

Sin Comentarios

Recuperar licencias de Qlikview perdidas

Una de las peores incidencias que te puede ocurrir como administrador de servidores de Qlikview es que se corrompa la base de datos interna donde se almacena la configuración de licencias de usuario (Document CALs) y de la noche a la mañana nadie pueda acceder al repositorio de informes de Qlikview.

Configurar licencias Qlikview con grupos de usuarios de Windows

Lo ideal para evitar esta situación es mantener los usuarios con licencia en grupos de usuarios del sistema operativo donde esté ubicado el servidor de Qlikview, de forma que mantenemos aislado el reparto de licencias de la propia configuración de Qlikview. En caso de que se corrompa el fichero .pgo, simplemente reasignamos desde Qlikview Management Console (QMC) los grupos de usuarios a cada documento correspondiente.

En primer lugar debemos configurar un nuevo grupo de usuarios al que asignaremos los usuarios del dominio.


Lo siguiente es dirigirnos al Qlikview Management Console (QMC) en http://localhost:4780/qmc/, nos dirijimos a Documents, seleccionamos uno de ellos y en la pestaña Authorization creamos una nueva a nivel Names Users. Pulsamos el botón de los usuarios y aparecerá una nueva ventana donde podremos introducir el nombre del grupo que acabamos de crear (en la parte inferior). Recordad que la estructura debe de ser NOMBRE_MAQUINA\GRUPO_USUARIOS

Recuperar backup de fichero .pgo

En caso de que hayas perdido las licencias de Qlikview y no tengas configurado el sistema por grupos de usuario del Sistema operativo, tienes dos opciones: picar a mano de nuevo todos los usuarios (si tienes 10, no hay problema, pero como tengas 300 y 50 documentos con distinto nivel de acceso te espera una tarde entretenida) o bien recuperar un backup de los ficheros .pgo donde se almacena la configuración de licencias Document CALs. En concreto, tendrás que recuperar estos ficheros .pgo de los directorios QlikViewServer y Documents :

  • C:\ProgramData\QlikTech\QlikViewServer\BorrowedCalData.pgo
  • C:\ProgramData\QlikTech\QlikViewServer\CalData.pgo
  • C:\ProgramData\QlikTech\QlikViewServer\IniData.pgo
  • C:\ProgramData\QlikTech\QlikViewServer\ServerCounters.pgo
  • C:\ProgramData\QlikTech\QlikViewServer\TicketData.pgo
  • C:\ProgramData\QlikTech\Documents\BorrowedCalData.pgo
  • C:\ProgramData\QlikTech\Documents\CalData.pgo
  • C:\ProgramData\QlikTech\Documents\IniData.pgo
  • C:\ProgramData\QlikTech\Documents\ServerCounters.pgo
  • C:\ProgramData\QlikTech\Documents\TicketData.pgo

Para ello, tanto si tienes configurado una tarea programada que haga el backup diario o el departamento de IT te ha proporcionado la copia de seguridad, lo primero es detener todos los servicios de Qlikview.

Copia los cinco ficheros .pgo en cada directorio y arranca de nuevo los servicios. Si todo ha ido bien, verás que has recuperado la configuración de licencias de Qlikview.

Sin Comentarios

Cursos gratis de para empezar en Big Data y Machine Learning

Tras asistir al Big Data Spain 2018 el pasado 14 y 15 de Noviembre en Madrid se me han reactivado las neuronas responsables del autoaprendizaje. En la convención pude ver como el futuro está ahí, el concepto de Business Intelligence ha evolucionado a Data Science. Ya no solo basta con construir y mantener modelos de datos, y generar reporting para los usuarios de negocio (otro día hablaré de la 4ª generación de los datos de la que tanto se habla ahora y mantra del Data Revolution Tour organizado por Qlik este año). En nuestro departamento estamos preocupados por dar ese paso del BI tradicional al nuevo ecosistema de conceptos sexys que toda empresa inmersa en su transformación digital desea abanderar: machine learning, chatbots, cloud computing, data visualization, IA… pero vayamos por pasos. En primer lugar, ¿por dónde empezamos? Las distintas tecnologías que conforman la arquitectura de un entorno Big Data no podemos contarlas con los dedos de la mano… Spark, Hadoop, Apache Hive, MapReduce… por otro lado tenemos el Machine Learning y análisis predictivo donde entran en juego otras como Python, R…

He decidido compartimentar toda esta nueva marabunta de tecnología en varias fases para no atragantarme. Si queréis comenzar a bucear sin invertir mucho dinero, podéis echar un ojo a cursos online gratuitos de Big Data como el introductorio de la UOC : Fundamentos  y usos de Big Data y si queréis ir un poco más allá, la Universidad Rey Juan Carlos I acaba de cerrar la 5ª convocatoria del curso online Técnicas de Análisis de Datos y Big Data (5ª edición).

Por otro lado, como lo que realmente me gusta es picar código, he empezado un curso de Python 3 en Codeacademy. Aunque esta plataforma ofrece muchos cursos gratis (de hecho, tienen uno de Python 2), este en concreto sólo está disponible en la versión PRO desde 19,99$ mensuales. La idea es en un futuro continuar con Data Science Path del catálogo de Codeacademy donde se profundiza en Python y su uso en machine learning.

2 Comentarios

Cargar variables desde excel en Qlikview

Si trabajáis con documentos de Qlikview con decenas de variables llegaréis a la conclusión de que la forma más óptima de su mantenimiento es utilizar un excel (por cierto, aprovecho para reivindicar a Qliktech que den una vuelta al diseño del panel de variables, bastante arcaico para la gestión…). La forma de cargar variables desde un excel a Qlikview es muy sencilla, sólo necesitamos dos cosas:

  • Fichero excel con una tabla en la que indiquemos nombre de la variable y valor
  • Modificar el script de carga del documento Qlikview

 

Excel con variables Qlikview

Como ejemplo práctico, imaginad que necesitáis utilizar la misma paleta de colores en todos los documentos Qlikview de la compañía. Lo más ágil es almacenarlos en variables, y un paso más allá, mantenerlo desde un fichero excel de forma que si en un futuro decidimos cambiar algún color, tendremos centralizado el cambio. La hoja excel deberá tener una tabla con al menos dos columnas, una para el nombre y otra para el valor o expresión (podemos añadir cuantas columnas querramos para complementar, luego no las cargaremos). En nuestro caso práctico, la columna A será el nombre de cada variable y la B la expresión que define los colores (utilizamos la función RGB de Qlikview). La columna C la usamos internamente, no se carga.

Cargar variables desde excel en Qlikview

 

Carga en script

El segundo paso será cargar las variables automáticamente en el script de Qlikview. Como la idea es dejar el mantenimiento de las variables únicamente en el excel, prepararemos un algoritmo que recorra todas las filas con contenido, así si en un futuro añadimos un nuevo color, no tendremos que modificar el script en n documentos.

Con un simple loop de tipo for recorremos las filas con contenido de nuestro excel y almacenamos el contenido de la columna B “Expression” en una variable con el nombre indicado en la columna a “Variable”. Os marco en rojo los parámetros que debéis modificar para personalizar el script en vuestro sistema.

 

/******* LIBRO DE ESTILOS COLORES *******/
Variables:
LOAD Variable,
Expression
FROM
[MiServidor\Libro Estilos\LIBRO_ESTILOS_QV.xlsx]
(ooxml, embedded labels, table is Hoja1);
Let vNumberOfRows = NoOfRows(‘Variables‘);
For vI = 0 to (vNumberOfRows – 1)
Let vVariable_Name = Peek(‘Variable’,vI,’Expression‘);
Let [$(vVariable_Name)] = Peek(‘Expression’,vI,’Expression‘);
Next
/*****************************************/

Tras recargar el documento, vemos que las variables se han grabado correctamente:

Cargar variables desde excel en Qlikview

Sin Comentarios

Jefe o líder: la batalla interminable entre poder y liderazgo

Sin Comentarios

Optimización módulos Qlikview

Días atrás comentamos cómo optimizar un servidor de Qlikview para mejorar el rendimiento y consumo de memoria RAM. En esta ocasión, os mostramos recomendaciones para un correcto desarrollo del script y diseño de interfaces de usuario.

Optimización qlikview

Buenas prácticas en desarrollo de módulos en Qlikview

  • Eliminar claves sintéticas del modelo de datos
  • Eliminar loops del modelo de datos
  • Utilizar QVDs cuando sea posible y con el parámetro OPTIMIZED
  • Utilizar campos numéricos para cruzar tablas
    Mediante tablas maestras o lookup en el modelo
  • “Autonumber” para reemplazar claves concatenadas (claves combinando campos para romper tablas sintéticas).
    Esta función genera una clave numérica única por cada valor diferente de un campo. En el caso de claves concatenadas, asigna a cada par un número determinado. Se utiliza pasando como parámetro los campos concatenados, por ejemplo: autonumeric(COD_CAMPO_1 + COD_CAMPO_2)
  • Eliminar la hora de los campos de fecha
    Formateando desde el script estos campos como DATE en lugar de DATETIME. Desde SQL con la sentencia CAST(XXXX as DATE) y en Qlikview DATE(XXX) o FLOOR(XXX). Si es necesaria la hora, se puede mostrar en otro campo.
  • Eliminar campos y tablas lookup no utilizados del modelo de datos
  • Usar flags numéricos cuando sea posible
    Primar el uso de booleanos (1 o 0) en lugar de “S”/”N” o “SI”/”NO”
  • Evitar usar SELECT * en queries
    En su lugar, recuperar sólo los campos de BD que vayamos a leer en el script.
  • Utilizar variables para expresiones recurrentes
  • Reducir expresiones con “count distinct”
    Una alternativa es reemplazarla por un SUM() de un flag configurado a nivel de script.
  • Reducir uso de IF anidados
    Los IF anidados suponen un uso intensivo de memoria y CPU. Intentar trasladar esta lógica a nivel de script o reducir las evaluaciones.
  • Evitar IF en expresiones de Gráficos o tablas
    Es importante evitar utilizar los IF en los títulos de tablas, CONDITIONS para mostrar un objeto y textbox.
  • Reducir comparativa entre campos de tipo texto
    Utilizando siempre que sea posible tablas lookup o bien fabricar una clave numérica con la función autonumeric.
  • Eliminar o reducir uso de MACROS
  • Reducir uso de Show Frequency (Presentation)
    Se utiliza normalmente en los MultiBox y ListBox.
  • Reducir el número de objetos de cada hoja
    Eliminar objetos redundantes u ocultos. Administrar correctamente el uso de charts, textbox, etc.
  • Minimizar uso de Set Analysis en tablas grandes
  • Reducir uso de tablas pivotantes en aplicaciones grandes
  • Evitar funciones al vuelo como “inmonth”, etc
  • Utilizar cargas de datos binarias de periodos históricos o datos no sensibles a cambio
  • Reducir número de CHART abiertos en cada hoja
    En su lugar, mostrarlos minimizados si es posible.
  • Calculate Condition para limitar datos en tablas y charts
  • Utilizar variables o set analysys en lugar de cálculos complejos en las expresiones

 

Recomendaciones: expresiones

Count ( Distinct ‘FieldName’)

Reemplazar el count() por un sum() y el cualificador “distinct” por el valor número 1 para cada ocurrencia distinta del campo.

Load
Alfa,
if (peek(‘Alfa’)=Alfa,0,1) as Flag1,
Num
resident table_1
order by Alfa Asc;

En este caso, la función PEEK compara cada valor del campo “Alfa” con el valor leído anteriormente. Si los valores son iguales, se asigna un 0, si son diferentes, se asigna un 1. El número de valores distintos será sum(Flag1). Es importante que la tabla esté ordenada por el campo Alfa.

Otra alternativa es una query sencilla con los distintos valores:

Load
Distinct Alfa,
Alfa as AlfaDist
resident table_1;

 

If ( Condition(Text),…..)

Mapear los campos de tipo texto a números. Por ejemplo, utilizando la función Autonumber. La expresión de esta forma sería: If (Alfa= ‘ABC’, ‘ABC’, left (Alfa, 2)).

Load
*,
Alfa = ‘ABC’, 1, 0) as Flag
resident table_1 ;

La expresión cambiaría a  If ( Flag = 1,’ABC’, left (Alfa, 2))

 

Sum ( If (Condition, ‘FieldName’…))

En este caso la agregación se hace en tiempo de ejecución y repercute en el consumo de memoria. Si es posible, es preferible hacer el cálculo a nivel de SCRIPT.

 

If ( Condition1, Sum(‘FieldName’),

La lógica de IF anidados es conceptualmente sencilla, pero normalmente es complicado administrarla. Una gran cantidad de IF anidados supone un uso intensivo de CPU y memoria. Es recomendable revisar los IF anidados para intentar reducir el número de anidaciones. Otra opción es cuando sea posible, sustituir los IF por variables, por ejemplo Quantity*Price donde Price es una variable.

 

Sort text

QV automáticamente evalúa si un campo debe tratarse como número, texto o “general”. Los campos evaluados como texto se ordenan como text, que es la forma más lenta. Esto puede reemplazarse manualmente desde el script.

 

Dynamic captions and text objects

Se pueden utilizar expresiones en prácticamente cualquier objeto que permita introducir texto. Una expresión se evalúa en función de su entorno, por ejemplo, si están definidas en un gráficos o tablas (pivotantes o straight) sólo se calculan cuando estos objetos están activos (no cuando están minimizados). Por otro lado, si tenemos expresiones en el título de un objeto, en el show o calculation condition se evalúan cada vez que se hace una selección.

 

Macro triggers ( “on change” )

Cuidado con lanzar macros en cascada o de forma recursiva generando bucles.

 

Checklist de optimización módulos Qlikview

En uno pdf de documentación oficial de Qlikview se distribuye una hoja excel muy útil para el equipo de desarrollo a modo de checklist de los elementos que hay que revisar para garantizar una buena optimización de un módulo. Podéis descargar la versión traducida al castellano desde aquí.

Checklist optimización módulo qlikview

 

Sin Comentarios