Está en la página 1de 83

UNIVERSIDAD DE CHILE FACULTAD DE CIENCIAS FSICAS Y MATEMTICAS DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIN

MEJORA DE PROCESOS EN LA GENERACIN DE REPORTES PARA GERENCIA DE CALL CENTER DE EMPRESA DE TELECOMUNICACIONES

MEMORIA PARA OPTAR AL TTULO DE INGENIERO CIVIL EN COMPUTACIN

SEBASTIN ANDRS SNCHEZ SUIL

SANTIAGO DE CHILE MARZO 2011

UNIVERSIDAD DE CHILE FACULTAD DE CIENCIAS FSICAS Y MATEMTICAS DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIN

MEJORA DE PROCESOS EN LA GENERACIN DE REPORTES PARA GERENCIA DE CALL CENTER DE EMPRESA DE TELECOMUNICACIONES

MEMORIA PARA OPTAR AL TTULO DE INGENIERO CIVIL EN COMPUTACIN

SEBASTIN ANDRS SNCHEZ SUIL

PROFESOR GUA: MARA CECILIA BASTARRICA PIEYRO MIEMBROS DE LA COMISIN SERGIO OCHOA DELORENZI HUGO ANDRS MORA RIQUELME

SANTIAGO DE CHILE MARZO 2011

Dedicado a mi hija Francisca.

Resumen Ejecutivo
La Gerencia de Call Center de una compaa de telecomunicaciones est a cargo de la comunicacin con los clientes de la compaa. Para esto contrata los servicios de algunos call centers, y requiere que estos le entreguen informacin de su comportamiento para guiar sus decisiones tcticas y estratgicas. El presente trabajo tiene como principal objetivo mostrar reportes de la informacin obtenida desde fuentes externas, principalmente los call centers. Los reportes deben ser de utilidad a los ejecutivos de la Gerencia, desde el gerente hasta los analistas que utilizan la informacin en el da a da. El principal problema se produce por la existencia de ms de un call center utilizando distintas tecnologas. Esto hace que los reportes lleguen con formatos diferentes. Adems, los servicios que utilizan los call centers para entregar la informacin no son de alta disponibilidad, y es comn que estos fallen. Es responsabilidad de la Gerencia reunir los informes y mostrarlos en un mismo formato. Tambin es necesario cumplir con ciertos reportes exigidos para la certificacin COPC (Customer Operations Performance Center), la cual est siendo obtenida por la compaa. Para solucionar el problema se consider implementar un Data Warehouse que pudiera obtener la informacin desde los call centers mediante procesos de Extraccin, Transformacin y Carga, para luego generar reportes de gestin. Estos procesos debieron realizarse pensando en que la informacin puede no estar disponible en el momento que se realiza la extraccin, o que la informacin extrada sea inconsistente. Se model la base de datos para almacenar la informacin y se desarrollaron los procesos de ETL. Para esto se utiliz Microsoft SQL Server 2000. La decisin de utilizar este software se realiz considerando no aumentar los costos asociados de adquirir un nuevo software de Base de Datos, debido a que este software ya estaba disponible en la empresa. Se desarroll una aplicacin web para mostrar los datos de una forma interactiva, incluyendo grficos. Tambin se desarrollaron algunos mantenedores y una aplicacin que muestra el estado de la carga del Data Warehouse. Con esto se valida en parte la calidad de la informacin que ingresa al Data Warehouse. Esta aplicacin genera alarmas mediante e-mail en caso de encontrar inconsistencias en la informacin o fallas en algn proceso. El desarrollo de las aplicaciones web se realiz sobre una plataforma de Apache y PHP sobre Microsoft Windows, en el mismo servidor donde se encuentra la Base de Datos. Aplicando los principios de desarrollo de los procesos ETL y de los Data Warehouse se logr una mejora sustancial en la manipulacin de los datos, en comparacin con la situacin anterior a la implementacin de este proyecto.

ndice
1 Introduccin .................................................................................................................. 1 1.1 1.1.1 1.1.2 2 Objetivos................................................................................................................. 3 Objetivo General............................................................................................. 3 Objetivos Especficos .................................................................................... 3

Antecedentes.................................................................................................................. 5 2.1 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.3 2.4 2.4.1 2.4.2 2.5 2.6 2.7 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 Call Center.............................................................................................................. 5 Teora de Trfico de Llamadas............................................................................... 7 Erlang.............................................................................................................. 7 Poisson............................................................................................................ 7 Erlang C.......................................................................................................... 8 Calculo de Agentes Necesarios ...................................................................... 8 COPC...................................................................................................................... 9 Data Warehouse.................................................................................................... 11 Data Staging Area......................................................................................... 17 Principios en Procesos ETL.......................................................................... 17 OLAP.................................................................................................................... 19 Data Mining.......................................................................................................... 20 Rendimiento de Bases de Datos ........................................................................... 20 Particionado .................................................................................................. 21 Particionado de Tablas.................................................................................. 21 Particin Nativa vs. Sistema de Archivos .................................................... 22 Indexado ....................................................................................................... 23 Desnormalizacin ......................................................................................... 23 Interpolacin de Datos.................................................................................. 24 Espacio Libre................................................................................................ 24 Ubicacin de Archivos ................................................................................. 24

Especificacin del Problema ...................................................................................... 26

Descripcin de la Solucin ......................................................................................... 28 4.1 4.2 4.3 4.4 4.4.1 4.4.2 4.4.3 4.5 4.5.1 4.5.2 4.5.3 4.5.4 4.6 4.7 4.7.1 4.7.2 Decisiones de Diseo............................................................................................ 28 Dimensiones ......................................................................................................... 29 Tablas de Hecho ................................................................................................... 29 Arquitectura de la Solucin .................................................................................. 31 Extraccin..................................................................................................... 31 Transformacin............................................................................................. 33 Carga............................................................................................................. 36 Clculo de Indicadores ......................................................................................... 36 Intervalos Prime y No Prime ........................................................................ 36 Precisin del Pronstico de Volumen de Llamadas ..................................... 37 Clculo de Agentes Necesarios .................................................................... 37 Precisin de la Programacin de Ejecutivos................................................ 38 Mtricas de Consistencia ...................................................................................... 38 Desarrollo de Software de Apoyo ........................................................................ 39 Estado de Carga ............................................................................................ 39 Colas descartadas.......................................................................................... 41

Acceso a la Informacin ............................................................................................. 44 5.1 5.2 Sistema Web ......................................................................................................... 44 Reportes en Hoja de Clculo (Excel) ................................................................... 46

6 7 8

Validacin de la solucin............................................................................................ 47 Conclusiones................................................................................................................ 49 Anexos.......................................................................................................................... 51 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.1.5 Anexo A................................................................................................................ 51 agrupar_cola ................................................................................................. 51 agrupar_eac................................................................................................... 53 carga_cola..................................................................................................... 56 carga_eac ...................................................................................................... 58 calculo_prime_noprime ................................................................................ 61

8.1.6 8.1.7 8.1.8 8.1.9 8.1.10 8.1.11 8.1.12 9

calculo_precision_pronostico_llamados....................................................... 62 calculo_precision_programacion_eac .......................................................... 65 calculo_agentes_necesarios .......................................................................... 67 agentes_necesarios........................................................................................ 68 erlangC.......................................................................................................... 69 u_m_f............................................................................................................ 69 dwh ............................................................................................................... 70

Bibliografa.................................................................................................................. 75

1 Introduccin
Los clientes son la parte fundamental de una empresa. En particular, una empresa de telecomunicaciones necesita mantener una comunicacin constante y directa con sus consumidores para conocer sus necesidades y satisfacerlas, promoviendo as la fidelizacin del cliente. El rea que se dedica a la comunicacin con los clientes y cuenta con personal capacitado para ello, se denomina Contact Center o centro de contacto. Cuando la comunicacin con los clientes es solamente por va telefnica, esta rea se denomina Call Center. Es comn que las grandes empresas no cuenten con personal interno para la comunicacin con sus clientes, sino que externalizan dichos servicios a empresas especializadas en atencin a clientes. Gracias a la tecnologa, no es necesario que los centros de contacto estn ubicados cerca de la empresa que ofrece sus servicios. Por el contrario, pueden estar ubicadas en cualquier lugar del mundo, y se prefieren reas donde se hable el mismo idioma que la empresa, exista buena educacin y la mano de obra sea barata. An cuando se externalice la mayor parte o la totalidad del rea de Contact Center, es necesario para la empresa de telecomunicaciones contar con un rea interna que gestione los recursos (personal atendiendo en cada momento, ubicacin del personal, etc.). Dicha rea es la Gerencia de Contact Center (en lo sucesivo la gerencia). La empresa en la que se realiza esta memoria posee cerca de 9 millones de clientes en Chile, y recibe mensualmente un trfico que flucta entre 3 y 4 millones de llamadas. Al momento de la ejecucin de esta memoria, la empresa cuenta con los servicios de 7 Call Centers, los cuales estn ubicados en Chile, Per y Colombia. Para realizar gestiones y tomar decisiones estratgicas, los call centers proveen de datos a la gerencia de Contact Center, los cuales contienen informacin de las llamadas y

los tiempos de conversacin, informacin de los ejecutivos de atencin, e informacin relacionada con los clientes. A partir de esta informacin se obtienen indicadores tales como tiempos de atencin, volmenes de llamadas, cantidad de ejecutivos conectados, etc.; varios de los cuales han sido aconsejados por los estndares de COPC1 (Customer Operations Performance Center ). Los datos llegan actualmente al rea de reportes de la gerencia a travs de distintos medios, como puede ser un e-mail, una conexin a bases de datos, un archivo publicado en un sitio web, un servicio web, etc.; con una frecuencia de actualizacin de 15 a 30 minutos. Es frecuente que los sistemas utilizados por los call centers para proveer a la Gerencia de informacin no estn disponibles. Es decir que cuando se quiere recuperar la informacin esta no se encuentra. Tambin es comn que la informacin que proveen los call centers tenga inconsistencias. La existencia de varias fuentes de informacin y el uso de distintas tecnologas en los call centers, produce que los datos que se obtienen sean heterogneos, y dificulta el acceso y anlisis de estos en un mbito global. Es por ello que surge la necesidad de que la informacin est centralizada y homogenizada. Los problemas que se generan cuando los datos son heterogneos son conocidos en el mundo de las Tecnologas de Informacin, y las soluciones generalmente conducen a la creacin de Almacenes de Datos2. Para la creacin de un Almacn de Datos es necesario identificar las fuentes de informacin, definir las etapas de ETL3 (Extract Transform and Load), modelar las bases de datos relacionales, modelar las bases de datos dimensionales y definir las herramientas que se utilizarn para acceder a los datos. Actualmente la Gerencia de Contact Center est en proceso de certificacin COPC, para lo cual debe cumplir ciertos requisitos, como son la puntualidad en la entrega de
1 2

http://www.copc.com/standards.aspx Del ingles data warehouse 3 Del ingles Extract, transform and load

informacin, la integridad de la informacin, y la construccin de pronstico de mtricas basadas en la informacin histrica, entre otras. Lograr mejoras en el rea de reportes de la Gerencia de Call Center se traduce en mejorar el anlisis que se realiza de los datos, para luego tomar mejores decisiones gracias a la disponibilidad de ms y mejor informacin, y as destinar de mejor manera los recursos asociados con la atencin al cliente, mientras se mantiene o aumenta la satisfaccin de este. El presente trabajo pretende ser un aporte en la parte tecnolgica para que los encargados de la Gerencia puedan tomar decisiones en base a informes y reportes de calidad; y a su vez la Gerencia pueda obtener la certificacin COPC. Tomando en cuenta que se pretende implementar soluciones de Almacenes de Datos, cabe destacar que la empresa dispone de licencias de SQL Server 2000, por lo que una de las herramientas de ETL a considerar es Microsoft SQL DTS. Otras opciones corresponden a herramientas OpenSource, las cuales pueden dar solucin a las necesidades de la empresa sin aumentar la inversin y los tiempos requeridos en la obtencin de licencias de software comercial.

1.1 Objetivos

1.1.1 Objetivo General


Automatizar y centralizar los procesos de envo y recepcin de datos entre la gerencia y los call centers, para optimizar la generacin de reportes e indicadores que permitan mejorar la gestin de recursos y la satisfaccin de clientes.

1.1.2 Objetivos Especficos


Los objetivos especficos contemplados son los siguientes:

Automatizar, centralizar y homogenizar la informacin que se transmite entre los call centers y la gerencia. o Utilizando herramientas de ETL, se planea automatizar la obtencin de informacin desde los distintos repositorios. o Creacin de clientes de Web Service para la obtencin de los datos donde exista la posibilidad de conectarse a ellos.

Definir e implementar mtricas de integridad y consistencia de la informacin en el proceso de Extraccin. Implementar alertas que informen al rea cuando los datos son inconsistentes, para realizar acciones correctivas lo antes posibles. Automatizar el clculo de mtricas necesarias para la gestin de los Call Center y para el proceso de certificacin COPC. Mejorar los tiempos de acceso a los reportes e indicadores. Actualmente existe un panel de control Web que muestra indicadores para todos los Procesos Clave Relacionados con el Cliente (PCRCs), el que tarda un promedio de 50 seg. en cargarse. Con lo siguiente se espera disminuir el tiempo de espera: o Modelar una base de datos dimensional sobre una base de datos relacional. o Automatizar el proceso de actualizacin de la base dimensional. o Automatizar el proceso de clculo de indicadores.

Analizar los datos almacenados. Buscar relaciones y clasificaciones entre los datos, utilizando herramientas de data mining, en particular se busca conocer la razn por la que llama el cliente para as optimizar la plataforma que atiende sus solicitudes, aumentando la capacitacin de los ejecutivos o en el mejor de los casos dejar un acceso automtico (ya sea a travs de web, o telefnico) disminuyendo los costos.

2 Antecedentes
A continuacin se presentan las definiciones de conceptos y las tecnologas ms importantes utilizadas en este trabajo de memoria. Se comienza con una descripcin de lo que es un call center, se hace referencia a las normas COPC, para llegar a lo necesario para el almacenamiento de la informacin: los Data Warehouse y las tecnologas asociadas.

2.1 Call Center


Un centro de atencin de llamadas o call center es un rea donde existen ejecutivos entrenados para realizar y recibir llamadas telefnicas desde y hacia los clientes. Se distingue de los contact center en que estos ltimos pueden comunicarse con el cliente a travs de otros medios adems del telfono, como puede ser el chat, e-mail, fax, etc. En la terminologa de los call centers, se les denomina a las llamadas entrantes INBOUND, y a las salientes OUTBOUND. A los Ejecutivos o Agentes que atienden en los call centers se les llama EAC (Ejecutivo de Atencin al Cliente). Las especialidades que es capaz de atender cada ejecutivo se denominan SKILLs. El nmero telefnico del cliente identificado automticamente cuando este realiza una llamada al call center se denomina ANI (Automatic Number Identification). El flujo que recorre la llamada, desde que el cliente marca hasta que el ejecutivo la reciba es el siguiente: La llamada entra a un sistema IVR4, el cual presenta al cliente un men con las opciones de atencin. Cuando el cliente escoge una opcin mediante el teclado numrico del telfono, se realiza una consulta a un sistema que entrega informacin del cliente como el saldo
4

Interactive Voice Response

y el segmento al que pertenece. Con esta informacin el IVR decide hacia donde dirige la llamada utilizando una programacin predefinida. Luego de pasar por el IVR, las llamadas son redirigidas a un sistema ACD5 a travs de un VDN6, el cual es similar a un nmero telefnico virtual. El sistema ACD procesa el requerimiento, y la llamada se encola mientras se busca un grupo de agentes que tenga la habilidad para atender la llamada con ejecutivos disponibles. Si hay un ejecutivo libre que corresponda a la habilidad o SKILL requerida, este atiende la llamada. Si no hay ningn ejecutivo disponible, esta se mantiene en la cola hasta que se desocupe un ejecutivo o el cliente corte. Cada ejecutivo tiene a su disposicin un sistema que le permite registrar los tiempos de produccin mediante botones que indican estados. As por ejemplo, un ejecutivo puede estar en estado disponible, en conversacin, en retencin de un cliente, en el bao, en capacitacin, etc. Existen tres agrupaciones de datos principales que se extraen de los Call Centers: Informacin agrupada por nmero telefnico o ANI: Contiene la informacin del cliente que realiza la llamada, del ejecutivo que atiende y los tiempos de conversacin. Informacin agrupada por VDN, COLA o Skill: Contiene tiempos de conversacin (Llamadas Recibidas, Abandonadas, Recibidas antes de 10 segundos, Recibidas antes de 20 segundos, etc.) en cada Cola o Skill. Informacin agrupada por EAC7. Contiene informacin de los tiempos de conversacin, tiempos no productivos (bao, descanso, etc.) de cada ejecutivo.

5 6

Automatic call distributor Vector directory number 7 Ejecutivo de Atencin al Cliente

2.2 Teora de Trfico de Llamadas


Debido a que el call center acta encolando las llamadas, la teora matemtica que se utiliza en la atencin en call centers es la teora de colas. Frecuentemente se utilizan modelos estadsticos basados en una distribucin de probabilidades de Poisson y las frmulas de Erlang para calcular la cantidad de agentes requeridos y realizar pronsticos de niveles como son el nivel de servicio, TMO8, niveles de abandono, etc.

2.2.1 Erlang
Un Erlang est definido como una unidad adimensional de intensidad de trfico. La clave de esta definicin es que, adimensional implica que no sea necesario especificar un perodo de tiempo. Un Erlang depende del tiempo de observacin. Si una instalacin est en uso todo el tiempo durante 10 minutos, entonces tenemos 1 Erlang. Si el perodo de observacin es una hora, entonces 1 Erlang es igual a 1 hora.

2.2.2 Poisson
La formula de Poisson, que fue desarrollada por el matemtico francs SiemonDenis Poisson, establece que para eventos que no se superponen, que ocurren con una tasa promedio , la probabilidad de que lleguen eventos en un tiempo es igual a:

Donde: = Probabilidad de llegadas = Tasa promedio de llegadas = Tiempo promedio del evento Esta frmula permite el clculo de la probabilidad de tener n llegadas, durante un cierto intervalo.

Tiempo Medio de Operacin

2.2.3 Erlang C
Erlang C corresponde a una formula de espera para infinitas fuentes. Esta aplica en el caso en que quin llama debe esperar en una cola antes de que un servidor est disponible cuando todos los servidores estn ocupados.

Donde:

= Trafico Ofrecido = Nmero de Servidores = Tiempo Promedio de Llamadas = Probabilidad de una espera mayor a = Probabilidad de una espera mayor a = Tiempo

2.2.4 Calculo de Agentes Necesarios


La segunda frmula de la seccin anterior representa tambin el nivel de servicio de una instalacin. Es necesario considerar que para el negocio es importante mantener la menor cantidad de ejecutivos de atencin disponible en todo momento, aunque tampoco es 8

til tenerlos ocupados siempre pues no podran atender ms llamada. En general, el nivel de servicio acordado para una empresa de Call Center se fija entorno al 80%. A partir del nivel de servicio esperado, se puede calcular entonces la cantidad de agentes que sera necesario para atender un flujo determinado de llamadas. Basta con reemplazar los datos en la frmula de nivel de servicio, y encontrar la cantidad de servidores que puedan mantener el nivel de servicio deseado.

2.3 COPC
COPC es un acrnimo de Customer Operations Performance Center, y es una entidad que provee de estndares a los centros de contacto con clientes. Es a su vez un modelo de gestin de Performance aceptado globalmente. Esto, sumado al conjunto de normas correspondientes, conforman un vocabulario de la industria consistente. El modelo de Gestin de Performance COPC y la Familia de Normas COPC se basan en la siguiente terminologa y relaciones:

Ilustracin 1 Esquema de terminologa y relaciones COPC

Las dos normas relevantes para la industria de los call centers son: Norma COPC-2000 VMO: Est dedicada a las Organizaciones de Gestin de Proveedores y establece una serie de requisitos mnimos que un comprador de servicios de Contact Center debe alcanzar a fin de gestionar de manera efectiva las relaciones con sus Proveedores de Servicios Integrales a Clientes (PSICs). Norma COPC-2000 PSIC: Detalla las prcticas de gestin mnimas e indispensables que debe implementar una operacin de servicios al cliente, ya sea interna o externalizada, a travs de cualquiera de los mtodos de contacto existentes en el mercado. Dentro de las normas que propone la certificacin COPC y que interesan en el mbito de tecnologas de informacin, se incluye el enfoque RUICA, para los datos y el proceso de extraccin de estos, el cual se detalla a continuacin. Los datos deben ser Recolectados.

10

Los datos deben ser Usables; en particular, los objetivos deben estar claramente identificados y se deben proveer suficientes datos para percibir una tendencia. Los objetivos se deben establecer respecto de benchmarks de alta performance donde sea posible y adecuado hacerlo. El proceso de recoleccin asegura su Integridad. Todos los datos deben ser: o Significativos: reflejan lo que el requisito realmente intenta medir. o Objetivos: las metodologas utilizadas para recolectar los datos son imparciales. o Precisos: numricamente correctos y no engaosos. o Representativos: reflejan la poblacin subyacente.

El personal apropiado es Conocedor de los datos. Esto incluye el requisito de que el personal apropiado comprenda la validez estadstica de las mtricas que utilizan que estn basadas en muestras. Los datos llevan a tomar Acciones si los resultados caen por debajo de los objetivos. COPC define el concepto de PCRC (Proceso Clave Relacionado con el Cliente)

para enmarcar los productos y servicios que la empresa ofrece a sus clientes. As por ejemplo un cliente de telefona mvil que contrata un plan de minutos, se atiende en el PCRC ATC_CONTRATO (Atencin comercial para clientes Contrato) cada vez que este llama al call center y solicita la atencin mediante ejecutivo. En las normas COPC se detallan algunas mtricas que deben ser obtenidas a partir de los informes de datos que entregan los call centers a la Gerencia, y de datos creados por la misma Gerencia. Dentro de estas mtricas estn las de Cumplimiento y Precisin, tanto para los pronsticos de llamados como de ejecutivos.

2.4 Data Warehouse


Es una tecnologa que facilita el acceso a reportes de informacin histrica. Se caracteriza por contar con la informacin necesaria homogenizada y en un solo lugar, dejando de lado informacin intil para la toma de decisiones.

11

Un Data Warehouse es una coleccin de datos empresariales, orientado a temas, integrados, no voltiles y variante en el tiempo que apoya a la toma de decisiones. [4] Datos Empresariales: negocio de esta. Orientado a Temas: La informacin est organizada en torno a los temas del negocio de la empresa. En el caso de los call centers, los temas seran los agentes, las llamadas, los clientes, etc. Integrado: La informacin en el Data Warehouse se presenta de manera uniforme. Esto permite que los usuarios realicen consultas que involucren varias reas temticas sin la necesidad de transformar la informacin o buscarla en otras fuentes. No Voltil: La informacin no se modifica ni se elimina una vez que ingresa al Data Warehouse. De esta forma, es posible ver reflejado en el Data Warehouse la informacin histrica y el estado reciente de la empresa. Variante en el Tiempo: La informacin en el Data Warehouse expresa los eventos ocurridos en la empresa a lo largo del tiempo agrupados en momentos. Los momentos en el tiempo tienen una granularidad. Mientras el tiempo es anlogo, en el caso de los sistemas informticos se escoge un intervalo discreto de tiempo que representa un momento de la empresa. Este intervalo puede ser expresado en milisegundos, minutos, horas, das, semanas, meses, aos, etc. Los primeros autores en escribir acerca de los Data Warehouse fueron Ralph Kimball y Bill Inmon. Durante los aos 90, ellos definieron y documentaron los conceptos y principios de los Data Warehouse. Kimball[1] cre lo que actualmente se conoce como Modelo de Datos Dimensional para los Data Warehouse, dnde se tienen las tablas de hecho en el centro y las tablas de dimensin alrededor. Mientras Inmon[4] prefiere un modelo en la Tercera Forma Normal debido a la flexibilidad que ofrece este modelo. De todas formas, Inmon establece que para aplicaciones que contienen una gran cantidad de datos y que se enfocan en un modelo de negocio especfico, con requerimientos especficos, Un Data Warehouse mantiene informacin que es

relevante para la empresa. Principalmente es informacin importante para el

12

el modelo ptimo es el de Combinaciones en Estrella. Inmon se refiere a estos Data Warehouse especficos como Data Marts. Considerando que este proyecto se refiere a la informacin y los reportes utilizados por una Gerencia, el Data Warehouse tomar una forma ms apropiada a un Data Mart segn la definicin de Inmon. An en estos das, es difcil diferenciar exactamente las caractersticas de un Data Mart de un Data Warehouse, debido a que existen diversas definiciones de cada uno. De cualquier forma, para este proyecto, se utilizar el Modelo Estrella, con tablas de hecho y tablas de dimensin, creado por Kimball y se tratar indistintamente al Data Warehouse y al Data Mart. La tabla de hechos es la tabla principal en el modelo dimensional. Es aqu donde se almacenan las mtricas e indicadores fundamentales para el negocio de la empresa. Los datos ingresados en una tabla de hecho deben ser del tipo numrico y es deseable que estos se puedan sumar para obtener resmenes de las consultas que retornan varias filas. Las tablas de hecho contienen dos o ms llaves forneas que se conectan a las tablas de dimensin a travs de la clave primaria. Lo normal es que una tabla de hechos no contenga muchas columnas, pero s suelen ser numerosas en filas. Una tabla de dimensin contiene descripciones textuales del negocio. Estn determinadas por una clave primaria de una columna que sirve para integridad referencial con las tablas de hechos que est relacionada. Suelen tener varias columnas, y su tamao en cuanto a filas es mucho menor que el tamao de la tabla de hechos. Las tablas de dimensin son claves en el Data Warehouse debido a que representan las restricciones y las etiquetas de los reportes; hacen que la informacin del Data Warehouse sea utilizable y entendible. La informacin guardada en las tablas de dimensiones debe ser textual y discreta. Los modelos dimensionales que se utilizan para la construccin del Data Warehouse son los siguientes:

13

Modelo Estrella: Es el modelo de datos ms simple de un Data Warehouse. Consiste en pocas tablas de hechos (comnmente una, justificando el nombre) que referencian a varias tablas de dimensin.

Ilustracin 2 Modelo Estrella

Modelo Copo de Nieve: En este modelo, las dimensiones estn compuestas por varias tablas normalizadas. Con esto se evita la redundancia y se ahorra espacio.

14

Ilustracin 3 Modelo Copo de Nieve

Modelo Constelacin: Este modelo contiene mltiples tablas de hecho que referencian a varias tablas de dimensin. Usualmente las tablas de dimensin estn compartidas entre las tablas de hecho.

Ilustracin 4 Modelo Constelacin.

15

Para cargar de informacin al Data Warehouse, es necesario obtener la informacin de las fuentes y procesarlas. Este proceso se denomina Extraccin, Transformacin y Carga (ETL). Extraer: Es la parte donde se obtienen los datos desde los sistemas de origen. En el caso de esta memoria, cada Call center representa una fuente de origen distinta. La informacin obtenida se guarda en una base de datos intermedia llamada Data Staging Area. A medida que se extraen los datos, es necesario verificar que la informacin que se obtiene calza con los patrones esperados. Transformar: En esta etapa se aplican una serie de reglas a la informacin en bruto, por ejemplo: Se seleccionan slo las columnas que son tiles, se traducen los cdigos en valores homogneos, se derivan frmulas calculadas, etc. En esta etapa se realiza una validacin de la informacin. Cargar: Se traspasa la informacin transformada al Data Warehouse.

Ilustracin 5 Elementos Bsicos de un Data Warehouse

16

2.4.1 Data Staging Area


El Data Staging Area o DSA, es lo que est entre las fuentes de informacin y el rea de presentacin de datos. Contiene un rea de almacenamiento de datos y una serie de funciones y herramientas que sirven para los procesos ETL. Los datos extrados por el proceso ETL son almacenados en esta rea para su posterior transformacin y carga en el Data Warehouse. En general no se permite que los clientes interacten con el DSA, pues la informacin contenida no est lista para ser presentada, y se pueden obtener resultados errneos por falta de conocimiento de la estructura.

2.4.2 Principios en Procesos ETL


Fon Silvers propone 6 principios de diseo [5], que ayudan en el desarrollo de los procesos ETL para evitar ciertas anomalas conocidas: Principio 1: Una Cosa a la Vez.

Si bien la multitarea es una caracterstica percibida como positiva en las aplicaciones computacionales debido a que ayuda a reducir el consumo de tiempo y recursos, ayuda muy poco en los procesos ETL. Esto debido a que las aplicaciones multitarea estn construidas sobre la base de que todo funcionar como est planeado y que todos los valores de entradas sern razonables y vlidos. En cambio, una aplicacin ETL debe suponer que nada funcionar como est planeado y que los valores de entrada pueden ser irrazonables e invlidos. Un proceso ETL realice acciones simultneas supone que todo ir bien. En el caso que alguna suposicin sea violada, el proceso completo fallar y ser extremadamente difcil encontrar la causa.

17

Un diseo demasiado granular que realiza una cosa a la vez es ineficiente. Es necesario encontrar un balance entre los costos del diseo granular y el riesgo de que se violen las suposiciones en un proceso simultaneo. Principio 2: Saber Cuando Comenzar

Una tarea debiera mirar el estado de la tarea anterior y la informacin que gener para determinar si debe ejecutarse o no. Por ejemplo, una aplicacin de Extraccin tendr que examinar el sistema fuente operacional antes de extraer la informacin. Una aplicacin de Transformacin deber examinar la informacin generada por la aplicacin de Extraccin que le antecede. Similarmente, el proceso de Carga tendr que examinar la informacin provista por la aplicacin de Transformacin para determinar si se ejecuta o no. Principio 3: Saber Cuando Finalizar

Una aplicacin ETL puede verificar, examinando su propia informacin, si el proceso se ha completado satisfactoriamente. El resultado de la revisin final puede ser capturado como Informacin de Calidad de Datos. Principio 4: Grande a Mediano a Pequeo

Es un principio de diseo que tpicamente se extiende a travs del la aplicacin ETL completa. Este diseo rene todos los elementos y entidades de la informacin que aplica. La informacin que ya no se requiere se descarta y el conjunto final de datos ser cargado en el Data Warehouse. La ventaja de este diseo es que permite mayor control sobre los datos excluidos. Principio 5: Integridad de Datos en las Etapas

Este principio mantiene la integridad de los datos en el conjunto de etapas. Cuando mltiples conjuntos lgicos de datos comparten algunas caractersticas en comn (las que incluyen formato, tipo de datos, significado y uso), pareciera razonable almacenarlas juntas en un nico conjunto de datos. Sin embargo, esto crea un riesgo innecesario en la aplicacin ETL.

18

Principio 6: Conozca lo que tiene

La aplicacin ETL debiera tener un inventario de la informacin de entrada, en lugar de asumir que esta contiene todo lo que se espera. La aplicacin ETL puede comparar el contenido de la informacin de entrada con la informacin esperada. Tambin, en lugar de Conocer lo que se tiene, se puede Conocer lo que no se tiene. De esta forma se obtiene una lista de informacin faltante. Con esta informacin se puede definir un umbral. Si la informacin faltante supera cierto umbral, se tiene la posibilidad de generar alguna respuesta a la contingencia.

2.5 OLAP9
Tener los datos dentro de un Data Warehouse no sirve de nada si no existe una manera de obtener la informacin. La manera de mostrar la informacin que guarda el Data Warehouse es mediante Reportes. OLAP permite realizar algunos anlisis sobre la informacin, pudiendo navegar en esta. OLAP es un acrnimo que referencia a Procesamiento Analtico en Lnea. Es una tecnologa de informacin que utiliza los modelos dimensionales para mostrar indicadores de forma interactiva. Suelen implementarse con bases de datos Multidimensionales (MOLAP) en lugar de Relacionales (ROLAP), o se utiliza una mezcla de ambas tecnologas (HOLAP). La estructura que se forma al utilizar un modelo Dimensional se llama cubo OLAP. Para mejorar el tiempo de las consultas agrupadas, se suelen utilizar algoritmos que mantienen datos precalculados en la base de datos, formando cuboides. Las operaciones que soporta la tecnologa OLAP son las siguientes: Drill-Down : Acceder a informacin ms detallada a partir de un resumen,

enfocndose en una categora.


9

Online Analytical Processing

19

Roll-Up Navegacin Slice Pivot salida

: Proceso inverso a Drill-Down : Secuencia de Drill-Downs y Roll-Ups : Imponer condiciones sobre las dimensiones : Elegir y cambiar la disposicin de los atributos para la tabla de

Drill-Across : Cruzar ms de una tabla de hechos

La tecnologa OLAP est usualmente relacionada con los Data Warehouses, debido a que obtienen los datos a partir de estos.

2.6 Data Mining


La minera de datos se puede definir como el proceso de extraer informacin vlida, autntica y que se obtiene de las bases de datos de gran tamao[16]. La idea es obtener patrones y tendencias y definir un modelo de minera de datos. Existen varios algoritmos que se utilizan para obtener los modelos: Regresin : Predice el valor de una variable numrica Predice el valor de una variable categrica Describe los datos como un conjunto de segmentos o grupos. Describe correlaciones o dependencias entre variables Distribuciones de probabilidad, modelos probabilsticos, etc.

Clasificacin : Segmentacin : Asociaciones : Otros :

Descubre los valores de una variable oculta que no est registrada en los datos

Una vez que se generan los modelos, se debe comprobar la validez, la novedad, la utilidad y la simplicidad de este.

2.7 Rendimiento de Bases de Datos

20

El rendimiento de las bases de datos depende del diseo, los parametros y la construccin fsica de los objetos de la base de datos, especficamente las tablas y los indices, as como los archivos donde se almacena la informacin. Por esto es importante monitorear continuamente la composicin y la estructura de los objetos de la base de datos, y realizar cambios en caso de que esta se vuelva ineficiente. A continuacin se presentan algunas tcnicas para optimizar el rendimiento de las estructuras de las bases de datos, aunque no todas estn siempre disponibles en los Sistemas de Gestin de Bases de Datos.

2.7.1 Particionado
Las tablas son representaciones lgicas de un conjunto de datos que se almacena en la memoria de un computador. Para cada tabla se debe evaluar la forma en que se almacena la informacin, esta puede ser: Una tabla a un archivo: Cada fila de la tabla se almacena en un mismo archivo. A pesar de ser una de las opciones ms usadas, no siempre es la ms eficiente. Una tabla a multiples archivos: Esta opcin se utiliza frecuentemente en tablas muy grandes o tablas que necesitan que los datos esten fsicamente separados a nivel de almacenamiento. Mltiples tablas a solo un archivo: Suele utilizarse para pequeas tablas tales como tablas de consulta y tablas de cdigos. La particin ayuda a conseguir paralelsmo, lo cul puede reducir sustancialmente el tiempo requerido para ejecutar una consulta a la base de datos.

2.7.2 Particionado de Tablas

21

En el caso que partes separadas de una tabla sean accedidas por distintos grupos de usuarios o aplicaciones, es recomendable particionar la tabla en dos o ms tablas desnormalizadas, una por cada grupo distinto de usuarios. De ser necesario, se puede crear una vista que entregue los mismos resultados que la tabla original. Una tabla puede ser particionada de dos maneras: Verticalmente: Separa las columnas de la tabla en una o mas tablas. La clave primaria de la tabla original se coloca en cada una de las nuevas tablas. Una tabla se designa como padre con el propsito de mantener la integridad referencial, a menos que la tabla original siga existiendo, en cuyo caso la tabla original ser la tabla padre en todas las restricciones referenciales. Horizontalmente: En este caso se separan las filas de una tabla en nuevas tablas. Las filas suelen ser clasificadas en grupos a travs de rangos de la llave. Las columnas de las tablas particionadas horizontalmente son las mismas. Si las particiones se encuentran en el mismo lugar fsico, no cambia el rendimiento en las consultas, pero s mejora el rendimiento al efectuar acciones que modifiquen la tabla (insert, delete, update), debido a que los indices que se mantienen son de menor tamao que en la tabla original.

2.7.3 Particin Nativa vs. Sistema de Archivos


En entornos basados en UNIX, se debe escoger entre una particin nativa o utilizar el sistema de archivos de UNIX para almacenar la informacin en la base de datos. Se prefiere utilizar una particin nativa como dispositivo de almacenamiento de la base de datos debido a que en un sistema de archivos las escrituras son almacenadas en memoria cach por el sistema operativo. En este caso, el sistema de gestin de base de datos no sabe si los datos fueron copiados al disco o no. En el caso de una falla, la informacin en la base de datos puede corromperse en el caso de utilizar un sistema de archivos.

22

2.7.4 Indexado
Los indices son la herramienta ms simple para mejorar el rendimiento de una base de datos. Se utilizan frecuentemente para: Localizar filas por el valor de una columna Hacer joins ms eficientes Realizar agregaciones de datos Ordenar datos de una consulta Sin indices, todos los accesos a la informacin tendran que hacerse realizando una bsqueda sobre todas las filas. Estas busquedas son muy ineficientes en tablas de gran tamao. Por otra parte, los indices pueden afectar negativamente el rendimiento cuando la informacin es actualizada y los indices deben cambiar.

2.7.5 Desnormalizacin
Es el proceso inverso a la normalizacin de bases de datos. Una base de datos normalizada minimiza los problemas de integridad y optimiza las actualizaciones, a cambio de aumentar el costo de obtener la informacin. Algunas de las opciones para desnormalizar una base de datos son las siguientes: Tablas prejoined: Cuando se necesita juntar dos o ms tablas, pero el costo de juntarlas es prohibitivo, se hace necesario crear tablas prejoined. Tabla de Reporte: Algunos tipos de reportes requieren un formato especial y manipulacin de datos. Si los reportes de esta naturaleza son crticos o requieren alta visibilidad en un ambiente online, una tabla puede representar el reporte en si. Esta tabla puede ser consultada utilizando SQL estndar. Estas tablas son ideales para mostrar los resultados de multiples joins o outer joins, subconsultas correlacionadas, u otras sentencias complejas SQL. Tabla espejo: Si una aplicacin es muy activa, puede ser necesario dividir el proceso en dos o ms componentes. Cada divisin resultar en una tabla

23

duplicada o espejo. Una copia puede ser utilizada para trfico en produccin, mientras la otra como soporte para la toma de decisiones. Es necesario migrar la informacin periodicamente entre las tablas para mantenter la sincronizacin de la aplicacin. Tablas combinadas: Si existen tablas con relaciones uno-a-uno, es recomendable combinarlas en una sola tabla combinada.

2.7.6 Interpolacin de Datos


Cuando la informacin de dos tablas es frecuentemente reunida, hace sentido interpolar fsicamente la informacin en la misma estructura fsica de almacenamiento.

2.7.7 Espacio Libre


El espacio libre puede ser utilizado para dejar una porcin de un indice o un tablespace vaco y disponible para almacenar los nuevos datos almacenados. Esto permite reducir la frecuencia de reorganizacin e incrementa la eficiencia de insercin.

2.7.8 Ubicacin de Archivos


La ubicacin de los archivos que contienen la informacin de una base de datos puede tener un impacto significativo en el rendimiento. De ser posible, se deben colocar en lugares distintos los ndices de los datos para evitar degradar el rendimiento del disco durante las consultas. Tambin aumenta el rendimiento separar los archivos de tablas que suelen accederse juntas frecuentemente. Para separar los archivos en lugares fsicos distintos, se utilizan las combinaciones de discos en arreglos RAID. RAID es un acrnimo ingls para Arreglo Redundante de Discos Independientes. La combinacin de discos es percibida por el sistema operativo

24

como una sola unidad de almacenamiento. Existen varios niveles de tecnologa RAID, cada una proporciona distintos grados de tolerancia a fallos y rendimiento. La siguiente tabla muestra los beneficios de cada nivel de RAID:
Nivel Descripcin Tolerancia a Fallos No No S S S S S S Rendimiento de Lectura Normal Rpido Normal Normal Normal Normal Rpido Rpido Rendimiento de Escritura Normal Rpido Normal Normal Normal Lento Lento Lento Costo

Sin RAID Nivel 0 Nivel 1 Nivel 2 Nivel 3 Nivel 4 Nivel 5 Nivel 6

Divisin de Disco. La informacin se divide entre los multiples discos Espejado de Disco. La informacin se copia en dos o ms unidades Provee Discos de correccin de errores. Se necesita un sistema de deteccin de errores Divide los datos a nivel de byte. Provee un disco de paridad Divide los datos a nivel de bloques. Provee un disco de paridad Similar al nivel 4, pero la informacin de paridad se distribuye entre los discos Similar al nivel 5, pero provee tolerancia a fallos adicional mediante el uso de un segundo esquema de paridad distribuido Combinacin entre el nivel 1 y 0. La informacin se divide y se espeja. Combinacin entre nivel 5 y 3. La informacin se divide y cada segmento es un RAID Nivel 3 Combina el nivel 0 y 1

Barato Costoso Moderado Moderado Moderado Moderado Costoso Costoso

Nivel 10 Nivel 53 Nivel 0+1

S S S

Rpido Normal Rpido

Normal Normal Rpido

Costoso Costoso Muy Costoso

25

3 Especificacin del Problema

La informacin que se transmite entre los call centers y la gerencia, tiene relacin principalmente con los ejecutivos que estn atendiendo llamadas, las llamadas que se reciben y se atienden durante el da, los tiempos de las llamadas, el tipo de clientes que se atienden, etc. Adems una muestra de las llamadas recibidas por los ejecutivos de call centers se enva a una organizacin que realiza encuestas para conocer si el problema del cliente fue resuelto en los tiempos esperados, la atencin fue de la calidad esperada, y otras preguntas que apuntan a conocer la satisfaccin del cliente. Debido a la gran cantidad de llamadas recibidas y la distribucin de los datos en distintas fuentes, se hace compleja la obtencin de informacin relevante y la generacin de reportes. Es comn que ocurran problemas cuando se intenta obtener la informacin desde las fuentes, pues estas suelen no estar disponibles en algunos intervalos de tiempo. Esto hace compleja la automatizacin de las extracciones. Es necesario que la aplicacin que realiza la obtencin de datos sea robusta para evitar fallas de integridad en la informacin. O en el caso de detectar fallas de integridad, dar alarmas para gestionar una solucin. Tambin es probable que la informacin que entregan los proveedores tenga inconsistencias en los indicadores. Es necesario controlar constantemente la consistencia de la informacin que es almacenada. Tener la informacin ms reciente disponible en todo momento es necesario para que la gerencia pueda orientar las acciones a corto plazo. La informacin consolidada y agrupada es necesaria para orientar las acciones de mediano y largo plazo con el fin de optimizar la atencin del cliente. Tambin la informacin histrica del mes se utiliza con fines de facturacin.

26

Adems de la informacin que proveen los call centers, tambin existe informacin que se genera dentro de la misma compaa. Esta informacin incluye los reportes de IVR, el parque de clientes, y otros reportes que se generan en cada punto del flujo de la llamada. Esta informacin debe ser recopilada y almacenada, pero est fuera del alcance de esta memoria. Dentro de las gestiones a corto plazo que es posible realizar est el identificar a los ejecutivos que realizan malas prcticas de atencin, como cortar la llamada dentro de los primeros 10 segundos, atender demasiado rpido al cliente disminuyendo la calidad de la atencin, etc. Debido a que la Gerencia de Call Center se encuentra en proceso de certificacin COPC, es necesario cumplir con las normas indicadas por COPC. Ciertas normas de la certificacin indican que la Gerencia debe contar con indicadores y mtricas que se generan a partir de los datos entregados por los call centers y datos de fuentes internas. Es necesario generar procesos que calculen las mtricas de manera automtica para lograr la certificacin COPC.

27

4 Descripcin de la Solucin

4.1 Decisiones de Diseo


Debido a la naturaleza del problema de manipular informacin, la solucin natural estuvo relacionada a una base de datos. El objetivo de almacenar la informacin era realizar anlisis y reportes, por lo que el modelo de la base de datos deba responder de manera eficiente a consultas agrupadas. Para esto se dise el modelo estrella que se presenta en la Ilustracin 6. Con este modelo se puede responder de manera eficaz a la mayor parte de las preguntas ms frecuentes realizadas por las personas que integran la Gerencia.

Ilustracin 6 Modelo Estrella de Datos

28

4.2 Dimensiones
La dimensin d_fecha contiene los niveles de tiempo, desde un intervalo de 30 minutos a un ao. Tambin se incluye un campo que contiene la fecha expresada por los dems campos. A esta tabla se le agregaron un ndice agrupado por el ao y otro ndice por la fecha. La dimensin d_ubicacion contiene la informacin de localizacin de la llamada: En que call center se atendi la llamada, el PCRC y la familia (FIJA o MOVIL), la subgerencia encargada del PCRC, el sistema utilizado para atender la llamada y el segmento al que pertenece el cliente. A esta tabla se le agregaron un ndice agrupado sobre el campo Familia y dos ndices sobre los campos PCRC y Call center respectivamente.

4.3 Tablas de Hecho


La tabla f_dimensionamiento contiene el pronstico de llamadas, as como informacin necesaria para la programacin del personal de call center. La tabla f_eac guarda informacin a nivel de ejecutivo: los tiempos productivos e improductivos, el tiempo disponible y las cantidades de llamadas atendidas, transferidas y de salida. La tabla f_cola guarda informacin a nivel de cola: la cantidad de llamadas recibidas por la cola, atendidas y sus umbrales (atendidas antes de 10 seg., de 15 seg., de 20 seg., etc.) La tabla f_ani contiene informacin que se puede obtener a nivel de llamadas individuales: FCR, cantidad de llamadas cortas (menores a 10 seg.), cantidad de clientes nicos atendidos, cantidad de llamadas atendidas, etc.

29

Con esto se establece la base para la construccin de un Data Mart. Lo siguiente fue encontrar la manera de obtener la informacin desde los call centers para luego cargar el Data Mart. Para esto se utiliz la herramienta ETL Microsoft SQL Server 2000 Data Transformation Services (DTS). En una primera etapa se construy un DTS que se conectaba a las fuentes directamente, y almacenaba los datos extrados en una misma tabla. Los datos eran extrados y transformados en un mismo proceso. El inconveniente de esta solucin era que al tardarse ms de un intervalo prudente la conexin a una de las fuentes de origen, se vean afectados los procesos que extraan la informacin de las otras fuentes. Adems, si alguna transformacin quedaba mal, era necesario descargar nuevamente la informacin desde la fuente para corregir el error, lo cual aumentaba los tiempos de desarrollo durante la fase de pruebas. Por estas razones fue necesario separar el proceso de extraccin de la transformacin. Se construyeron DTS de extraccin, uno por cada fuente, los cuales almacenaban los datos extrados manteniendo el mismo formato de origen, ms un campo de fecha de extraccin, necesario por motivos de auditoria. Con esto se cumple el primer y el quinto principio de los procesos ETL: Una cosa a la vez e Integridad de los Datos en las Etapas. Se construy otro DTS para la transformacin de los datos almacenados en tablas locales, el cual limpiaba y homogenizaba la informacin para depositarla en una nueva tabla, para luego cargar los datos en el modelo estrella.

30

4.4 Arquitectura de la Solucin


4.4.1 Extraccin
Las fuentes de origen las proveen los call centers y, en el caso de GENESYS el cual es un sistema comprado por la empresa, un proveedor de servicios informticos. Cada call center define los nombres de los campos de una manera distinta. Por esto, adems de los reportes, se le pide al proveedor que entregue un diccionario con la definicin de los campos. Los call center deben proveer a la Gerencia tres reportes bsicos del trfico de llamadas realizadas en sus instalaciones: ANI, COLA, EAC.

Ilustracin 7 Flujo de Informacin al Data Warehouse

Para cada proveedor se construy un DTS para cada reporte con la siguiente estructura: TR_E_ANI_[NOMBRE PROVEEDOR] TR_E_EAC_[NOMBRE PROVEEDOR] TR_E_COLA_[NOMBRE PROVEEDOR]

31

El DTS extrae la informacin desde el proveedor y la almacena en tablas que tienen la siguiente estructura: TR_ANI_[NOMBRE PROVEEDOR] TR_EAC_[NOMBRE_PROVEEDOR] TR_COLA_[NOMBRE PROVEEDOR]

De esta forma, para el proveedor ILINE, el cual dispone sus reportes a travs de un servicio FTP, se construy un DTS que rescata informacin a nivel de ANI y la deposita en una tabla llamada TR_ANI_ILINE, como se muestra en la Ilustracin 8 DTS de Extraccin de ANIS del call center ILINE.

TR_E_ANI_ILINE

Ilustracin 8 DTS de Extraccin de ANIS del call center ILINE

32

De la misma forma se construyeron los DTS: TR_E_EAC_ILINE TR_E_COLA_ILINE

y las tablas que guardan la informacin de origen: TR_EAC_ILINE TR_COLA_ILINE

Es comn que los proveedores entreguen informacin de ms colas de las que se utilizan en los reportes que se muestran en la Gerencia. Esto debido a que a veces se crean algunas colas, pero estas no son utilizadas, o son utilizadas por otras reas fuera de la Gerencia. Tambin algunos proveedores entregan mayor cantidad de indicadores que los necesarios. En lugar de descartar estos valores en la primera etapa, estos se almacenan tal cual como se extraen. En etapas posteriores (transformacin y carga) estos datos son descartados. Con esto se respeta el cuarto principio de los procesos ETL: Grande a Mediano a Pequeo.

4.4.2 Transformacin
Teniendo la informacin de los proveedores en tablas locales, lo que sigue es dejarla en una tabla nica, con un mismo formato. Para esto se crean las siguientes tablas que consolidan la informacin de los call centers: TR_COLA_CONSOLIDADO TR_EAC_CONSOLIDADO TR_ANI_CONSOLIDADO

33

Se construy un DTS para cada tipo de reporte: TR_TL_COLA_CONSOLIDADO TR_TL_EAC_CONSOLIDADO TR_TL_ANI_CONSOLIDADO Los cuales se encargan de transformar la informacin proveniente de los call centers y dejarlos en las tablas consolidadas.

Ilustracin 9 DTS de Transformacin de datos de cola

En el ltimo paso de cada DTS se llama a un procedimiento almacenado, el cual realiza la ltima transformacin de los datos, que consiste en traducir los VDN, COLAS y Skills a PCRCs, y agregar informacin acerca del tipo de la llamada: la familia a la que 34

pertenece, si es Directa o Transferida, desde donde se transfiri la llamada y a qu sistema de informacin pertenece. Estos procedimientos almacenados se llaman respectivamente: agrupar_cola (@dias int) agrupar_eac (@dias int) agrupar_ani (@dias int) El parmetro dias define la cantidad de das que debe procesar el procedimiento. Para obtener la informacin que traduce los VDN, COLAS y Skills a PCRCs se utilizan las tablas de traduccin PCRCS y COLAS que se muestran en la Ilustracin 10.

Ilustracin 10 Tablas de traduccin

Estas tablas deben ser mantenidas internamente en la gerencia, pues en general, los reportes provistos por los call center no contienen esta informacin. Adems, la creacin de PCRCs, Colas, VDNs y Skills se hace de manera coordinada entre la parte operacional de la Gerencia de Call Center y los call centers.

35

Los procedimientos de transformacin tambin agrupan la informacin segn las dimensiones definidas y precalculan los resultados usando para ello el comando de SQL Server 2000 WITH CUBE. Por ltimo, la informacin se guarda en tablas temporales, lista para ejecutar la carga.

4.4.3 Carga
La carga es el ltimo paso en el proceso de construccin del data warehouse. Para esto se construyeron procedimientos almacenados en Microsoft SQL Server 2000, los cuales se encargan de llenar las tablas del modelo estrella. carga_cola carga_eac carga_ani Estos procedimientos se encargan de insertar nuevos registros en las tablas del modelo estrella, y de actualizar aquellos que ya han sido ingresados.

4.5 Clculo de Indicadores

4.5.1 Intervalos Prime y No Prime


Para realizar los clculos de desviacin y precisin del pronstico de volumen de llamadas, es necesario distinguir entre intervalos prime y no prime. Los intervalos prime son los que contienen el 80% del volumen de las llamadas. El resto se considera no prime. Cada media hora se actualiza el estado de los intervalos Prime o No Prime utilizando el procedimiento almacenado calculo_prime_noprime. 36

4.5.2 Precisin del Pronstico de Volumen de Llamadas


La precisin del Volumen se obtiene cuando la desviacin entre el volumen de llamadas real y el pronosticado es menor a 15% en intervalos Prime y 20% en intervalos No Prime. Para obtener la precisin diaria se cuentan los intervalos que estn en el rango aceptado y se divide por el total de intervalos. La precisin se actualiza cada media hora utilizando el procedimiento almacenado calculo_precision_pronostico_llamados.

4.5.3 Clculo de Agentes Necesarios


Para el clculo de Agentes necesarios se utiliza la frmula de ErlangC, la cual a partir del nmero de llamadas recibidas, la duracin del intervalo, el TMO, los segundos acordados como nivel de servicio, y el nivel de servicio objetivo; obtiene el nmero de ejecutivos necesarios para atender ese flujo de llamadas. La frmula de ErlangC indica la probabilidad que sea necesario esperar para ser atendido, considerando el trfico A en unidades Erlang y la cantidad de ejecutivos conectados N.

Ilustracin 11 Frmula de Erlang C

37

Para obtener el nmero de agentes necesarios se utiliz el Procedimiento Almacenado calculo_agentes_necesarios y las funciones agentes_necesarios, erlangC y u_m_f.

4.5.4 Precisin de la Programacin de Ejecutivos


Similar al caso de la precisin en el pronstico de llamadas, se calcula el cumplimiento de la programacin como el total de intervalos que cumple con una desviacin inferior al 15% de los ejecutivos programados en comparacin con los conectados realmente. Para obtener la mtrica se utiliza el Procedimiento Almacenado

calculo_precision_programacion_eac.

4.6 Mtricas de Consistencia


Se consideraron algunas mtricas para validar la consistencia de los datos: Las llamadas atendidas que entrega el reporte de cola debe ser consistente con las llamadas atendidas que entrega el reporte de agentes. Las llamadas recibidas debe ser igual a las llamadas atendidas ms las llamadas abandonadas. Las llamadas atendidas debe ser igual a las suma de las llamadas atendidas antes de 10 segundos, ms las atendidas antes de 20, 30, 40, 60 y ms segundos. La ocupacin debe estar en un rango lgico entre 50% y 90% La utilizacin debe estar en un rango lgico entre 30% y 95% El TMO por intervalo no puede ser superior a 1800 segundos.

38

4.7 Desarrollo de Software de Apoyo


Para garantizar el buen funcionamiento de los procesos que componen el data Warehouse fue necesario desarrollar algunos componentes web, los cuales muestran el estado de cada proceso, los intervalos que no se cargaron, y los indicadores ms importantes agrupados por PCRCs. Este mismo componente web se ejecuta automticamente cada media hora, y enva alertas por e-mail en caso de presentarse alguna contingencia. Adems fue necesario el desarrollo de mantenedores para las tablas de colas y pcrcs.

4.7.1 Estado de Carga


Se sabe que en relacin a los Data Warehouse, si entra basura, sale basura. Por esto, constantemente se estn monitoreando los indicadores que estn en el DSA para detectar faltas de integridad o inconsistencia. Para esto se desarroll una aplicacin que muestra el estado de carga de los PCRC dentro del da, y una vista que muestra el estado de los procesos de Extraccin de la informacin.

39

Ilustracin 12 Vista del Estado de Cargas en el DSA

En esta vista web se aprecia el desarrollo diario de la carga de datos en el Data Staging Area. Se incluyeron semforos con los colores rojo y verde. El verde muestra que el indicador est dentro de los valores normales. El rojo muestra que el indicador esta fuera de la norma o toma valores no permitidos. En la Ilustracin 12 Vista del Estado de Cargas en el DSAse aprecia que el PCRC Mundo tiene una Utilizacin sobre el 100%, por lo que se marca con rojo su semforo. Para conocer la integridad de los datos en relacin a que la totalidad de intervalos en el da debieran tener datos, se hace el cruce de informacin por cada PCRC y por cada Proveedor con una tabla que contiene todos los intervalos. A partir de esto se obtiene el nmero de intervalos faltantes y se muestra en la aplicacin web. Con esto se aplica el principio 6 de los procesos ETL: Conozca lo que tiene, o en este caso, Conozca lo que no tiene.

40

Ilustracin 13 Vista del Estado de los Procesos de Extraccin

En esta vista se aprecia el estado de los procesos de Extraccin. El nmero contiguo al semforo indica la cantidad de veces que ha fallado un proceso. El proceso puede fallar por falta de informacin por el lado del proveedor o problemas de red. Por esto los procesos de extraccin se ejecutan cada 15 minutos para aumentar las posibilidades de obtener la informacin. Si un proceso falla ms de 6 veces, es sntoma de un problema superior que debe ser analizado. En tal caso se genera una alerta al equipo encargado de la mantencin del Data Warehouse.

4.7.2 Colas descartadas


Como se dijo en la seccin de Extraccin del captulo de Descripcin de la solucin, algunos call centers entregan informacin de ms colas que las que se utilizan para entregar reportes en la gerencia. Existe la posibilidad de que la cola no est siendo utilizada para 41

recibir llamadas, o que esta pertenezca a servicios que estn fuera de la gerencia. Tambin es posible que sea una cola que haya sido creada recientemente, y no haya sido informada al rea de reportes. De cualquier forma, estas se almacenan en una tabla en del DSA. Se desarroll una aplicacin Web que muestra el contenido de esta tabla, y la cantidad de llamadas recibidas por cada cola. Con esto tambin se aplica el principio nmero 6 de los procesos ETL: Conozca lo que tiene.

Ilustracin 14 Reporte de colas que se descartan.

En el caso que se deba incorporar una cola a los reportes, el sistema permite realizar la accin Agregar, el cual lleva a la siguiente pantalla, donde se ingresan los datos referentes a la cola, esto es el origen, el segmento, desde donde proviene la llamada en el caso de ser una transferencia, el sistema utilizado por el call center, el pcrc asociado, la familia asociada, y el call center.

42

Ilustracin 15 Formulario de ingreso de una nueva cola a los reportes

43

5 Acceso a la Informacin
El modelo de datos dimensional se construy sobre una base de datos relacional, por lo que el acceso a la informacin se realiza conectndose a la base de datos Microsoft Sql Server, mediante ODBC o drivers especficos a la plataforma. Para acceder a los datos se desarrollaron procedimientos almacenados que rescatan la informacin desde las tablas que componen el modelo dimensional. Estos procedimientos aceptan como parmetros los filtros que se le desea aplicar a las dimensiones para obtener los datos combinando las tablas de hecho. El principal procedimiento almacenado desarrollado para rescatar la informacin se llama: dwh. El acceso a los datos se realiza principalmente mediante un sistema Web desarrollado en PHP, y Microsoft Excel.

5.1 Sistema Web


El sistema web se desarroll utilizando PHP el cual se conecta a la base de datos ejecutando procedimientos almacenados en sus consultas. La idea del sistema es mostrar resultados mensuales, pudiendo filtrar por Ao, Familia y PCRC. A partir de esta primera pantalla, se pueden hacer sucesivos drill-down, avanzando por la dimensin de tiempo, hasta llegar a la granularidad de intervalos de 30 minutos.

44

Ilustracin 16 Vista principal de la aplicacin

Ilustracin 17 Drill-down en la dimensin de tiempo. Se aprecia el detalle por das.

45

Ilustracin 18 Drill-down en la dimensin de tiempo hasta llegar a la granularidad de intervalos de media hora. Se aprecian los resultados del da seleccionado.

Ilustracin 19 Grafico generado por la aplicacin, donde se aprecian los indicadores agrupados por mes.

5.2 Reportes en Hoja de Clculo (Excel)


En el caso de que sean necesarios reportes distintos a los que muestra el sistema web, estos se construyen en Excel. Utilizando tablas dinmicas se construyen reportes en los cuales es posible realizar las operaciones de drill-down, roll-up, slice y pivot. 46

6 Validacin de la solucin
El objetivo ms importante alcanzado por esta solucin, es tener integridad en los datos almacenados. Mediante la automatizacin de los procesos de extraccin, almacenar la informacin extrada de la misma forma como viene y teniendo alarmas que indican fallas en algn proceso se logra el objetivo de la integridad. Como se dijo anteriormente, esto es importante por varias razones. Es fundamental para obtener una certificacin COPC: significan la R y la I en RUICA. Tambin es muy importante tener integridad para tomar decisiones acertadas en la gestin. Adems, debido a que los pronsticos se basan en informacin del pasado, no es posible realizar buenos pronsticos sin integridad en la informacin histrica. En la actualidad se observa que la disponibilidad de la informacin ha aumentado en gran medida. Esto gracias a la aplicacin de algunos de los principios establecidos para la construccin de procesos ETL. Si antes era comn que el panel de indicadores de la Gerencia se quedara sin datos y fuera necesario realizar un reproceso manual de la informacin constantemente, ahora es rara la oportunidad en que se encuentra falta de informacin en los reportes. En el caso que algn proceso falle, o se detecta alguna falta de integridad en la informacin, se genera una alarma al rea responsable de la mantencin del Data Warehouse para realizar gestiones de reproceso o contactar a los proveedores para que provean la informacin necesaria. El segundo objetivo alcanzado por la solucin es un aumento de la performance en la ejecucin de los reportes. Teniendo los datos almacenados en un lugar centralizado, y con resultados agrupados precalculados, se aumenta considerablemente el rendimiento en las consultas. En trminos cuantitativos, se observa una mejora en comparacin con la misma aplicacin funcionando sobre la anterior base de datos. En promedio se observaba un tiempo de carga de 2 minutos de la aplicacin previa al data warehouse. Actualmente la aplicacin tarda 25 segundos en cargar los datos. An existen datos que la aplicacin obtiene fuera del data warehouse, es por esto que el tiempo de carga puede disminuirse. En

47

el caso de la aplicacin creada para mostrar nicamente la informacin contenida en el data warehouse, esta tarda alrededor de 3 segundos en cargarse.

48

7 Conclusiones
En este trabajo de ttulo se ha buscado la mejor manera de implementar un sistema que permita visualizar indicadores obtenidos a travs de la informacin entregada por varias fuentes distintas. Investigando en la literatura, se encontr que la mejor alternativa para almacenar los datos y luego recuperarlos en forma de reportes, es la creacin de un Data Warehouse. Siguiendo los principios de Fon Silvers para el desarrollo de aplicaciones ETL que aplicaban en la creacin del Data Warehouse para la Gerencia, se logr almacenar los datos de forma ntegra y con tolerancia a ciertos fallos conocidos en el mundo de los Data Warehouse. Se ha logrado establecer un modelo base para el flujo que deben seguir los datos desde que los entrega el call center, hasta que se muestran en un panel de indicadores. En el caso de que se contraten nuevos call centers, aadir la informacin que enven significar agregar algunas tablas y algunos procesos que sean similares a los que ya existen. Si la operacin determina que se deben agregar servicios o PCRCs a un determinado call center, solo bastar con agregar la traduccin de la cola a las tablas correspondientes utilizando un mantenedor desarrollado para ello, y el servicio aparecer dentro de los reportes que se muestran en la aplicacin Web. Si bien en un principio el desarrollo del Data Warehouse fue difcil, pues este no contena suficiente informacin histrica necesaria para algunas decisiones estratgicas, en la actualidad se cuenta con casi un ao de historia de informacin. Tambin los comienzos fueron complejos pues el sistema a veces almacenaba informacin incorrecta, causando la sensacin en los usuarios de descontrol del proyecto. Fue necesaria la colaboracin de los usuarios del Data Warehouse para identificar las inconsistencias y luego corregirlas.

49

Sin duda la parte ms compleja del proyecto fue la creacin de los procesos ETL. Esto debido a que fueron necesarios varios intentos para lograr que el esquema de datos fuera consistente. Una vez que se correga algn problema era necesario volver a procesar la informacin histrica, y esto tomaba bastante tiempo, del orden de varias horas. Fue de mucha utilidad la construccin de un panel de validaciones, el que haca las veces de Test del Sistema para comprobar que este funcionara como era deseado. La implementacin del modelo estrella con datos precalculados result ser bastante eficiente en trminos de reportes. No se hicieron otros test de modelos en donde los datos precalculados se almacenan en cubos distintos. Tampoco se utiliz la herramienta de creacin de cubos OLAP de Sql Server, Analysis Services. No se alcanz a realizar el Data Mining que se tena como objetivo. Esto debido a la falta de tiempo, y a la falta de prioridad dada en la Gerencia con respecto a la concrecin de otros proyectos relacionados con reportes. De cualquier forma, para asegurar que el Data Mining entregue resultados de calidad, se deben incorporar otros indicadores al Data Warehouse provenientes de fuentes distintas a los call centers, por ejemplo los resultados de monitoreo a ejecutivos, resultados de encuestas a clientes, etc., los cuales estaban fuera del alcance de este trabajo de memoria.

50

8 Anexos

8.1 Anexo A
Este anexo muestra los Procedimientos Almacenados y Funciones utilizadas en los procesos ETL y en el clculo de indicadores.

8.1.1 agrupar_cola
CREATE PROCEDURE agrupar_cola (@dia as int)

DECLARE @ano varchar(4), @mes varchar(2), @indicadores varchar(500), @group_columns varchar(500), @d_fecha varchar(300) EXEC('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[TEMP_F_COLA]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1) drop table [dbo].[TEMP_F_COLA] CREATE TABLE [dbo].[TEMP_F_COLA] ( [CALLCENTER] [varchar] (20) NULL , [FAMILIA] [varchar] (10) NULL , [PCRC] [varchar] (100) NULL , [SEGMENTO] [varchar] (100) NULL , [SISTEMA] [int] NULL , [ANO] [int] NULL , [MES] [int] NULL , [DIA] [int] NULL , [Hora] [varchar] (5) NULL , [llam_rec] [int] NULL , [llam_ate] [int] NULL , [llam_ate_10] [int] NULL , [llam_ate_15] [int] NULL , [llam_ate_20] [int] NULL , [llam_abn] [int] NULL ) ON [PRIMARY]') if datepart(hh, getdate()) = 2 set @dia = 45 if datepart(hh, getdate()) = 8 set @dia = 3 print(@dia) INSERT INTO TEMP_F_COLA SELECT

51

CASE WHEN (GROUPING(a.callcenter) = 1) THEN '0' ELSE a.callcenter END AS CALLCENTER, CASE WHEN (GROUPING(C.FAMILIA) = 1) THEN '0' ELSE C.FAMILIA END AS FAMILIA, CASE WHEN (GROUPING(C.PCRC) = 1) THEN '0' ELSE C.PCRC END AS PCRC, CASE WHEN (GROUPING(C.SEGMENTO) = 1) THEN '0' ELSE C.SEGMENTO END AS SEGMENTO, CASE WHEN (GROUPING(C.SISTEMA) = 1) THEN 0 ELSE C.SISTEMA END AS SISTEMA, YEAR(a.fecha), MONTH(a.fecha), DAY(a.fecha), case when cast(right(a.hora,2)as int) < 30 then left(a.hora,3)+'00' else left(a.hora,3)+'30' end, sum(a.llam_rec)llam_rec, sum(a.llam_ate)llam_ate, sum(a.llam_ate_10)llam_ate_10, sum(a.llam_ate_15)llam_ate_15, sum(a.llam_ate_20)llam_ate_20, sum(a.llam_abn)llam_abn FROM tr_cola_consolidado a (nolock) JOIN colas c ON a.cola = c.cola and c.reporte = 'COLA' WHERE dbo.fecha(fecha) >dbo.fecha(getdate()-@dia) and fecha >(getdate()-(@dia+1)) AND c.expired is null GROUP BY C.PCRC, C.FAMILIA, A.CALLCENTER, C.SEGMENTO, C.SISTEMA, YEAR(a.fecha), MONTH(a.fecha), DAY(a.fecha), case when cast(right(a.hora,2)as int) < 30 then left(a.hora,3)+'00' else left(a.hora,3)+'30' end WITH CUBE

UPDATE TEMP_F_COLA SET HORA = CASE WHEN HORA IS NULL THEN '0' ELSE HORA END, DIA = CASE WHEN DIA IS NULL THEN '0' ELSE DIA END, MES = CASE WHEN MES IS NULL THEN '0' ELSE MES END, ANO = CASE WHEN ANO IS NULL THEN '0' ELSE ANO END WHERE HORA IS NULL OR DIA IS NULL OR MES IS NULL OR ANO IS NULL delete from temp_f_cola where ano = 0 or mes = 0 or familia = '0'

52

if @dia < day(getdate()) begin delete from temp_f_cola where mes = month(getdate()) and dia = 0 print('acumulado mes eliminado') end if @dia < day(getdate())+31 begin delete from temp_f_cola where mes = month(getdate())-1 and dia = 0 print('acumulado mes anterior eliminado') end if @dia < day(getdate())+61 begin delete from temp_f_cola where mes = month(getdate())-2 and dia = 0 print('acumulado mes 2 anterior eliminado') end if @dia < day(getdate())+91 begin delete from temp_f_cola where mes = month(getdate())-3 and dia = 0 print('acumulado mes 3 anterior eliminado') end if @dia < day(getdate())+121 begin delete from temp_f_cola where mes = month(getdate())-4 and dia = 0 print('acumulado mes 4 anterior eliminado') end

8.1.2 agrupar_eac
CREATE PROCEDURE as agrupar_eac (@dia int, @max_dia int = 0 )

DECLARE @ano varchar(4), @mes varchar(2), @indicadores varchar(500), @group_columns varchar(500), @query varchar(2000), @d_fecha varchar(300), @condicion varchar(500), @insert varchar(100), @_dia int, @min_fecha datetime, @debug bit set @debug = 1 EXEC('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[TEMP_F_EAC]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1) drop table [dbo].[TEMP_F_EAC] CREATE TABLE [dbo].[TEMP_F_EAC] ( [CALLCENTER] [varchar] (20) NULL , [FAMILIA] [varchar] (10) NULL , [PCRC] [varchar] (100) NULL , [SISTEMA] [int] NULL ,

53

[ANO] [int] NULL , [MES] [int] NULL , [DIA] [int] NULL , [Hora] [varchar] (5) NULL , [q_ate] [int] NULL , [t_hold] [int] NULL , [t_acd] [int] NULL , [t_acw] [int] NULL , [t_ring] [int] NULL , [t_login] [int] NULL , [Q_transf] [int] NULL , [q_abn_ring] [int] NULL , [q_outbound] [int] NULL, [t_bano] [int] NULL, [t_capacitacion] [int] NULL, [t_disponible] [int] NULL, [t_outbound] [int] NULL, [t_consulta] [int] NULL, [t_interna] [int] NULL, [t_retroalimentacion] [int] NULL, [t_colacion] [int] NULL, [t_break] [int] NULL, [t_dedicacion_personal] [int] NULL, [t_problema_tecnico] [int] NULL ) ON [PRIMARY]') if datepart(hh, getdate()) = 2 set @dia = 35 if datepart(hh, getdate()) = 8 set @dia = 3 INSERT INTO TEMP_F_EAC SELECT CASE WHEN (GROUPING(a.callcenter) = 1) THEN '0' ELSE a.callcenter END AS CALLCENTER, case when (GROUPING(g.FAMILIA) = 1) THEN '0' ELSE g.FAMILIA END AS FAMILIA, case when (GROUPING(G.PCRC) = 1) THEN '0' ELSE G.PCRC END AS PCRC, case when (GROUPING(G.SISTEMA) = 1) THEN 0 ELSE G.SISTEMA END AS SISTEMA, YEAR(FECHA) AS ANO, MONTH(A.FECHA) AS MES, DAY(A.FECHA) AS DIA, case when cast(right(a.intervalo,2)as int) < 30 then left(a.intervalo,3)+'00' else left(a.intervalo,3)+'30' end AS HORA, SUM(a.q_ate)q_ate, SUM(a.t_hold)t_hold, SUM(a.t_acd)t_acd, SUM(a.t_acw)t_acw, SUM(a.t_ring)t_ring, SUM(a.t_login)t_login,

54

SUM(a.Q_transf)Q_transf, SUM(a.q_abn_ring)q_abn_ring, SUM(a.q_outbound) q_outbound, SUM(a.t_bano) t_bano, SUM(a.t_capacitacion) t_capacitacion, SUM(a.t_disponible) t_disponible, SUM(a.t_outbound) t_outbound, SUM(a.t_consulta) t_consulta, SUM(a.t_interna) t_interna, SUM(a.t_retroalimentacion) t_retroalimentacion, SUM(a.t_colacion) t_colacion, SUM(a.t_break) t_break, SUM(a.t_dedicacion_personal) t_dedicacion_personal, SUM(a.t_problema_tecnico) t_problema_tecnico FROM tr_eac_consolidado a (nolock) join colas g on a.cola = g.cola and g.reporte = 'EAC' WHERE a.fecha >= dbo.fecha(GETDATE() - @dia) and a.fecha <= dbo.fecha(GETDATE() - @max_dia) and intervalo <> '0' AND g.expired is null GROUP BY G.PCRC, g.FAMILIA, a.callcenter, g.SISTEMA, YEAR(a.fecha), MONTH(a.fecha), DAY(a.fecha), case when cast(right(a.intervalo,2)as int) < 30 then left(a.intervalo,3)+'00' else left(a.intervalo,3)+'30' end WITH CUBE

--Elimina los consolidados de mes, ao y total update TEMP_F_EAC set ano = case when ano is null then 0 else ano end, mes = case when mes is null then 0 else mes end, dia = case when dia is null then 0 else dia end, hora = case when hora is null then '0' else hora end where ano is null or mes is null or dia is null or hora is null delete from TEMP_F_EAC where ano = 0 or mes = 0 or pcrc = '0' or familia = '0' if @dia < day(getdate()) begin delete from temp_f_eac where mes = month(getdate()) and dia = 0 print('acumulado mes eliminado') end if @dia < day(getdate())+31 begin delete from temp_f_eac where mes = month(getdate())-1 and dia = 0 print('acumulado mes 1 anterior eliminado')

55

end if @dia < day(getdate())+61 begin delete from temp_f_eac where mes = month(getdate())-2 and dia = 0 print('acumulado mes 2 anterior eliminado') end if @dia < day(getdate())+91 begin delete from temp_f_eac where mes = month(getdate())-3 and dia = 0 print('acumulado mes 3 anterior eliminado') end if @dia < day(getdate())+121 begin delete from temp_f_eac where mes = month(getdate())-4 and dia = 0 print('acumulado mes 4 anterior eliminado') end

8.1.3 carga_cola
CREATE as PROCEDURE carga_cola

--Actualiza copia local de d_ubicacion y d_cola ----------------------------------------------------------------------------------------------------Actualizar d_ubicacion select t.familia, t.pcrc, t.callcenter, t.segmento, t.sistema into temp_ubicacion from temp_f_cola t left join dwh_gtr.dbo.d_ubicacion c on t.familia = c.familia and t.pcrc = c.pcrc and t.callcenter = c.callcenter and t.segmento = c.segmento and t.sistema = c.sistema where (c.familia is null or c.pcrc is null and c.segmento is null and c.callcenter is null and c.sistema is null) and t.pcrc is not null group by t.familia, t.pcrc, t.callcenter, t.segmento,t.sistema if (select count(1) from temp_ubicacion) > 0 begin print('Insertando nuevas ubicaciones') INSERT INTO dwh_gtr.dbo.d_ubicacion (familia, pcrc, callcenter, segmento, sistema) SELECT familia, pcrc, callcenter, segmento, sistema FROM TEMP_ubicacion end

56

DROP TABLE TEMP_UBICACION --------------------------------------------------------------------------------------------------if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TEMP_II_F_COLA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[TEMP_II_F_COLA] SELECT a.callcenter, a.familia, a.pcrc, a.segmento, a.sistema, a.ano, a.mes, a.dia, a.hora, CASE when e.id_ubicacion IS not null then 1 else 0 end _update, b.[id] as ID_Fecha, c.[id] as ID_Ubicacion, a.llam_rec, a.llam_ate, a.llam_ate_10, a.llam_ate_15, a.llam_ate_20, a.llam_abn INTO TEMP_II_F_COLA FROM TEMP_F_COLA a INNER JOIN dwh_gtr.dbo.d_fecha b ON a.ano= b.ano and a.mes = b.mes and a.dia = b.dia and a.hora = b.hora INNER JOIN dwh_gtr.dbo.d_ubicacion c ON a.callcenter = c.callcenter AND a.familia = c.familia AND a.pcrc=c.pcrc AND a.segmento=c.segmento AND a.sistema=c.sistema LEFT JOIN dwh_gtr.dbo.f_cola e ON c.[id]= e.id_ubicacion AND b.[id]= e.id_fecha -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- update las ya existentes IF (SELECT COUNT(1)cant FROM TEMP_II_F_COLA WHERE _update=1 GROUP BY _update ) >0 BEGIN UPDATE dwh_gtr.dbo.f_COLA SET LLAM_REC=b.llam_rec, LLAM_ATE=b.llam_ate, LLAM_ATE_10=b.llam_ate_10, LLAM_ATE_15=b.llam_ate_15, LLAM_ATE_20=b.llam_ate_20,

57

LLAM_ABN=b.llam_abn FROM dwh_gtr.dbo.f_cola a INNER JOIN TEMP_II_F_COLA b ON a.id_fecha=b.id_fecha AND a.id_ubicacion= b.id_ubicacion AND b._update=1 PRINT 'Update listo' END -------------------------------------------------------------------------------------------------- Insert las que no estan-IF (SELECT COUNT(1)cant FROM TEMP_II_F_COLA WHERE _update=0) >0 BEGIN INSERT INTO dwh_gtr.dbo.f_cola (id_fecha, id_ubicacion, llam_rec, llam_ate, llam_ate_10, llam_ate_15, llam_ate_20, llam_abn) SELECT DISTINCT id_fecha, id_ubicacion, llam_rec, llam_ate, llam_ate_10, llam_ate_15, llam_ate_20, llam_abn FROM TEMP_II_F_COLA WHERE _update=0 PRINT'Finaliza Insert' END

8.1.4 carga_eac
CREATE as PROCEDURE carga_eac

--Actualizar d_ubicacion select t.familia, t.pcrc, t.callcenter, t.sistema into temp_ubicacion from temp_f_eac t left join dwh_gtr.dbo.d_ubicacion c on t.familia = c.familia and t.pcrc = c.pcrc and t.callcenter = c.callcenter and t.sistema = c.sistema where c.familia is null or c.pcrc is null or c.callcenter is null or c.sistema is null group by t.familia, t.pcrc, t.callcenter, t.sistema if (select count(1) from temp_ubicacion) > 0 begin print('Insertando nuevas ubicaciones') INSERT INTO dwh_gtr.dbo.d_ubicacion (familia, pcrc, callcenter, sistema) SELECT familia, pcrc, callcenter, sistema FROM TEMP_ubicacion end DROP TABLE TEMP_ubicacion

58

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TEMP_II_F_EAC]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[TEMP_II_F_EAC] SELECT CASE when e.id_ubicacion IS not null then 1 else 0 end _update, b.[id] as ID_Fecha, c.[id] as ID_Ubicacion, a.q_ate, a.t_hold, a.t_acd, a.t_acw, a.t_ring, a.t_login, a.q_transf, a.q_abn_ring, a.q_outbound, a.t_bano, a.t_capacitacion, a.t_disponible, a.t_outbound, a.t_consulta, a.t_interna, a.t_retroalimentacion, a.t_colacion, a.t_break, a.t_dedicacion_personal, a.t_problema_tecnico, ((isnull(a.t_hold, 0) + isnull(a.t_acd, 0) + isnull(a.t_acw, 0) + isnull(a.t_disponible, 0) + isnull(a.t_outbound,0)) / 1800) as Q_EAC_REAL INTO TEMP_II_F_EAC FROM TEMP_F_EAC a INNER JOIN dwh_gtr.dbo.d_fecha b ON a.ano= b.ano and a.mes = b.mes and a.dia = b.dia and a.hora = b.hora INNER JOIN dwh_gtr.dbo.d_ubicacion c ON a.callcenter = c.callcenter AND a.familia = c.familia AND a.pcrc=c.pcrc AND a.callcenter = c.callcenter -AND a.subgerencia = c.subgerencia AND a.sistema = c.sistema LEFT JOIN dwh_gtr.dbo.f_EAC e ON c.[id]= e.id_ubicacion AND b.[id]= e.id_fecha -------------------------------------------------------------------------------------------------

59

-------------------------------------------------------------------------------------------------- update las ya existentes

IF (SELECT COUNT(1)cant FROM TEMP_II_F_EAC WHERE _update=1 GROUP BY _update ) >0 BEGIN UPDATE dwh_gtr.dbo.f_eac SET Q_ATE=b.q_ate, T_HOLD=b.t_hold, t_acd=b.t_acd, T_ACW=b.t_acw, t_ring=b.t_ring, T_LOGIN=b.t_login, Q_TRANSF=b.q_transf, q_abn_ring=b.q_abn_ring, q_outbound=b.q_outbound, t_bano=b.t_bano, t_capacitacion=b.t_capacitacion, t_disponible=b.t_disponible, t_outbound=b.t_outbound, t_consulta=b.t_consulta, t_interna=b.t_interna, t_retroalimentacion=b.t_retroalimentacion, t_colacion=b.t_colacion, t_break=b.t_break, t_dedicacion_personal=b.t_dedicacion_personal, t_problema_tecnico=b.t_problema_tecnico, Q_EAC_REAL=b.Q_eac_real --Q_EAC_DISTINTOS= FROM dwh_gtr.dbo.f_eac a INNER JOIN TEMP_II_F_EAC b ON a.id_fecha=b.id_fecha AND a.id_ubicacion= b.id_ubicacion AND b._update=1 PRINT 'Update listo' END -------------------------------------------------------------------------------------------------- Insert las que no estan-IF (SELECT COUNT(1)cant FROM TEMP_II_F_EAC WHERE _update=0 GROUP BY _update ) >0 BEGIN INSERT INTO dwh_gtr.dbo.f_eac (id_fecha ,id_ubicacion ,q_ate ,t_hold ,t_acd ,t_acw ,t_ring

60

,t_login ,q_transf ,q_abn_ring ,q_outbound ,t_bano ,t_capacitacion ,t_disponible ,t_outbound ,t_consulta ,t_interna ,t_retroalimentacion ,t_colacion ,t_break ,t_dedicacion_personal ,t_problema_tecnico ,Q_EAC_REAL) SELECT DISTINCT id_fecha ,id_ubicacion ,q_ate ,t_hold ,t_acd ,t_acw ,t_ring ,t_login ,q_transf ,q_abn_ring ,q_outbound ,t_bano ,t_capacitacion ,t_disponible ,t_outbound ,t_consulta ,t_interna ,t_retroalimentacion ,t_colacion ,t_break ,t_dedicacion_personal ,t_problema_tecnico ,Q_EAC_REAL FROM TEMP_II_F_EAC WHERE _update=0 PRINT'Finaliza Insert' END

8.1.5 calculo_prime_noprime
PROCEDURE calculo_prime_noprime AS DECLARE @ano int, @mes int, @dia int set @dia=2 set @mes =month(getdate()) set @ano=year(getdate()) if (day(getdate())=1) set @dia = 0

61

if (day(getdate())=1 and datepart(hh,getdate()) <7) begin SET @mes = month(getdate()-2) set @ano=year(getdate()-2) set @dia=day(getdate()-2) end print(@dia) print(@mes) print(@ano) UPDATE f_cola SET tipo = final.tipo FROM (SELECT id_ubicacion, id_fecha,llam_rec, calculo, case when calculo <= 0.8 then 1 else 0 end TIPO FROM ( ( SELECT a.id_ubicacion, a.id_fecha, fec1.ano, fec1.mes, fec1.dia, fec1.hora, a.llam_rec, dbo.DIV_(sum(b.llam_rec), (SELECT llam_rec FROM d_fecha fec_ JOIN f_cola c ON c.id_fecha = fec_.id WHERE fec_.ano = fec1.ano AND fec_.mes = fec1.mes AND fec_.dia = fec1.dia AND id_ubicacion = a.id_ubicacion AND fec_.hora = '0')) AS calculo FROM (d_fecha fec1 LEFT JOIN f_cola a ON fec1.id = a.id_fecha AND fec1.hora <> '0') LEFT JOIN (d_fecha fec2 LEFT JOIN f_cola b ON fec2.id = b.id_fecha AND fec2.hora <> '0') ON a.id_ubicacion = b.id_ubicacion AND fec1.ano = fec2.ano AND fec1.mes = fec2.mes AND fec1.dia = fec2.dia WHERE a.llam_rec <= b.llam_rec --and a.tipo is null AND fec1.mes=@mes and fec1.ano=@ano and fec1.dia >= day(getdate()-@dia) AND fec1.hora <> '0' and a.id_ubicacion is not null GROUP BY fec1.ano, fec1.mes, fec1.dia, fec1.hora, a.llam_rec, a.id_fecha, a.id_ubicacion)) f) final INNER JOIN f_cola ON f_cola.id_ubicacion = final.id_ubicacion AND f_cola.id_fecha = final.id_fecha

8.1.6 calculo_precision_pronostico_llamados
PROCEDURE [dbo].[calculo_precision_pronostico_llamados] AS --truncate table f_indicadores declare @ano int,

62

@mes int, @dia int, @fecha_inicio varchar(8), @id_fecha int, @id_ubicacion int, @callcenter varchar(20), @pcrc varchar(30), @prec_pr float, @prec_np float, @prec float, @cant int, @rango_pr float, @rango_np float set @rango_pr = 0.15 set @rango_np = 0.20 set @fecha_inicio = convert(varchar, getdate()-10, 112) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[_precision]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table _precision -- Agrupacin por Call x Pcrc x Da -select null as _update, null as id_ubicacion, null as id_fecha, ubi.familia, ubi.pcrc, ubi.segmento, fec.ano, fec.mes, fec.dia, dbo.div(sum(case when cola.tipo = 1 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_pr and @rango_pr then 1 else 0 end), sum(case cola.tipo when 1 then 1 else 0 end)) prec_prime, dbo.div(sum(case when cola.tipo = 0 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_np and @rango_np then 1 else 0 end), sum(case cola.tipo when 0 then 1 else 0 end)) prec_noprime ,dbo.div( (sum(case when cola.tipo = 1 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_pr and @rango_pr then 1 else 0 end) + sum(case when cola.tipo = 0 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_np and @rango_np then 1 else 0 end)), COUNT(COLA.TIPO)) prec into _precision from d_fecha fec cross join d_cola col (NOLOCK) cross join d_ubicacion ubi (NOLOCK) join f_cola cola (NOLOCK) on fec.id = cola.id_fecha and ubi.id = cola.id_ubicacion join f_dimensionamiento dim (NOLOCK) on dim.id_fecha = fec.id and ubi.id = dim.id_ubicacion where fec.ano <> 0 and fec.mes >= month(getdate()) and fec.dia <> 0 and fec.hora <> '0' and ubi.callcenter = '0' and ubi.pcrc <> '0' and ubi.familia <> '0' and ubi.sistema = '0' and

63

fec.fecha >= @fecha_inicio group by ubi.familia, ubi.pcrc, ubi.segmento, fec.ano, fec.mes, fec.dia print('Agrupacin por Call x Pcrc x Da LISTO') -- Agrupacin por Pcrc x Mes -if(datepart(hh, getdate()) = 6 ) begin insert into _precision select null as _update, null as id_ubicacion, null as id_fecha, ubi.familia, ubi.pcrc, ubi.segmento, fec.ano, fec.mes, 0, dbo.div(sum(case when cola.tipo = 1 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_pr and @rango_pr then 1 else 0 end), sum(case cola.tipo when 1 then 1 else 0 end)) prec_prime, dbo.div(sum(case when cola.tipo = 0 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_np and @rango_np then 1 else 0 end), sum(case cola.tipo when 0 then 1 else 0 end)) prec_noprime ,dbo.div( (sum(case when cola.tipo = 1 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_pr and @rango_pr then 1 else 0 end) + sum(case when cola.tipo = 0 and 1(DBO.DIV(cola.Llam_rec,dim.Llam_Proy_Cp)) between -@rango_np and @rango_np then 1 else 0 end)), count(cola.tipo)) prec from d_fecha fec cross join d_cola col (NOLOCK) cross join d_ubicacion ubi (NOLOCK) join f_cola cola (NOLOCK) on fec.id = cola.id_fecha and ubi.id = cola.id_ubicacion join f_dimensionamiento dim (NOLOCK) on dim.id_fecha = fec.id and ubi.id = dim.id_ubicacion where fec.ano = 2010 and fec.mes >= month(getdate()) and fec.dia <> 0 and fec.hora <> '0' and ubi.callcenter = '0' and ubi.sistema = '0' and ubi.pcrc <> '0' and ubi.familia <> '0' group by ubi.familia, ubi.pcrc, ubi.segmento, fec.ano, fec.mes print('Agrupacin por Pcrc x Mes LISTO') end UPDATE _precision SET _update = case when i.id_ubicacion is null then 0 else 1 end, id_fecha = f.id, id_ubicacion = u.id FROM d_ubicacion u cross join d_fecha f join _precision p ON p.familia = u.familia and p.pcrc = u.pcrc and u.callcenter = '0' and u.sistema = '0' and u.segmento = p.segmento and p.ano = f.ano and p.mes = f.mes and p.dia = f.dia and f.hora = '0'

64

left join f_indicadores i ON i.id_ubicacion = u.id and i.id_fecha = f.id

IF (SELECT COUNT(1) cant FROM _precision WHERE _update=1 GROUP BY _update ) >0 BEGIN UPDATE f_indicadores SET prec_pr = p.prec_prime, prec_np = p.prec_noprime, prec = p.prec FROM f_indicadores i join _precision p on i.id_ubicacion = p.id_ubicacion and i.id_fecha = p.id_fecha WHERE p._update = 1 END print('Update LISTO') IF (SELECT COUNT(1)cant FROM _precision WHERE _update=0 GROUP BY _update ) >0 BEGIN INSERT INTO f_indicadores (id_fecha, id_ubicacion, prec_pr, prec_np, prec) SELECT DISTINCT id_fecha, id_ubicacion, prec_prime, prec_noprime, prec FROM _precision p WHERE _update = 0 END print('Insert LISTO')

8.1.7 calculo_precision_programacion_eac
PROCEDURE [dbo].[calculo_precision_programacion_eac] AS --truncate table f_indicadores declare @ano int, @mes int, @dia int, @fecha_inicio varchar(8), @id_fecha int, @id_ubicacion int, @callcenter varchar(20), @pcrc varchar(30), @prec_pr float, @prec_np float, @prec float, @cant int, @rango float

65

set @rango = 0.10 set @fecha_inicio = convert(varchar, getdate()-30, 112) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[_cumplimiento_eac]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table _cumplimiento_eac -- Agrupacin por Call x Pcrc x Da -select null as _update, null as id_ubicacion, null as id_fecha, ubi.callcenter, ubi.pcrc, fec.ano, fec.mes, fec.dia, sum(case when 1-(DBO.DIV(eac.q_eac_real,dim.eac_proy_cp)) between @rango and @rango then 1 else 0 end) cumplen, count(dim.eac_proy_cp) intervalos, dbo.div(sum(case when 1-(DBO.DIV(eac.q_eac_real,dim.eac_proy_cp)) between -@rango and @rango then 1 else 0 end), count(dim.eac_proy_cp)) cumplimiento_eac into _cumplimiento_eac from d_fecha fec cross join d_ubicacion ubi (NOLOCK) join f_dimensionamiento dim (NOLOCK) on dim.id_fecha = fec.id and ubi.id = dim.id_ubicacion left join f_eac eac (NOLOCK) on fec.id = eac.id_fecha and ubi.id = eac.id_ubicacion where fec.ano <> 0 and fec.mes >= month(getdate())-1 and fec.dia <> 0 and fec.hora <> '0' and ubi.pcrc <> '0' and ubi.sistema = '0' and ubi.segmento = '0' and fec.fecha >= @fecha_inicio group by ubi.callcenter, ubi.pcrc, fec.ano, fec.mes, fec.dia print('Agrupacin por Call x Pcrc x Da LISTO') -- Agrupacin por Pcrc x Mes -if(datepart(hh, getdate()) = 6 ) begin insert into _cumplimiento_eac select null as _update, null as id_ubicacion, null as id_fecha, ubi.callcenter, ubi.pcrc, fec.ano, fec.mes, 0, sum(case when 1-(DBO.DIV(eac.q_eac_real,dim.eac_proy_cp)) between -@rango and @rango then 1 else 0 end) cumplen, count(dim.eac_proy_cp) intervalos, dbo.div(sum(case when 1(DBO.DIV(eac.q_eac_real,dim.eac_proy_cp)) between -@rango and @rango then 1 else 0 end), count(dim.eac_proy_cp)) cumplimiento_eac from d_fecha fec cross join d_ubicacion ubi (NOLOCK) join f_dimensionamiento dim (NOLOCK) on dim.id_fecha = fec.id and ubi.id = dim.id_ubicacion

66

left join f_eac eac (NOLOCK) on fec.id = eac.id_fecha and ubi.id = eac.id_ubicacion where fec.ano = 2010 and fec.mes >= month(getdate())-1 and fec.dia <> 0 and fec.hora <> '0' and ubi.sistema = '0' and ubi.pcrc <> '0' and ubi.segmento = '0' group by ubi.callcenter, ubi.pcrc, fec.ano, fec.mes print('Agrupacin por Pcrc x Mes LISTO') end UPDATE _cumplimiento_eac SET _update = case when i.id_ubicacion is null then 0 else 1 end, id_fecha = f.id, id_ubicacion = u.id FROM d_ubicacion u cross join d_fecha f join _cumplimiento_eac p ON p.pcrc = u.pcrc and u.callcenter = p.callcenter and u.sistema = '0' and u.segmento = '0' and p.ano = f.ano and p.mes = f.mes and p.dia = f.dia and f.hora = '0' left join f_indicadores i ON i.id_ubicacion = u.id and i.id_fecha = f.id

IF (SELECT COUNT(1) cant FROM _cumplimiento_eac WHERE _update=1 GROUP BY _update ) >0 BEGIN UPDATE f_indicadores SET cumplimiento_eac = p.cumplimiento_eac FROM f_indicadores i join _cumplimiento_eac p on i.id_ubicacion = p.id_ubicacion and i.id_fecha = p.id_fecha WHERE p._update = 1 END print('Update LISTO') IF (SELECT COUNT(1)cant FROM _cumplimiento_eac WHERE _update=0 GROUP BY _update ) >0 BEGIN INSERT INTO f_indicadores (id_fecha, id_ubicacion, cumplimiento_eac) SELECT DISTINCT id_fecha, id_ubicacion, cumplimiento_eac FROM _cumplimiento_eac p WHERE _update = 0 END

8.1.8 calculo_agentes_necesarios
CREATE PROCEDURE calculo_agentes_necesarios AS

67

DECLARE @dia int set @dia=60 update f_eac set f_eac.q_eac_req = --b.llam_rec dbo.agentes_necesarios(b.llam_rec, 1800, a.tmo, 20, 0.8) from d_fecha cross join d_ubicacion join f_eac a on a.id_fecha = d_fecha.id and a.id_ubicacion = d_ubicacion.id join f_cola b on b.id_fecha = d_fecha.id and b.id_ubicacion = d_ubicacion.id where d_fecha.ano <> 0 and d_fecha.mes <> 0 and d_fecha.dia <> 0 and d_fecha.hora <> '0' and d_fecha.fecha > convert(varchar, getdate()-80, 112) and a.q_eac_req is null

8.1.9 agentes_necesarios
CREATE FUNCTION [dbo].[agentes_necesarios] (@llamadas_por_intervalo as real, @segundos_por_intervalo as real, @duracion_llamada as real, @tiempo_respuesta as real, @ns_req as real) RETURNS integer AS BEGIN declare @agn integer, @e real, @m real, @u real, @svl float(52) set @u = (@llamadas_por_intervalo / @segundos_por_intervalo) * @duracion_llamada set @m = convert(integer, @u-10) --@u - 10 if(@m < 0) set @m = 0

set @svl = 0 set @e = 2.71828182846 if(@llamadas_por_intervalo = 0) return 0 if(@duracion_llamada = 0) return 0 if(@duracion_llamada is null) return 0 while @svl < @ns_req begin

68

set @m = @m + 1 set @svl = 1 - dbo.erlangC(@m, @u)* power(@e, -(@m@u)*@tiempo_respuesta/@duracion_llamada) end return @m END

8.1.10 erlangC
CREATE FUNCTION [dbo].[erlangC] (@m as real, @u as real) RETURNS float(52) AS BEGIN declare @erl float(52), @rho float(52), @sum float(52), @k integer, @bottom float(52) if(@m = 0) set @rho = 9999999999 else set @rho = @u / @m set @sum = 0 set @k = 0 while(@k <= @m - 1) begin set @sum = @sum + dbo.u_m_f(@u, @k) set @k = @k + 1 end set @bottom = dbo.u_m_f(@u, @m) + (1 - @rho) * @sum set @erl = dbo.u_m_f(@u, @m) / @bottom return @erl END

8.1.11 u_m_f

La siguiente funcin calcula el valor de


FUNCTION [dbo].[u_m_f] (@u as real, @m as real) RETURNS float(52) AS BEGIN declare @result float(52), @i real set @i = @m set @result = 1

69

while (@i > 0) begin set @result = (@u / @i) * @result set @i = @i - 1 end return @result END

8.1.12 dwh
CREATE PROCEDURE [dbo].[DWH] ( @ano varchar(4), @mes varchar(3), @dia varchar(3), @hora varchar(5), @familia varchar(30), @call varchar(30), @pcrc varchar(30), @order varchar(5) = 'DESC',@rango varchar(3) = '' ) AS DECLARE @where varchar(6000), @select varchar(6000) SET @where = '' IF @rango <> '' BEGIN SET @where = ' cast(dbo.D_FECHA.fecha as int) between cast(cast(year(getdate()'+@rango+') as varchar) + case when month(getdate()-'+@rango+') < 10 then ''0''+cast(month(getdate()-'+@rango+') as varchar) else cast(month(getdate()-'+@rango+') as varchar) end + case when day(getdate()-'+@rango+') < 10 then ''0''+cast(day(getdate()'+@rango+') as varchar) else cast(day(getdate()-'+@rango+') as varchar) end as int) AND cast(cast(year(getdate()) as varchar) + case when month(getdate()) < 10 then ''0''+cast(month(getdate()) as varchar) else cast(month(getdate()) as varchar) end + case when day(getdate()) < 10 then ''0''+cast(day(getdate()) as varchar) else cast(day(getdate()) as varchar) end as int) AND ' END IF @ano = '' BEGIN SET @where = @where + 'dbo.D_FECHA.Ano = 0 AND ' END ELSE IF @ano = 'all' BEGIN SET @where = @where + 'dbo.D_FECHA.Ano <> 0 AND ' END ELSE BEGIN SET @where = @where + 'dbo.D_FECHA.Ano = '+@ano+' AND ' END

70

IF @mes = '' BEGIN SET @where = @where + ' dbo.D_FECHA.Mes = 0 AND ' END ELSE IF @mes = 'all' BEGIN SET @where = @where +' dbo.D_FECHA.Mes <> 0 AND ' END ELSE BEGIN SET @where = @where +' dbo.D_FECHA.Mes = '+@mes+' AND ' END IF @dia = '' BEGIN SET @where = @where +' dbo.D_FECHA.Dia = 0 AND ' END ELSE IF @dia = 'all' BEGIN SET @where = @where +' dbo.D_FECHA.Dia <> 0 AND ' END ELSE BEGIN SET @where = @where +' dbo.D_FECHA.Dia = '+@dia+' AND ' END IF @hora = '' BEGIN SET @where = @where +' dbo.D_FECHA.Hora = ''0'' AND ' END ELSE IF @hora = 'all' BEGIN SET @where = @where +' dbo.D_FECHA.Hora <> ''0'' AND ' END ELSE BEGIN SET @where = @where +' dbo.D_FECHA.Hora = '''+@hora+''' AND ' END IF @familia = '' BEGIN SET @where END ELSE IF @familia BEGIN SET @where END ELSE BEGIN SET @where AND ' END

= @where +' dbo.D_UBICACION.Familia = ''0'' AND ' = 'all' = @where +' dbo.D_UBICACION.Familia <> ''0'' AND '

= @where +' dbo.D_UBICACION.Familia = '''+@familia+'''

IF @pcrc = '' BEGIN SET @where = @where +' dbo.D_UBICACION.Pcrc = ''0'' AND '

71

END ELSE IF @pcrc = 'all' BEGIN SET @where = @where +' dbo.D_UBICACION.Pcrc <> ''0'' AND ' END ELSE IF charindex(',', @pcrc) > 0 BEGIN SET @where = @where +' dbo.D_UBICACION.Pcrc in ('+@pcrc+') AND ' END ELSE BEGIN SET @where = @where +' dbo.D_UBICACION.Pcrc = '''+@pcrc+''' AND ' END IF @call = '' BEGIN SET @where = @where +' dbo.D_UBICACION.Callcenter = ''0''' END ELSE IF @call = 'all' BEGIN SET @where = @where +' dbo.D_UBICACION.Callcenter <> ''0''' END ELSE BEGIN SET @where = @where +' dbo.D_UBICACION.Callcenter = '''+@call+'''' END SET @select = 'SELECT dbo.D_FECHA.Ano, dbo.D_FECHA.Mes, dbo.D_FECHA.Dia, dbo.D_FECHA.Hora, dbo.D_UBICACION.Familia, dbo.D_UBICACION.Pcrc, dbo.D_UBICACION.Pcrc_ab, dbo.D_UBICACION.Callcenter, dbo.F_ANI.Q_Clientes, dbo.F_ANI.Llam_ate AS llam_ate_ani, dbo.F_ANI.Q_llam_Cortas, dbo.F_EAC.q_ate, dbo.F_EAC.T_Hold, dbo.F_EAC.T_Acw, dbo.F_EAC.T_Acd, dbo.F_EAC.T_Login, dbo.F_EAC.Q_Transf, dbo.F_EAC.Q_Eac_Real, dbo.F_EAC.Q_Eac_Distintos, dbo.F_EAC.Q_Eac_Req, dbo.F_COLA.Llam_Rec, dbo.F_COLA.Llam_Ate AS Llam_ate_cola, dbo.F_COLA.Llam_Ate_20, dbo.F_COLA.llam_Abn, dbo.F_DIMENSIONAMIENTO.Eac_Proy_Cp, dbo.F_DIMENSIONAMIENTO.Eac_Proy_Mp, dbo.F_DIMENSIONAMIENTO.Llam_Proy_Cp, dbo.F_DIMENSIONAMIENTO.Llam_Proy_Mp, dbo.F_DIMENSIONAMIENTO.Tmo_proy_cp, dbo.F_DIMENSIONAMIENTO.Tmo_proy_mp, dbo.F_ANI.[%_llam_cortas], dbo.F_ANI.Reintento, dbo.F_COLA.[%nss_10], dbo.F_COLA.[%nss_15], dbo.F_COLA.[%nss_20], dbo.F_COLA.[%abn],dbo.F_EAC.[Tmo], -- CALCULOS EXTRAS (DBO.DIV(dbo.F_EAC.[Tmo],dbo.F_DIMENSIONAMIENTO.Tmo_proy_cp)1) Desv_Tmo, 1(DBO.DIV(dbo.F_cola.Llam_rec,dbo.F_DIMENSIONAMIENTO.Llam_Proy_Cp)) Desv_LLAM , (DBO.DIV(dbo.F_eac.q_ate,dbo.F_DIMENSIONAMIENTO.Llam_Proy_Cp*0.9)1) Desv_LLAM_eac ,

72

1-( DBO.DIV(dbo.F_EAC.Q_Eac_Real,dbo.F_DIMENSIONAMIENTO.Eac_Proy_Cp)) Desv_Eac, dbo.F_EAC.[%Utilizacion], dbo.F_EAC.[%ocupacion], dbo.F_INDICADORES.Desv_Llamadas_cola Desv_LLAM_resp, dbo.F_INDICADORES.prec, dbo.F_INDICADORES.prec_pr, dbo.F_INDICADORES.prec_np, fcr, dbo.div(dbo.F_EAC.T_Hold,dbo.F_EAC.t_login) [%Hold], dbo.div(dbo.F_EAC.T_Acw,dbo.F_EAC.t_login) [%Acw], case when dbo.F_cola.tipo =1 then ''PR'' else ''NP'' end Tipo FROM dbo.D_FECHA (NOLOCK) CROSS JOIN dbo.D_UBICACION (NOLOCK) LEFT JOIN dbo.F_COLA (NOLOCK) ON dbo.F_COLA.ID_FECHA = dbo.D_FECHA.ID AND dbo.F_COLA.ID_UBICACION = dbo.D_UBICACION.ID LEFT JOIN dbo.F_EAC (NOLOCK) ON dbo.D_FECHA.ID= dbo.F_EAC.ID_FECHA AND dbo.D_UBICACION.ID = dbo.F_EAC.ID_UBICACION LEFT JOIN dbo.F_ANI (NOLOCK) ON dbo.D_FECHA.ID = dbo.F_ANI.ID_FECHA AND dbo.D_UBICACION.ID = dbo.F_ANI.ID_UBICACION LEFT JOIN dbo.F_DIMENSIONAMIENTO (NOLOCK) ON dbo.D_FECHA.ID = dbo.F_DIMENSIONAMIENTO.ID_FECHA AND dbo.D_UBICACION.ID = dbo.F_DIMENSIONAMIENTO.ID_UBICACION LEFT JOIN dbo.F_INDICADORES (NOLOCK) ON dbo.D_FECHA.ID = dbo.F_INDICADORES.ID_FECHA AND dbo.D_UBICACION.ID = dbo.F_INDICADORES.ID_UBICACION WHERE ' + @where + ' --and (dbo.F_EAC.q_ate >0 or dbo.F_DIMENSIONAMIENTO.Llam_Proy_Cp >0 or dbo.F_cola.Llam_rec >0 ) AND DBO.D_UBICACION.SISTEMA = 0 AND DBO.D_UBICACION.SEGMENTO = ''0'' AND DBO.D_UBICACION.CALLCENTER <> ''GENESYS'' AND ( (D_FECHA.ano = datepart(yyyy, getdate()) and D_FECHA.mes = datepart(m, getdate()) and d_fecha.dia = datepart(d, getdate()) and left(d_fecha.hora, 2) <= datepart(hh, getdate()) and right(d_fecha.hora, 2) + 35 <= datepart(mi, getdate())) or (D_FECHA.ano = datepart(yyyy, getdate()) and D_FECHA.mes = datepart(m, getdate()) and d_fecha.dia = datepart(d, getdate()) and left(d_fecha.hora, 2) < datepart(hh, getdate())) or (D_FECHA.ano = datepart(yyyy, getdate()) and d_fecha.mes = datepart(m, getdate()) and d_fecha.dia < datepart(d, getdate())) or (D_FECHA.ano = datepart(yyyy, getdate()) and D_fecha.mes < datepart(m, getdate())) or (D_FECHA.ano < datepart(yyyy, getdate())) ) order by ano,mes,dia '+@order+' ,hora '+@order

73

print(@select) exec(@select)

74

9 Bibliografa

[1]

Ralph Kimball ,The data warehouse toolkit: the complete guide to dimensional modelling, 2002

[2]

Vincent Rainardi, Building a Data Warehouse With Examples in SQL Server, 2007

[3] [4] [5] [6]

Ralph Kimball , The Data Warehouse ETL Toolkit, 2004 W. H. Inmon, Building the Data Warehouse, 3ra edicin, 2002 Fon Silvers, Building and Maintaining a Data Warehouse, 2008 A Method for developing dimensional data marts, Communications of the ACM, Diciembre 2003, Vol 46, N 12

[7]

C.

Hurtado,

OLAP

Minera

de

Datos,

www.dcc.uchile.cl/~churtado/olapTulua.pdf [8] [9] [10] [11] [12] http://es.wikipedia.org/wiki/Extract,_transform_and_load http://es.wikipedia.org/wiki/Webservice http://es.wikipedia.org/wiki/Centro_de_llamadas http://en.wikipedia.org/wiki/Data_mining Norma COPC-2000 para Proveedores de Servicios Integrales a Clientes. http://burovaldes.com/DT/COPC.pdf [13] Norma COPC-2000 para Organizaciones de Gestin de Proveedores (VMOs), http://burovaldes.com/DT/COPC_VMO.pdf [14] P. Naranjo, P. Riera, J. Valenzuela, L. Bentez, Diseo de un sistema de Gestin de Calidad basado en la norma ISO 9001:2000 para una empresa de servicio: Call Center http://www.cib.espol.edu.ec/Digipath/REVISTA_CICYT/Articulo/19.pdf [15] Richard Parkinson, Traffic Engineering Techniques in Telecomunications, http://www.tarrani.net/mike/docs/TrafficEngineering.pdf 75

[16]

Conceptos

de

Minera

de

Datos,

http://msdn.microsoft.com/es-

es/library/ms174949(v=SQL.90).aspx [17] [18] C. Hurtado, OLAP y Minera de Datos: Introduccin Craig S. Mullins, Database Administration: The Complete Guide to Practices and Procedures, Junio 2002

76