Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 54

Manual Técnico

eTAB
Esta página se ha dejado vacía a propósito
Índice de contenidos
Capítulo 1 Tecnologías utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Capítulo 2 Instalación del eTAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1 Requerimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Instalación de Symfony2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Configuración. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Configuración de Postgres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Instalación de RabbitMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Instalación de Servidor de Análisis Pentaho. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7 Instalación de librería wkhtmltopdf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.8 OPCIONAL: Validación de Usarios desde directorios LDAP . . . . . . . . . . . . . . . . . . . . 25
Capítulo 3 Modelo De Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Capítulo 4 Gestión de Cubos OLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Esta página se ha dejado vacía a propósito
Introducción
El presente manual técnico describe cada uno de los componentes del sistema eTAB y los
pasos necesarios para instalarlo.

El sistema de información eTAB es parte de la iniciativa Salud Mesoamérica 2015


(SM2015). Esta es una iniciativa cuyo fin es reducir las inequidades en salud que están
afectando al 20 por ciento mas pobre de la población en Centro America y Mexico. Esta
iniciativa también tiene como objetivo apoyar los esfuerzos de los gobiernos de la región
para alcanzar los Objetivos del Milenio.

Salud Mesoamérica 2015, pone especial atención a la áreas de salud reproductiva, nutri-
ción maternal y neonatal maternal inmunización, y la prevención y control del dengue
y la malaria. Para este fin Salud Mesoamérica 2015trabajara en conjunto con los ministe-
rios de salud de la región y el Sistema de Salud Publica Mesoamericano. Este proyecto es
parte de la plataforma de integración regional conocido como Proyecto Mesoamerica.

Los resultados esperados de incluyen una reducción significante en las tasa de mortali-
dad infantil para niños de menos de cinco años. Esta iniciativa también esta busca redu-
cir la malnutrición crónica en la niñez y las mujeres embarazadas. Estos cambios son crí-
ticos para mejorar las estadísticas sobre partos y para ofrecer mejores condiciones para el
crecimiento del recién nacido. A su vez esta iniciativa busca tener un efecto directo en co-
munidades pobres sobre la cobertura y calidad de vacunas, control pre y post natal y acce-
so a planificación familiar entre otros servicios.

Salud Mesoamérica 2015 espera generar conocimiento de relevancia global sobre como
aumentar asistencia en salud de bajo costo en comunidades pobres. Para este fin el siste-
ma de información eTAB permite analizar y dar seguimiento a los indicadores en salud
con los que trabaja este proyecto.
Esta página se ha dejado vacía a propósito

6
Capítulo 1
Tecnologías utilizadas
El Tablero eTAB es un servicio Web disponible para que dependencias del sistema de sa-
lud suban sus datos para poder analizarlos, generar gráficas y reportes.

La aplicación cuenta con un módulo para efectuar la extracción,transformación y carga


de datos (ETL) desde diferentes fuentes. Estos datos son agregados y almacenados en una
base de datos relacional (OLTP). Los datos están organizados por catálogos de referencia
e Indicadores medibles. Los usuarios del sistema pueden administrar estos indicadores y
catálogos y todos sus tributos usando el las herramientas que brinda el sistema. Para efec-
tuar consultas en línea los datos son agregados dentro de tablas optimizadas para el análi-
sis en linea (OLAP). Las tablas para análisis son actualizadas periódicamente usando pro-
cedimientos almacenados de PostgresSQL.
La gestión de consultas a las tablas de análisis OLAP se realiza por medio de un servidor
dedicado. La interacción entre el servidor OLAP y el resto de la aplicación se realiza por
medio de consultas AJAX. El resultado de las consultas al servidor OLAP, es porcesado
usando JQuery y graficado usando la libreria de gráficos D3.

Todo el software utilizado para creación del SIIG/eTAB son paquetes de software libre.
Estos incluyen:

• GitHub: Gestor de control de versiones de código fuente


• Apache: Servidor de paginas web
• PostgreSQL: Gestor de bases de Datos
• Symfony: Entorno de desarrollo para PHP
• PHP: Lenguaje de desarrollo de la Aplicación eTAB
• Java/OpenJDK: Lenguaje de desarrollo del servidor OLAP

7
Capítulo 1 Tecnologías utilizadas Manual Técnico

• Pentaho: Servidor OLAP desarrollado en Java


• Saiku: Interfaz de analisys para consultas a servidor Pentaho
• D3.js: Librería para la generación de gráficos
• JQuery: Lenguaje para interfaces de usuario
• RabbitMQ: Servidor de Mensajería
• EasyBook: Generador de documentos en formato PDF
• Bootstrap: Framework para interfaces de usuario
• PivotTable.js: Librería para crear tabla pivote
• Redis: Motor de base de datos en memoria.

1.0.1 Gestor de base de datos


[PostgreSQL] (http://www.postgresql.org/)

Versión 9.1 Actualmente el sistema únicamente puede utilizar PostgreSQL por la si-
guiente razón: La aplicación debe proveer la capacidad de analizar datos para cualquier
indicador. Cada indicador esta construido con varios datos y relacionados por una for-
mula almacenada en el sistema.
Es posible crear una tabla por cada grupo de datos, con la limitante de que es necesario co-
nocer el dato antes de guardarlo, lo cual no es sostenible a futuro.

La base de datos necesita guardar datos sin conocer de antemano sus características.
Esto se logra usando un esquema de datos generico EAV (entidad-atributo-valor). El ma-
nejo de esquemas EAV es implementado de diferentes formas para diferentes gestores de
bases de datos,el Tablero eTAB usa la implementación de Postgres la cual crea un tipo es-
pecial de dato llamado HSTORE.

1.0.2 Servidor Web


[Apache2] (http://www.apache.org)

Apache es un servidor Web de código abierto, se ha realizado sobre Apache versión 2.2

1.0.3 Framework de desarrollo/Servidor


[PHP] (http://www.php.net)

[Symfony] (http://symfony.com/)

[GitHub] (https://github.com/)

8
Manual Técnico Capítulo 1 Tecnologías utilizadas

El lenguaje que se ha utilizado es PHP 5.3.18 dentro de una estructura de desarrollo MVC
manejada Symfony versión 2.4 Cada mimbro del equipo de desarrollo usa un aplicativo
diferente para escribir/modificar el código fuente. Los mas populares popular es Net-
beans(version libre para PHP) y Nano. Para manejar cambios y mejoras al código fuente
se uso Github. La totalidad del código fuente esta disponible en https://github.com/
erodriguez-minsal/SIIG

1.0.4 Framework JavaScript


jQuery (http://jquery.com/) versión 1.8.3 junto a jQuery UI (http://jqueryui.com/)

1.0.5 Framework para interfaces de usuario


Bootstrap (http://twitter.github.com/bootstrap/)

Bootstrap es un framework que hace HTML, CSS y Javascript simple y flexible para com-
ponentes e interacciones de interfaz de usuarios populares.

1.0.6 Librería para gráficos


D3 (http://d3js.org/)

Antes conocida como Protovis, D3 es una biblioteca de JavaScript para manipular docu-
mentos basados en datos. D3 ayuda dar vida a los datos usando HTML, SVG y CSS. D3 en-
fatiza los estándares Web ofreciendo todas las capacidades de los navegadores modernos
sin ligarse a una estructura propietaria. A diferencia de otras librerías, D3 no crea imá-
genes, sino que interactúa la pagina para crear los gráficos usando elementos de HTML5
como Canvas y SVG.

1.0.7 Mensajería
RabbitMQ (http://www.rabbitmq.com/)

La carga de datos se apoya de las librerías de este paquete para crear una ‘lista de espera’
para evitar que el servidor se sature al recibir demasiadas peticiones simultaneas.

1.0.8 Servidor de Cubos OLAP


Pentaho (http://community.pentaho.com/)

La version 'comunidad' del servidor de cubos OLAP Pentaho es un proyecto de código


abierto desarrollado usando Java 6, se uso la ultima version disponible 4.8, el paquete in-
cluye el servidor de aplicaciones Tomcat.

1.0.9 Interfaz de Analisis de cubos


Saiku (http://community.pentaho.com/)

9
Capítulo 1 Tecnologías utilizadas Manual Técnico

Saiku es una aplicacion de JAVA que oferece una interfaz escrita en JQuery para analizar
cubos OLAP. En este proyecto se uso la version 'plugin' para Pentaho, version 2.4.

1.0.10 Documentación
La mayoría de la documentación ha sido escrita en formato markdown y se ha utilizado
easybook (http://easybook-project.org/) para la gen

1.0.11 Tabla pivote


Se utiliza la librería PivotTable.js, la cual permite crear tablas pivotes a través de una in-
terfaz sencilla similar a la de las hojas de cálculo, su código y documentación puede con-
sultarse desde la página de su creador [PivotTable.js] (http://nicolas.kruchten.com/pivot-
table/examples/)

1.0.12 Redis
Redis (http://redis.io/) es un motor de base de datos en memoria, basado en el almacena-
miento en tablas de hashes (clave/valor) pero que opcionalmente puede ser usada como
una base de datos durable o persistente. Se utilizará como memoria caché de consultas
de Doctrine y también para almacenar informes, los cuales se ejecutarán y realizarán las
consultas normales cuando se carguen por primera vez o cuando se hayan actualizados al-
gunos de sus datos, y se guardará el resultado en Redis; para futuras peticiones a esos in-
formes se tomarán de lo almacenado en Redis lo cual es mucho más rápido.

10
Capítulo 2
Instalación del eTAB
2.1 Requerimientos
• Servidor Web
• Gestor de base de datos
• PHP 5.3.8+
• Java 6

2.2 Instalación de Symfony2

2.2.1 Instalación de los requerimientos desde un servi-


dor Debian
Es muy importante poner atención al indicador "#" significa que el comando debe ser eje-
cutado como usuario root y "$" que debe ser ejecutado como un usuario normal, en ambos
casos desde una consola de comandos.

# apt-get update
# apt-get install php5 php5-pgsql php5-sqlite sqlite php5-xdebug php-apc
php5-cli php5-xsl php5-intl php5-mcrypt apache2 postgresql acl git-core curl
postgresql-contrib php5-ldap php5-mysql php5-sybase php5-json
postgresql-contrib redis-server

11
Capítulo 2 Instalación del eTAB Manual Técnico

2.2.2 Crear usuario y directorio de trabajo


El directorio y usuario a utilizar pueden variar de acuerdo a los que se deseen elegir en ca-
da instalación, como ejemplo se usará un usuario llamado siig y el directorio de instala-
ción /var/www/siig

# adduser siig
# mkdir /var/www/siig
# chown siig:siig /var/www/siig
# su siig
$ cd /var/www

2.2.3 Obtener el código fuente


Puedes descargarlo desde: https://github.com/SM2015/SIIG/tarball/master o clonar el
repositorio

$ git clone -b v1.0.0 https://github.com/SM2015/SIIG.git siig

A partir de este punto todos los comandos se deben ejecutar dentro de la carpeta en que se
ha descargado el código fuente

2.2.4 Instalar composer


Composer (http://getcomposer.org/) Es una librería de PHP para el manejo de dependen-
cias. Para instalarlo, dentro de la carpeta donde descargaste el código fuente se debe eje-
cutar:

$ curl -s https://getcomposer.org/installer | php

2.2.5 Instalar todas las librerías necesarias


$ php composer.phar install

Al finalizar la instalación, se solicitará los parámetros de conexión a la base de datos, se


deben ingresar los valores correspondientes. Más adelante, en la sección "Configuración
de PosgreSQL" se muestra un ejemplo de cómo crear un usuario de la base de datos para
utilizarlo en el Siig. Ademas en la sección "Configuración de Mondrian" se explica el signi-
ficad de las variables: carpeta_siig_mondrian, conexion_bd_pentaho y listado_metadata.

12
Manual Técnico Capítulo 2 Instalación del eTAB

2.3 Configuración

2.3.1 Servidor web


Esto es para una instalación de prueba en una máquina local, la instalación real en un ser-
vidor el administrador de servicios deberá realizar esta configuración con los parámetros
más adecuados: ip, dominio, configuración en el DNS, etc.

2.3.1.1 Configurar un VirtualHost


Creamos el archivo para la definición del VirtualHost

# nano /etc/apache2/sites-available/siig.localhost.conf

El contenido será similar a esto:

<VirtualHost 127.0.0.7>

ServerName siig.localhost
DocumentRoot /var/www/siig/web

<Directory /var/www/siig/web >


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/siig-error.localhost.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/siig-access.localhost.log combined
</VirtualHost>

En el archivo /etc/hosts agregamos la línea

127.0.0.7 siig.localhost

Habilitamos el VirtualHost

# a2ensite siig.localhost

13
Capítulo 2 Instalación del eTAB Manual Técnico

También es recomendable activar el módulo mod_rewrite

# a2enmod rewrite

Reiniciar apache

# /etc/init.d/apache2 restart

2.3.2 Permisos sobre carpetas


Es necesario tener soporte para ACL (https://help.ubuntu.com/community/FilePermis-
sionsACLs) en la partición en que está el proyecto y luego ejecutar

$ setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs web/


uploads
$ setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs web/
uploads

2.3.3 Verificar la configuración


Entra a la siguiente dirección desde el navegador http://siig.localhost/config.php Si apa-
rece algún error debe ser corregido antes de continuar

2.4 Configuración de Postgres

2.4.1 Editar archivo de configuración


Como usuario root realizar:

1. Editar el archivo /etc/postgresql/9.1/main/pg_hba.conf


2. Cambiar la siguiente línea, sustituir la última palabra por md5

local all all md5

Reiniciar PostgreSQL

# /etc/init.d/postgresql restart

2.4.2 Crear el usuario dueño de la base de datos


Se creará el usuario dueño de la base de datos, las opciones utilizadas dependerán de los
criterios que se quieran seguir, se muestra un ejemplo, ejecutar createuser --help para la ex-
plicación de las opciones. El nombre utilizado y la clave debe corresponder con los pará-
metros especificados al ejecutar php composer.phar install en unas secciones anteriores

14
Manual Técnico Capítulo 2 Instalación del eTAB

# su postgres
$ createuser -d -S -R -P admin;

Al finalizar presionar la combinación Ctrl+D 2 veces para regresar al usuario siig y conti-
nuar con la instalación.

2.4.3 Crear la base de datos


$ app/console doctrine:database:create
$ app/console doctrine:schema:update --force

2.4.4 Cargar datos iniciales


$ app/console doctrine:fixtures:load

2.4.5 Crear un usuario administrador del SIIG


$ app/console fos:user:create --super-admin

2.4.6 Instalación de HStore


HStore (http://www.postgresql.org/docs/9.1/static/hstore.html) es un tipo especial de
campo de PostgreSQL

• Ejecutar dentro de la base de datos, con el usuario postgres

create extension hstore;

• Crear la tabla especial que no se manejará con el ORM, hacerlo con el usuario dueño
de la base de datos
• (no con el usuario postrgres, a menos que este mismo sea el dueño de la base de
datos)

CREATE TABLE fila_origen_dato(


id_origen_dato integer,
datos hstore,
ultima_lectura timestamp,

FOREIGN KEY (id_origen_dato) REFERENCES origen_datos(id) on update CASCADE on


delete CASCADE

);

15
Capítulo 2 Instalación del eTAB Manual Técnico

2.5 Instalación de RabbitMQ


RabbitMQ (http://www.rabbitmq.com/) es un sistema de mensajería empresarial com-
pleto y altamente confiable basado en el estándar AMQP Charla sobre RabbitMQ
(http://www.symfony.es/noticias/2011/07/06/desymfony-2011-reduciendo-el-
acoplamiento-entre-aplicaciones-con-rabbitmq/) . En este proyecto será utilizado para la
carga masiva de datos y así evitar cuelgues o saturación del servidor.

• Agregar el repositorio

# sh -c 'echo "deb http://www.rabbitmq.com/debian/ testing main" >> /etc/


apt/sources.list'

• Agregar la clave pública

# wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
# apt-key add rabbitmq-signing-key-public.asc

• Ejecutar

# apt-get update

• Instalar el paquete

# apt-get install rabbitmq-server

• Verificar que el servicio de rabbitmq esté corriendo

# /etc/init.d/rabbitmq-server start

• Iniciar las colas

$ src/MINSAL/IndicadoresBundle/Util/iniciar_colas.sh

Pueden aparecer mensajes de aviso como "/usr/bin/nohup: redirecting stderr to stdout"


solo debemos presionar ENTER

• Habilitar la interfaz web de administración

# rabbitmq-plugins enable rabbitmq_management


# /etc/init.d/rabbitmq-server restart

• Cargar la interfaz web: entrar a la dirección http://server_name:55672/mgmt/ El


usuario por defecto es guest y la clave guest

16
Manual Técnico Capítulo 2 Instalación del eTAB

• Además es necesario configurar el CRON para que ejecute periodicamente la carga


de datos, con esto se llamará al proceso origen-dato:cargar que verificará para cada
indicador si le corresponde realizar la carga de datos según se haya configurado: dia-
rio, mensual, bimensual, trimestral o anual. Un ejemplo podría ser crear el archivo:
/etc/cron.d/carga-php-siig

#Ejecutar cada dia a las 00:00


0 0 * * * www-data test -x /usr/bin/php && /usr/bin/php /var/
www/siig/app/console origen-dato:cargar

2.6 Instalación de Servidor de Análisis Pentaho


Pentaho es un servidor de análisis (Business Inteligence) modular que ofrece herramien-
tas para la carga de datos(ETL), análisis dimensional (OLAP), minería de datos y reportes
entre otras. A continuación:

1-Instalaremos el modulo base de Pentaho - edición comunidad

2- Configuraremos su servicio de análisis dimensional conocido como Mondrian

3- Instalaremos la aplicación de visualización de cubos OLAP llamada SAIKU.

4- Modificaremos Apache: URL del SIIG apuntando a Pentaho

5- Crear y Publicar Reportes por Indicador

El objetivo es usar el servidor Pentaho+Saiku para analizar los datos del SIIG y a la vez in-
tegrar esta aplicación dentro de la plataforma del SIIG de forma que el usuario no se per-
cate de que esta usando una aplicación externa.

2.6.1 Instalación de Pentaho


Pentaho es una aplicación escrita en JAVA que utiliza persistencia (Hibernate) un servi-
dor de aplicaciones (Tomcat). Pentaho servirá como plataforma ejecutar nuestra aplica-
ción de análisis de datos.

• Instalar Java y soporte de Postgres:

# apt-get install openjdk-6-jre libpg-java

• Descargar la ultima versión del servidor de Pentaho en:

http://community.pentaho.com/projects/bi_platform/

Y luego descomprimir el archivo descargado en la carpeta que elijamos.

17
Capítulo 2 Instalación del eTAB Manual Técnico

El archivo comprimido del servidor de Pentaho (biserver-ce-X.X-estable.tar) contiene


dos carpetas con dos servicios diferentes:

• biserver-ce, la plataforma sobre la cual se instalaran nuevas aplicaciones visibles a


los usuarios, accesible por el puerto 8080
• aministration-console, la interfaz de administración del servidor que permite
manejar cuentas de usuario, roles y conexiones a bases de datos, accesible desde el
puerto 8099.

Cada uno de estos dos servicios tiene su script de inicio correspondiente y credenciales
por defecto. El sistema de seguridad interno de Pentaho (credenciales de usuario y se-
siones) son independientes del SIIG. Para facilitar la integración con el resto del sistema
SIIG, a continuación eliminaremos el sistema de seguridad interno de Pentaho. Estos
cambios afectan ambos servicios: la plataforma de Pentaho y la consola de administra-
ción. Para no comprometer la seguridad del sistema, es recomendable asegurarnos de
Pentaho solamente responda a peticiones del SIIG e ignore cualquier otra conexión usan-
do un corta fuegos externo.

Para eliminar el uso de credenciales basta seguir las instrucciones del manual oficial de
Pentaho:

http://wiki.pentaho.com/display/ServerDoc2x/Removing+Security

Luego de hacer esos cambios estamos listos para iniciar el servidor:

# cd biserver-ce
# ./start-pentaho.sh

En este punto deberíamos poder abrir la aplicación sin usar credenciales usando la direc-
ción del servidor:

http://localhost:8080/pentaho

Nota: Si fuesen necesarias, las credenciales por defecto son usuario: joe,
pwd: password
Los errores del sistema son registrados en:
Log de Pentaho: biserver-ce/tomcat/logs/pentaho.log
Log de Servidor Tomcat: biserver-ce/tomcat/logs/catalina.out

A continuación, conectaremos Pentaho a la base de datos del SIIG usando la consola de


administración. La consola de administración no incluye soporte para Postgres. El pri-
mer paso es copiar el manejador de Postgres:

18
Manual Técnico Capítulo 2 Instalación del eTAB

# cp biserver-ce/tomcat/lib/postgresql-9.1-902.jdbc4.jar
administration-console/jdbc/

Luego arrancamos la consola de administración usando el script dentro de la carpeta


administration-console:

# ./start-pac.sh
En este punto ya podemos conectarnos a http://localhost:8099/
Nota: Si fuese necesario las credenciales por defecto son: usuario: admin,
pwd: password

Una vez dentro de la consola, podemos crear nueva conexión de bases de datos, asegurán-
donos de usar estos valores.

nombre: NOMBRE_CONN
driver: org.postgres.Driver
URL: jdbc:postgresql://localhost:5432/NOMRE_BASE_DE_DATOS

El nombre de la conexion es arbitrario, se puede usar cualquier nombre, no olvide ajustar


el valor correspondiente dentro de app/config/parameters.yml

Asegurese de probar la conexión usando el botón "Test/Probar" al pie de esta misma ven-
tana. Finalmente guarde sus cambios y detenga la conolsa de administracion:

./stop-pac.sh

2.6.2 Configuración de Mondrian


Ahora que Pentaho ya puede conectarse a nuestra base datos, procederemos a configurar
el servicio de Mondrian para la gestión de cubos OLAP. Para esto es necesario:

Crear una nueva carpeta de trabajo de Mondrian, esta carpeta debe estar accesible y tener
permisos de escritura para le usuario de Apache (www-data en Debian). El SIIG generara
automáticamente nuevos cubos y los guardara como archivos XML dentro de esta carpe-
ta.

~# mkdir app/modrian
~# chown –R www-data app/mondrian

El nombre de la carpeta es arbitrario, se puede usar cualquier otro nombre y ajustar le va-
lor correspondiente dentro app/config/parameters.yml

19
Capítulo 2 Instalación del eTAB Manual Técnico

Una vez creada la neuva carpeta, debemos copiar la estructura base para crear nuevos cu-
bos. El codito fuente del SIIG contiene la estructura base para crear nuevos cubos en el ar-
chivo : src/MINSAL/IndicadoresBundle/Resources/public/cubos/BASE_CUBO.txt Este
archivo básicamente lista las dimensiones que estarán disponibles a la hora de crear un
nuevo cubo. Para este archivo lo copiaremos en nuestra nueva carpeta de trabajo de Mon-
drian:

~# cp src/MINSAL/IndicadoresBundle/Resources/public/cubos/BASE_CUBO.txt app/
mondrian/base_cubo.txt

Por ultimo modificaremos la configuración inicial de Mondrian dentro de Pentaho para


que busque nuevos cubos en la carpeta de trabajo que acábanos de crear. Mondrian guarda
un listado de los cubos disponibles en el archivo datasources.xml, con los siguientes co-
mandos crearemos una version de este archivo que apunta a un nuevo archivo dentro de
nuestra carpeta de trabajo.

~# mv pentaho/biserver-ce/pentaho-solutions/system/olap/datasources.xml
pentaho/biserver-ce/pentaho-solutions/system/olap/datasources_original

~# cp pentaho/biserver-ce/pentaho-solutions/system/olap/
datasources_original siig/app/mondrian/datasources.siig

~# ln siig/app/mondrian/datasources.siig pentaho/biserver-ce/
pentaho-solutions/system/olap/datasources.xml

El nombre datasources.siig es arbitrario, se puede usar cualquier otro nombre y ajustar le


valor correspondiente dentro app/config/parameters.yml

Si se desea, los archivos generados que describen cubos puede ser editados usando la apli-
cación Mondrian Schema Workbench disponible aquí:

http://sourceforge.net/projects/mondrian/files/schema%20workbench/

Alternativamente, la aplicación Mondrian Workbench, puede generar el esquema del cu-


bo y luego publicarlo/agregarlo a este listado por nosotros.

2.6.3 Instalar SAIKU


Para poder manipular visualmente los cubos que hemos creado usaremos SAIKU. Esta es
una aplicación que permite hacer consultas al cubo y mostrar resultados usando peticio-
nes REST y AJAX. SIKU procesa la respuesta devuelta por Pentaho en formato JSON para

20
Manual Técnico Capítulo 2 Instalación del eTAB

generar representaciones visuales de los datos. Para saber mas cerca de SAIKU puede vi-
sitar:

http://analytical-labs.com/downloads.php

Para instalar SAIKU debemos primero instalar las librerías de CTOOLS. Estas librerías se
pueden instalar automáticamente usando este Script:

https://github.com/pmalves/ctools-installer

Guardamos este archivo como: biserver-ce/instalar_ctools.sh y le damos permisos de eje-


cución:

#chmod +x instalar_ctools.sh

Y ejecutamos el script :

# ./instalar_ctools.sh –s pentaho-solutions/

El Script preguntara si queremos instalar todas las librerías, incluyendo el paquete SAI-
KU, respondemos que si a todo.

Reiniciar Pentaho:

# ./stop-pentaho.sh
# ./start-pentaho.sh

Saiku permite guardar las busquedas y graficos en una carpeta de trabajo para poder usar-
las posteriormente. A continuacion crearemos la carpeta de trabajo que usará Saiku pa-
ra almacenar busquedas. Esta nueva carpeta debera ser creada dentro de 'pentaho-solu-
tions/', el nombre que elijamos se fijara en el archivo Settings.js.

~# mkdir bi-server/prentaho-solutions/TablasyGraficosSaiku
~# nano src/MINSAL/IndicadoresBundle/Resources/public/cubos/js/saiku/
Settings.js

var Settings = {
VERSION: "Saiku 2.5",
BIPLUGIN: false,
CARPETA_SIIG: "TablasyGraficosSaiku", ....

21
Capítulo 2 Instalación del eTAB Manual Técnico

2.6.4 Modificar Apache: URL del SIIG apuntando a SAI-


KU
Para enmascarar le URL de Pentaho debemos activar el proxy de Apache para esto debe-
mos activar un par de módulos de Apache:

#a2enmod proxy proxy_http

Luego editamos la seccion VirtualHost dentro de /etc/apache2/sites-enabled/


000-default:

<Location /admin/minsal/indicadores/saiku/> ProxyPass


http://MISERVIDOR:8080/pentaho/content/saiku/ ProxyPassReverse
http://MISERVIDOR:8080/pentaho/content/saiku/ SetEnv proxy-chain-auth
</Location>

En este punto ya tenemos SAIKU disponible desde el menu principal del SIIG, en la op-
cion Indicadores->Cubos OLAP.

El servidor OLAP/Mondrian puede ser consultado a traves de SAIKU usando su API


HTTP/REST. Esta API permite obtener informacion sobre los cubos existentes en el ser-
vidor OLAP asi como efectuar consultas, los resultados son deveultos en formato JSON.
La documentacion de la API puede ser consultada en:

http://dev.analytical-labs.com/saiku/serverdocs/

2.6.5 4.5 Generación de Reportes


Los reportes son generados usando el servidor de análisis Pentaho. Cada indicador puede
tener un reporte individual que incluye gráficos, texto y tablas de datos según se requiera.
El sistema SIIG genera de forma automática un reporte inicial para cada indicador, sin
embargo debido a que los requerimientos de análisis y presentación varían entre indica-
dores, estos reportes deben ser revisados y modificados manualmente por el administra-
dor del sistema. Los reportes están disponibles desde el menú del SIIG en administración-
>Indicadores->Ficha Técnica.

El listado de Ficha Técnica incluye un botón Mostrar Reporte que carga el reporte para el
indicador correspondiente usando los datos mas recientes. El proceso que el SIIG utiliza
para generar y mostrar el reporte es el siguiente:

1. Verificar si existe el archivo para generar el reporte correspondiente en ‘[ruta de re-


portes]/indicadorX.cda’.

22
Manual Técnico Capítulo 2 Instalación del eTAB

2. Si no existe el archivo, crear archivo indicadorX.cda en base a los campos y variables


disponibles en el indicador

3. Si existe el archivo, usar JQuery para procesar las búsquedas SQL existentes dentro
del archivo ‘indicadorX.cda’, y procesar los resultados para crear gráficos

4. Combinar los gráficos y mostrar reporte en el navegador, desde donde puede impri-
mirse o ser guardado localmente.

2.6.5.1 Sobre archivos CDA de Pentaho


Pentaho Community Data Access es un mecanismo del servidor de Pentaho que permite
crear búsquedas SQL y servirlas a través de un servicio HTTP/REST en formatos JSON,
HTML y XML.

Los archivos CDA están guardados en formato XML y contienen un conjunto de búsque-
das SQL que estarán disponibles a través del servicio REST durante la creación de repor-
tes. Una vez el SIIG genera el archivo ‘indicadorX.cda’ inicial el administrador del siste-
ma puede modificar, eliminar o agregar las búsquedas SQL contenidas en este archivo pa-
ra modificar/mejorar un reporte.

La generacion de reportes se logra a travez de consultas Web al servidor de Pentaho, para


crear la ruta de estas consultas debemos agregar la siguiente seccion en la configuracion
de Apache:

<Location /reportes/>
ProxyPass http://MISERVIDOR:8080/pentaho/content/cda/
ProxyPassReverse http://MISERVIDOR:8080/pentaho/content/cda/
SetEnv proxy-chain-auth
</Location>

La ubicación de los archivos CDA esta definida dentro de app/aparmeters.yml en la va-


riable carpeta_pentaho_cda. Esta carpeta debe existir dentro biserver/pentaho-solutions
y tener los permisos necesarios para que Symfony pueda crear archivos CDA.

Para asignar permisos :


setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx [capeta_pentaho_cda]

2.6.5.2 Modificar las búsquedas SQL


Para evitar conflictos con las etiquetas XML, el codigo SQL dentro del archivo CDA ha si-
do modificado usando la función PHP htmlspecialchars(). Este requisito aplica para cual-
quier modificación que se haga en el código SQL. Si fuese necesario, antes de modificar
código puede usarse la función PHP htmlspecialchars_decode(). Cada búsqueda contie-

23
Capítulo 2 Instalación del eTAB Manual Técnico

ne un ID numérico único dentro del archivo CDA que se usa en las llamas REST/JQuery.
El titulo de cada búsqueda se usara para el grafico correspondiente dentro del reporte. La
sección titulo además contiene el nombre del tipo de grafico que se usara (barras, líneas o
tabla de datos).

Para graficar correctamente los datos los resultados de la búsqueda SQL deben ajustarse
de la siguiente manera:

Barras: eje_x, valor_a,[valor_b],[valor_c],etc. Donde eje_x es un valor tipo texto/string


que contiene las etiquetas del eje X . [Valor_x] son valores numericos que usaran como se-
ries del grafico, cada serie se etiquetara con el nombre de la columna.

Líneas: fecha, valor_a,[valor_b],[valor_c],etc. Donde fecha es un valor en tipo texto/string


en formato YYYYMMDD que se usara para calcular las etiquetas del eje X. [Valor_x] son
valores numéricos que usaran como series del grafico, cada serie se etiquetara con el nom-
bre de la columna.

Tabla de datos: formato libre.

Existen dos búsquedas especiales con ID no numérico:

ID=anios: Esta búsqueda regresa los años disponibles en el indicador si existen.

ID=resumen: Esta búsqueda calcula valores estadísticos de los datos, los resultados se
muestran en el encabezado del reporte.

2.6.5.3 Modificar la Apariencia de los Reportes


El logo del SIIG es usado en el encabezado del reporte, la imagen de este logo puede
ser modificada en: /src/MINSAL/IndicadoresBundle/Resources/public/images/lo-
go_salud.png

La hoja de estilo del reporte puede ser modificada en: src/MINSAL/IndicadoresBundle/


Resources/public/css/FichaTecnicaAdmin/reporte.css

Finalmente, la estructura del reporte puede ser modificada en: src/MINSAL/Indicado-


resBundle/Resources/views/FichaTecnicaAdmin/reporte.html.twig

2.7 Instalación de librería wkhtmltopdf


wkhtmltopdf (http://wkhtmltopdf.org) Es una utilidad de línea de comando para conver-
tir html a pdf

1. Descargar wkhtmltopdf desde http://wkhtmltopdf.org/downloads.html elegir la


versión adecuada al sistema operativo

24
Manual Técnico Capítulo 2 Instalación del eTAB

2. Descomprimir. Ej.: tar xjf wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz


3. Copiar el archivo (como root): cp wkhtmltox/bin/wkhtmltopdf /usr/bin/
wkhtmltopdf
4. Dar permisos de ejecución (como root): chmod +x /usr/bin/wkhtmltopdf

2.8 OPCIONAL: Validación de Usarios desde directorios


LDAP
Si fuese necesario validar usuarios contra un directorio LDAP, se deben seguir los pasos
descritos en esta sección. Si un usuario aun no esta creado dentro del sistema, se hara una
busqueda en el drictorio LDAP especificado en el archivo app/config/config.yml. A con-
tinuacion se muestran las lineas relvantes para especificar que directorio usar:

#Fr3d_LDAP
fr3d_ldap:
driver:
host: 10.10.20.2 # IP del Servidor LDAP institucional
port: 389 # Opcional
user:
baseDn: ou=people,dc=salud,dc=gob,dc=sv # contenedor de
usuarios
filter: (objectClass=organizationalPerson) # esquema comun para
todos los usuarios del directorio

2.8.1 Cargar la aplicación


En este punto estamos listos para crgar la aplicacion desde: http://siig.localhost/
app_dev.php

25
Esta página se ha dejado vacía a propósito

26
Capítulo 3
Modelo De Datos
3.0.1 Esquema general de la Aplicacion

Figura 3.1 Esquema de la aplicación

Los datos que maneja el sistema provienen de distintas fuentes y son de una naturaleza
tal que es necesario utilizar el modelo de base datos sin esquema/genérico EAV. Las tabla
EAV (Fila_origen_dato) y demás tablas auxiliares son parte del almacenamiento de datos
transaccional (OLTP) de la aplicación. Esto facilita el manejo de datos de cualquier indi-
cador sin importar sus propiedades. Los cubos de análisis multidimensional (OLAP) son
generados usando estos valores genéricos y estan descritos en la seccion de Gesition de
Cubos OLAP. Las tablas de los cubos OLAP usan un esquema de estrella mientras que las
tablas del almacenamiento OLTP usan un modelo relacional. El Siguiente Diccionario de
Datos y Diagrama ER describen la estructura del almacenamiento transaccional (OLTP)
de la Aplicacion.

27
Capítulo 3 Modelo De Datos Manual Técnico

3.0.2 Diagrama Entidad Relacion

Figura 3.2 Diagrama ER1

Figura 3.3 Diagrama ER2

3.0.3 Diccionario de Datos


3.0.3.1 Lista de tablas
• alerta (página 29)
• campo (página 30)
• clasificacion_nivel (página 31)
• clasificacion_privacidad (página 31)
• clasificacion_tecnica (página 31)
• clasificacion_uso (página 32)
• conexion (página 32)

28
Manual Técnico Capítulo 3 Modelo De Datos

• ficha_tecnica (página 33)


• ficha_tecnica_campo (página 35)
• ficha_tecnica_periodicidad (página 35)
• ficha_tecnica_presentacion (página 36)
• ficha_tecnica_variable_dato (página 36)
• fila_origen_dato (página 37)
• fos_user_group (página 37)
• fos_user_user (página 37)
• fos_user_user_group (página 40)
• fuente_dato (página 40)
• fusion_origenes_datos (página 41)
• indicador_alertas (página 41)
• motor_bd (página 42)
• origen_datos (página 42)
• origen_datos_fusiones (página 43)
• periodos (página 44)
• presentacion (página 44)
• responsable_dato (página 44)
• responsable_indicador (página 45)
• significado_campo (página 45)
• tipo_campo (página 46)
• usuario_indicadores_favoritos (página 46)
• variable_dato (página 47)

1. alerta ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

codigo codigo VARCHAR(30) NOT NULL

29
Capítulo 3 Modelo De Datos Manual Técnico

color color VARCHAR(50) NOT NULL

Esta tabla es usada por:

<

ul>

• indicador_alertas (página 41) hace referencia la campo (id)

2. campo ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

id_origen_datos (FK id_origen_datos BIGINT NOT NULL


(página 42))

id_tipo_campo (FK id_tipo_campo INTEGER NOT NULL


(página 46))

id_significado_campo id_significado_campo INTEGER NOT NULL


(FK (página 45))

nombre nombre VARCHAR(100) NOT NULL

descripcion descripcion CLOB

Esta tabla depende de:

• origen_datos (página 42) por medio de (id_origen_datos)


• tipo_campo (página 46) por medio de (id_tipo_campo)
• significado_campo (página 45) por medio de (id_significado_campo)

Esta tabla es usada por:

• ficha_tecnica_campo (página 35) hace referencia la campo (id)

30
Manual Técnico Capítulo 3 Modelo De Datos

3. clasificacion_nivel ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

codigo codigo VARCHAR(15) NOT NULL

descripcion descripcion VARCHAR(50) NOT NULL

comentario comentario CLOB

Esta tabla es usada por:

• ficha_tecnica (página 33) hace referencia la campo (id)

4. clasificacion_privacidad ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

codigo codigo VARCHAR(15) NOT NULL

descripcion descripcion VARCHAR(50) NOT NULL

comentario comentario CLOB

Esta tabla es usada por:

• ficha_tecnica (página 33) hace referencia la campo (id)

5. clasificacion_tecnica ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

31
Capítulo 3 Modelo De Datos Manual Técnico

codigo codigo VARCHAR(15) NOT NULL

descripcion descripcion VARCHAR(50) NOT NULL

comentario comentario CLOB

Esta tabla es usada por:

• ficha_tecnica (página 33) hace referencia la campo (id)

6. clasificacion_uso ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

codigo codigo VARCHAR(15) NOT NULL

descripcion descripcion VARCHAR(50) NOT NULL

comentario comentario CLOB

Esta tabla es usada por:

• ficha_tecnica (página 33) hace referencia la campo (id)

7. conexion ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

id_motor (FK id_motor INTEGER NOT NULL


(página 42))

nombre_conexion nombre_conexion VARCHAR(100) NOT NULL

comentario comentario CLOB

32
Manual Técnico Capítulo 3 Modelo De Datos

ip ip VARCHAR(15) NOT NULL

usuario usuario VARCHAR(25) NOT NULL

clave clave VARCHAR(150) NOT NULL

nombre_base_datos nombre_base_datos VARCHAR(50) NOT NULL

puerto puerto VARCHAR(5)

instancia instancia VARCHAR(50)

Esta tabla depende de:

• motor_bd (página 42) por medio de (id_motor)

Esta tabla es usada por:

• origen_datos (página 42) hace referencia la campo (id)

8. ficha_tecnica ()
Nomre Logico de Columna Nombre Fisico de Columna Tipo PK Nullable

id (PK) id INTEGER PK NOT NULL

id_clasificacion_nivel (FK id_clasificacion_nivel INTEGER NOT NULL


(página 31))

id_clasificacion_privacidad id_clasificacion_privacidad INTEGER NOT NULL


(FK (página 31))

id_clasificacion_tecnica id_clasificacion_tecnica INTEGER NOT NULL


(FK (página 31))

id_clasificacion_uso (FK id_clasificacion_uso INTEGER NOT NULL


(página 32))

33
Capítulo 3 Modelo De Datos Manual Técnico

id_responsable_indicador id_responsable_indicador INTEGER NOT NULL


(FK (página 45))

nombre nombre VARCHAR(150) NOT NULL

tema tema CLOB NOT NULL

concepto concepto CLOB

objetivo objetivo CLOB

uso uso CLOB

definicion_operativa definicion_operativa CLOB

unidad_medida unidad_medida VARCHAR(50) NOT NULL

formula formula VARCHAR(300) NOT NULL

observacion observacion CLOB

campos_indicador campos_indicador CLOB

confiabilidad confiabilidad INTEGER

updated_at updated_at TIMESTAMP

id_periodo (FK (página 44)) id_periodo INTEGER NOT NULL

ultima_lectura ultima_lectura TIMESTAMP

Esta tabla depende de:

• periodos (página 44) por medio de (id_periodo)


• clasificacion_privacidad (página 31) por medio de (id_clasificacion_privacidad)
• clasificacion_tecnica (página 31) por medio de (id_clasificacion_tecnica)
• clasificacion_uso (página 32) por medio de (id_clasificacion_uso)
• clasificacion_nivel (página 31) por medio de (id_clasificacion_nivel)

34
Manual Técnico Capítulo 3 Modelo De Datos

• responsable_indicador (página 45) por medio de (id_responsable_indicador)

Esta tabla es usada por:

• ficha_tecnica_periodicidad (página 35) hace referencia la campo (id)


• ficha_tecnica_campo (página 35) hace referencia la campo (id)
• ficha_tecnica_presentacion (página 36) hace referencia la campo (id)
• indicador_alertas (página 41) hace referencia la campo (id)
• ficha_tecnica_variable_dato (página 36) hace referencia la campo (id)
• usuario_indicadores_favoritos (página 46) hace referencia la campo (id)

9. ficha_tecnica_campo ()
Nomre Logico de Columna Nombre Fisico de Tipo PK Nullable
Columna

id_ficha_tecnica (PK) (FK id_ficha_tecnica INTEGER PK NOT NULL


(página 33))

id_campo (PK) (FK (página id_campo INTEGER PK NOT NULL


30))

Esta tabla depende de:

• campo (página 30) por medio de (id_campo)


• ficha_tecnica (página 33) por medio de (id_ficha_tecnica)

10. ficha_tecnica_periodicidad ()
Nomre Logico de Columna Nombre Fisico de Tipo PK Nullable
Columna

id_ficha_tecnica (PK) (FK id_ficha_tecnica INTEGER PK NOT NULL


(página 33))

id_periodicidad (PK) (FK id_periodicidad INTEGER PK NOT NULL


(página 44))

35
Capítulo 3 Modelo De Datos Manual Técnico

Esta tabla depende de:

• periodos (página 44) por medio de (id_periodicidad)


• ficha_tecnica (página 33) por medio de (id_ficha_tecnica)

11. ficha_tecnica_presentacion ()
Nomre Logico de Columna Nombre Fisico de Tipo PK Nullable
Columna

id_ficha_tecnica (PK) (FK id_ficha_tecnica INTEGER PK NOT NULL


(página 33))

id_presentacion (PK) (FK id_presentacion INTEGER PK NOT NULL


(página 44))

Esta tabla depende de:

• ficha_tecnica (página 33) por medio de (id_ficha_tecnica)


• presentacion (página 44) por medio de (id_presentacion)

12. ficha_tecnica_variable_dato ()
Nomre Logico de Columna Nombre Fisico de Tipo PK Nullable
Columna

id_ficha_tecnica (PK) (FK id_ficha_tecnica INTEGER PK NOT NULL


(página 33))

id_variable_dato (PK) (FK id_variable_dato INTEGER PK NOT NULL


(página 47))

Esta tabla depende de:

• ficha_tecnica (página 33) por medio de (id_ficha_tecnica)


• variable_dato (página 47) por medio de (id_variable_dato)

36
Manual Técnico Capítulo 3 Modelo De Datos

13. fila_origen_dato ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

id_origen_dato (FK id_origen_dato BIGINT NOT NULL


(página 42))

datos datos [1111]

Esta tabla depende de:

• origen_datos (página 42) por medio de (id_origen_dato)

14. fos_user_group ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

name name VARCHAR(255) NOT NULL

roles roles CLOB NOT NULL

(DC2Tipo:array)

Esta tabla es usada por:

• fos_user_user_group (página 40) hace referencia la campo (id)

15. fos_user_user ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

37
Capítulo 3 Modelo De Datos Manual Técnico

username username VARCHAR(255) NOT NULL

username_canonical username_canonical VARCHAR(255) NOT NULL

email email VARCHAR(255) NOT NULL

email_canonical email_canonical VARCHAR(255) NOT NULL

enabled enabled BOOLEAN NOT NULL

salt salt VARCHAR(255) NOT NULL

password password VARCHAR(255) NOT NULL

last_login last_login TIMESTAMP

locked locked BOOLEAN NOT NULL

expired expired BOOLEAN NOT NULL

expires_at expires_at TIMESTAMP

confirmation_token confirmation_token VARCHAR(255)

password_requested_at password_requested_at TIMESTAMP

roles roles CLOB NOT NULL

credentials_expired credentials_expired BOOLEAN NOT NULL

credentials_expire_at credentials_expire_at TIMESTAMP

created_at created_at TIMESTAMP NOT NULL

updated_at updated_at TIMESTAMP NOT NULL

date_of_birth date_of_birth TIMESTAMP

firstname firstname VARCHAR(64)

38
Manual Técnico Capítulo 3 Modelo De Datos

lastname lastname VARCHAR(64)

website website VARCHAR(64)

biography biography VARCHAR(255)

gender gender VARCHAR(1)

locale locale VARCHAR(8)

timezone timezone VARCHAR(64)

phone phone VARCHAR(64)

facebook_uid facebook_uid VARCHAR(255)

facebook_name facebook_name VARCHAR(255)

facebook_data facebook_data CLOB

twitter_uid twitter_uid VARCHAR(255)

twitter_name twitter_name VARCHAR(255)

twitter_data twitter_data CLOB

gplus_uid gplus_uid VARCHAR(255)

gplus_name gplus_name VARCHAR(255)

gplus_data gplus_data CLOB

token token VARCHAR(255)

two_step_code two_step_code VARCHAR(255)

Esta tabla es usada por:

• fos_user_user_group (página 40) hace referencia la campo (id)

39
Capítulo 3 Modelo De Datos Manual Técnico

• usuario_indicadores_favoritos (página 46) hace referencia la campo (id)

16. fos_user_user_group ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

user_id (PK) (FK (página user_id INTEGER PK NOT NULL


37))

group_id (PK) (FK group_id INTEGER PK NOT NULL


(página 37))

Esta tabla depende de:

• fos_user_group (página 37) por medio de (group_id)


• fos_user_user (página 37) por medio de (user_id)

17. fuente_dato ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

establecimiento establecimiento VARCHAR(100) NOT NULL

contacto contacto VARCHAR(100) NOT NULL

correo correo VARCHAR(50) NOT NULL

telefono telefono VARCHAR(15) NOT NULL

cargo cargo VARCHAR(50) NOT NULL

Esta tabla es usada por:

• variable_dato (página 47) hace referencia la campo (id)

40
Manual Técnico Capítulo 3 Modelo De Datos

18. fusion_origenes_datos ()
Nomre Logico de Columna Nombre Fisico de Columna Tipo PK Nullable

id (PK) id INTEGER PK NOT NULL

id_origen_datos (FK id_origen_datos BIGINT NOT NULL


(página 42))

id_origen_datos_fusionado id_origen_datos_fusionado BIGINT NOT NULL


(FK (página 42))

campos campos CLOB

Esta tabla depende de:

• origen_datos (página 42) por medio de (id_origen_datos)


• origen_datos (página 42) por medio de (id_origen_datos_fusionado)

19. indicador_alertas ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

id_color_alerta (FK id_color_alerta INTEGER NOT NULL


(página 29))

id_indicador (FK (página id_indicador INTEGER NOT NULL


33))

limite_inferior limite_inferior DOUBLE NOT NULL

limite_superior limite_superior DOUBLE NOT NULL

comentario comentario CLOB

Esta tabla depende de:

41
Capítulo 3 Modelo De Datos Manual Técnico

• alerta (página 29) por medio de (id_color_alerta)


• ficha_tecnica (página 33) por medio de (id_indicador)

20. motor_bd ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

nombre nombre VARCHAR(50) NOT NULL

codigo codigo VARCHAR(20)

Esta tabla es usada por:

• conexion (página 32) hace referencia la campo (id)

21. origen_datos ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id BIGINT PK NOT NULL

id_conexion (FK id_conexion INTEGER NOT NULL


(página 32))

nombre nombre VARCHAR(100) NOT NULL

descripcion descripcion CLOB

sentencia_sql sentencia_sql CLOB

archivo_nombre archivo_nombre VARCHAR(100)

es_fusionado es_fusionado BOOLEAN

es_catalogo es_catalogo BOOLEAN

42
Manual Técnico Capítulo 3 Modelo De Datos

nombre_catalogo nombre_catalogo VARCHAR(100)

campos_fusionados campos_fusionados CLOB

Esta tabla depende de:

• conexion (página 32) por medio de (id_conexion)

Esta tabla es usada por:

• campo (página 30) hace referencia la campo (id)


• origen_datos_fusiones (página 43) hace referencia la campo (id)
• origen_datos_fusiones (página 43) hace referencia la campo (id)
• variable_dato (página 47) hace referencia la campo (id)
• fila_origen_dato (página 37) hace referencia la campo (id)
• fusion_origenes_datos (página 41) hace referencia la campo (id)
• fusion_origenes_datos (página 41) hace referencia la campo (id)

22. origen_datos_fusiones ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id_origen_dato (PK) (FK id_origen_dato BIGINT PK NOT NULL


(página 42))

id_origen_dato_fusionado id_origen_dato_fusionado BIGINT PK NOT NULL


(PK) (FK (página 42))

Esta tabla depende de:

• origen_datos (página 42) por medio de (id_origen_dato_fusionado)


• origen_datos (página 42) por medio de (id_origen_dato)

43
Capítulo 3 Modelo De Datos Manual Técnico

23. periodos ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

descripcion descripcion VARCHAR(25) NOT NULL

codigo codigo VARCHAR(7) NOT NULL

sentencia sentencia CLOB

Esta tabla es usada por:

• ficha_tecnica_periodicidad (página 35) hace referencia la campo (id)


• ficha_tecnica (página 33) hace referencia la campo (id)

24. presentacion ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

codigo codigo VARCHAR(20) NOT NULL

descripcion descripcion VARCHAR(40) NOT NULL

Esta tabla es usada por:

• ficha_tecnica_presentacion (página 36) hace referencia la campo (id)

25. responsable_dato ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

44
Manual Técnico Capítulo 3 Modelo De Datos

establecimiento establecimiento VARCHAR(100) NOT NULL

contacto contacto VARCHAR(100) NOT NULL

correo correo VARCHAR(50) NOT NULL

telefono telefono VARCHAR(15) NOT NULL

cargo cargo VARCHAR(50) NOT NULL

Esta tabla es usada por:

• variable_dato (página 47) hace referencia la campo (id)

26. responsable_indicador ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

establecimiento establecimiento VARCHAR(100) NOT NULL

contacto contacto VARCHAR(100) NOT NULL

correo correo VARCHAR(50) NOT NULL

telefono telefono VARCHAR(15) NOT NULL

cargo cargo VARCHAR(50) NOT NULL

Esta tabla es usada por:

• ficha_tecnica (página 33) hace referencia la campo (id)

27. significado_campo ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

45
Capítulo 3 Modelo De Datos Manual Técnico

id (PK) id INTEGER PK NOT NULL

descripcion descripcion VARCHAR(200) NOT NULL

codigo codigo VARCHAR(40) NOT NULL

uso_en_catalogo uso_en_catalogo BOOLEAN

catalogo catalogo VARCHAR(255)

nombre_mapa nombre_mapa VARCHAR(200)

Esta tabla es usada por:

• campo (página 30) hace referencia la campo (id)

28. tipo_campo ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

descripcion descripcion VARCHAR(50)

codigo codigo VARCHAR(50) NOT NULL

Esta tabla es usada por:

• campo (página 30) hace referencia la campo (id)

29. usuario_indicadores_favoritos ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id_usuario (PK) (FK id_usuario INTEGER PK NOT NULL


(página 37))

46
Manual Técnico Capítulo 3 Modelo De Datos

id_indicador (PK) (FK id_indicador INTEGER PK NOT NULL


(página 33))

Esta tabla depende de:

<ul>
<li> <a href="#ficha_tecnica">ficha_tecnica</a> por medio de
(id_indicador)</li>
<li> <a href="#fos_user_user">fos_user_user</a> por medio de
(id_usuario)</li>
</ul>

29. variable_dato ()
Nomre Logico de Nombre Fisico de Tipo PK Nullable
Columna Columna

id (PK) id INTEGER PK NOT NULL

id_fuente_dato (FK id_fuente_dato INTEGER NOT NULL


(página 40))

id_responsable_dato id_responsable_dato INTEGER NOT NULL


(FK (página 44))

id_origen_datos (FK id_origen_datos BIGINT NOT NULL


(página 42))

nombre nombre VARCHAR(200) NOT NULL

confiabilidad confiabilidad INTEGER

iniciales iniciales VARCHAR(255) NOT NULL

comentario comentario CLOB

es_poblacion es_poblacion BOOLEAN

Esta tabla depende de:

47
Capítulo 3 Modelo De Datos Manual Técnico

• origen_datos (página 42) por medio de (id_origen_datos)


• fuente_dato (página 40) por medio de (id_fuente_dato)
• responsable_dato (página 44) por medio de (id_responsable_dato)

Esta tabla es usada por:

• ficha_tecnica_variable_dato (página 36) hace referencia la campo (id)

<

h3>

48
Capítulo 4
Gestión de Cubos
OLAP
4.0.1 Introducción
La cantidad de reportes que pueden generarse depende de los catálogos que se usen en ca-
da indicador. Al interior de una estructura para reportes (cubo OLAP), cada catalogo se
convierte en dimensión. Así por ejemplo el catalogo municipio se convierte en una di-
mensión dentro de la estructura de reportes y posibilita hacer búsquedas usando cual-
quier campo que exista dentro de este catálogo. Por ejemplo: Si el catalogo municipio tie-
ne los campos municipio, departamento y región esto nos permitiría hacer las siguientes
consultas: numero de casos por municipio, número de casos por departamento, número
de casos por región.

La ventaja principal de usar un gestor de cubos OLAP es aislar la lógica de las búsquedas
para analizar los datos. De esta forma el sistema se enfoca en presentar al usuario la ma-
yor cantidad de información de forma flexible sin preocuparse de la lógica para obtener
los datos.

4.0.2 Indicadores y Cubos OLAP


El sistema cuenta con un servidor de gestion de cubos OLAP que se conecta directamente
a la base de datos de Indicadores. La definición de cubos esta descrita en el archivo
biserver-ce/pentaho-solutions/system/olap/datasources.xml, los contenidos de este ar-
chivo se muestran a continuacion:

```xml

49
Capítulo 4 Gestión de Cubos OLAP Manual Técnico

Provider=Mondrian;DataSource=Pentaho
Pentaho BI Platform Datasources
http://localhost:8080/pentaho/Xmla?userid=joe&password=password
Provider=mondrian
PentahoXMLA
MDP
Unauthenticated
Provider=mondrian;DataSource=Minsal
solution:/admin/resources/metadata/indicador23.mondrian.xml
Provider=mondrian;DataSource=Minsal
solution:/admin/resources/metadata/indicador24.mondrian.xml
Provider=mondrian;DataSource=Minsal
solution:/admin/resources/metadata/indicador25.mondrian.xml
Provider=mondrian;DataSource=Minsal
solution:/admin/resources/metadata/indicador7.mondrian.xml ``` Como puede verse
en este codigo cada indicador es un catalogo/cubo cuya descripcion esta contenida en
otro archivo XML. Para facilitar la creacion de nuevos cubos a continuacion se muestra
el codigo base de un nuevo indcador, esta plantilla esta disponible en https://github.com/
erodriguez-minsal/SIIG/wiki/PlantillaIndicadorOLAP

```xml

<!--N.3 - Listado de dimensiones disponibles en este indicador. Para cada


dimension el formato a seguir es:
DimensionUsage name=Etiqueta source=DimensionPreDefinida
foreignKey=ColumnaTablaInidcador-->

<DimensionUsage name="Departamento" source="Departamento"


foreignKey="id_departamento"/>

50
Manual Técnico Capítulo 4 Gestión de Cubos OLAP

<DimensionUsage name="Municipio" source="Municipio"


foreignKey="id_municipio"/>
<DimensionUsage name="Region" source="Region" foreignKey="id_region"/>
<DimensionUsage source="Tiempo" name="Tiempo" visible="true"
foreignKey="fecha" highCardinality="false"/>

<!--N.5 - Definicion de la formula unidad de medida-->

````

4.0.3 Crear/Actualizar Catalogo Tiempo


Cada indicador/cubo puede utilizar la dimension tiempo, esta dimension es un tabla/ca-
talogo especial que es creada por el administrador del sistema usando la funcion especial
crear_ctl_tiempo. A continuacion se muestra el codigo de esta funcion:

```postgres CREATE OR REPLACE FUNCTION crear_ctl_tiempo(inicio integer DE-


FAULT 2006, anios integer DEFAULT 8) RETURNS VOID AS $$ DECLARE dias inte-
ger; myquery text; BEGIN dias:=365*$2;

DROP TABLE IF EXISTS ctl_tiempo;

myquery:='CREATE TABLE ctl_tiempo AS SELECT * from (SELECT datum AS fecha,


extract(year FROM datum)::int AS Anio, extract(month FROM datum)::int AS Mes,
to_char(datum, ''TMMonth'')::character(12) AS NombreMes, extract(day FROM da-
tum)::int AS Dia, extract(doy FROM datum)::int AS DiaAnio, to_char(datum, ''TM-
Day'')::character(12) AS NombreDiaSemana, extract(week FROM datum)::int AS Sema-
naCalendario, to_char(datum, ''dd. mm. yyyy'')::character(12) AS FechaCorriente, ''T'' ||
to_char(datum, ''Q'')::int AS Trimestre, to_char(datum, ''yyyy/Q'')::character(6) AS Tri-
mestreAnio, to_char(datum, ''yyyy/mm'')::character(12) AS MesAnio, -- ISO calendar
year and week to_char(datum, ''iyyy/IW'')::character(8) AS SemanaAnioCalendario, --
Weekend CASE WHEN extract(isodow FROM datum) IN (6, 7) THEN ''FinDeSemana''
ELSE ''DiaDeSemana'' END AS FinDeSemana, -- Feriados para El Salvador CASE WHEN
to_char(datum, ''MMDD'') IN (''0801'', ''0802'', ''0803'', ''084'') THEN ''Feriado'' ELSE ''Dia
Laboral'' END AS FeriadoElSalvador, -- Periodos festivos del calendario CASE WHEN
to_char(datum, ''MMDD'') BETWEEN ''0701'' AND ''0831'' THEN ''Vacación de Verano''
WHEN to_char(datum, ''MMDD'') BETWEEN ''1115'' AND ''1225'' THEN ''Temporada
Navideña'' WHEN to_char(datum, ''MMDD'') > ''1223'' OR to_char(datum, ''MMDD'') <=
''1231'' THEN ''Vacación Navideña'' ELSE ''Normal'' END AS Periodo, -- Fecha de inicio
de fin de semana datum + (1 - extract(isodow FROM datum))::integer AS IncioSemana,
datum + (7 - extract(isodow FROM datum))::integer AS FinSemana, -- Fecha de inicio
de fin de Mes datum + (1 - extract(day FROM datum))::integer AS InicioMes, (datum +
(1 - extract(day FROM datum))::integer + ''1 month''::interval)::date - ''1 day''::interval AS
51
Capítulo 4 Gestión de Cubos OLAP Manual Técnico

FinMes FROM ( SELECT '''||$1||'-01-01''::DATE + sequence.day AS datum FROM gene-


rate_series(0,'||dias||') AS sequence(day) GROUP BY sequence.day ) DQ ORDER BY 1) as
foo;'; EXECUTE myquery;

ALTER TABLE ctl_tiempo ADD PRIMARY KEY (fecha);

RAISE NOTICE 'Se creo tabla Tiempo de % anios a partir de %',anios,inicio;

END; $$ LANGUAGE plpgsql; ``` Como se puede ver en el codigo, los intervalos y perio-
dos de tiempo (feriados, etc) que se quieran usar para analizar datos pueden pueden ser
configurados al crear esta funcion. Luego de que se ha agregado esta funcion, procedemos
a crear el catalogo tiempo dentro de la base de datos indicadores:

postgres=# select * from crear_ctl_tiempo(2008,5);

NOTICE: Se creo tabla Tiempo de 5 anios a partir de 2008

52
Lista de figuras
3.1 Esquema de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2 Diagrama ER1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Diagrama ER2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Lista de figuras Manual Técnico

54

También podría gustarte