Tutorial ETL Dataware House
Tutorial ETL Dataware House
PRESENTACION
OBJETIVOS ESPECÍFICOS
“El 75% de los gerentes toman sus decisiones con información incompleta y
fuera de fecha.” Fuente: CFO Magazine 1999
La tecnología no puede estar ajena a esta necesidad. Es por ello que empresas
como Microsoft, Oracle, IBM e Informix han desarrollado productos Business
Intelligence.
Estos sistemas están orientados a las funciones que cumple el usuario del
sistema, es decir, existen operaciones sobre registros (ingreso, modificación,
eliminación) que se realizan diariamente y los reportes están orientados al detalle
de las operaciones efectuadas.
Este tipo de sistemas usa la tecnología OLTP (On line Transactional Processing)
1.2 Sistemas analíticos
Extraer
La primera tarea del proceso ETL consiste en extraer los datos almacenados en los
distintos sistemas de origen. En un número elevado de casos, en los proyectos de
almacenamiento de datos se fusionan datos que provienen de distintos sistemas de
origen. Cada sistema puede usar una organización distinta de los datos, o formatos
diferentes. Dichas fuentes pueden ser bases de datos, ficheros planos, etc., sea cual sea
su estructura. La tarea de extracción convierte todos estos datos a un formato preparado
para comenzar con el proceso de transformación.
En la tarea de transformación se aplican una seria de funciones sobre los datos extraídos
al objeto de convertirlos en datos preparados para su carga. Algunas fuentes de datos tan
solo requerirán mínimas transformaciones, mientras que otras necesitaran de un gran
número de ellas.
Cargar
Es la tarea mediante la cual los datos ya transformados en la fase anterior son cargados
en el sistema de destino. Durante esta fase se interactúa directamente con las bases de
datos de destino, por lo que se aplicaran todas las restricciones y disparadores que se
hayan definido en la misma, contribuyendo este hecho a que se garantice la calidad de los
datos durante el proceso integro.
2. RECURSOS A UTILIZAR
Para el presente manual, usaremos el Analysis Services de Microsoft SQL Server 2012 como
Servidor de Análisis y SQL Server Business Intelligence Development Studio como
herramienta de desarrollo. El usuario final podrá explotar y visualizar la información a través
de herramientas como Microsoft Excel y/o páginas Web utilizando el OWC (Office Web
Components).
Las herramientas Microsoft que permiten manejar el proceso data warehousing son las
siguientes:
SalesQuota
ProductSubcategory (Production) Bonus
ProductSubcategoryID
CommissionPct
ProductCategoryID
SalesYTD
Name
SalesLastYear
rowguid
rowguid
ModifiedDate
ModifiedDate
Tabla Descripción
La tabla registra la información de los productos que son solicitados en las
Production.producto
órdenes
La tabla registra la información relacionada con las categorías que agrupan
Production.Category
varios productos.
La tabla registra la información relacionada con las Subcategorías que
Production.SubCategory
agrupan varios productos.
La tabla registra la información relacionada con las Modelos de los
Production.Model
productos.
La tabla registra los movimientos de cada orden generada, en la cual se
Sales.SalesOrderHeader consigna el cliente solicitante, el empleado que la atiende, la fecha, entre
otros campos.
La tabla registra el detalle de cada línea de producto de cada orden
Sales.SalesOrderDetail generada, es decir, el producto, la orden, la cantidad solicitada, el precio
unitario y el descuento.
La tabla registra la información relacionada con los vendedores de la
Sales.Customer
compañia
La tabla registra la información relacionada con la cartera de clientes con la
Sales.SalesPerson
que trabaja la compañia
Esta tabla contiene la información general de las personas que interactúan
Person.Person
con la empresa (Clientes, Vendedores, etc)
Sales.SalesTerritory Esta tabla muestra la ubicación de los territorios donde vende la empresa
3. CREACIÓN DE LA BASE DE DATOS
De acuerdo con lo expuesto anteriormente, referente a las tablas de la base de datos y al giro
del negocio de dicha empresa, es posible plantar algunos requerimientos de análisis.
La facilidad que brindan las soluciones OLAP queda de manifiesto en poder definir aquello
que se desea analizar de manera sencilla y flexible.
Por ejemplo:
o Medidas
o Información relacionada al hecho (Surrogate Key)
Esta tabla contiene la información relacionada con el hecho, el cual es descrito en la tabla
de hechos.
Las tablas d e dimensión también representan las distintas opciones que el usuario tiene
para poder analizar su información, por ejemplo, las ventas se pueden analizar por
clientes, por productos, por empleados, etc. Aquí, clientes, productos y empleados son,
potencialmente, tablas dimensión.
También, es importante estructurar las tablas dimensión con campos que puedan ser
potencialmente agrupables.
Por ejemplo:
Productos, analizar las órdenes desde el punto de vista de los productos
Clientes, analizar las órdenes desde el punto de vista de los clientes
3.3. GRANULARIDAD DE DATOS DEL MODELO DIMENSIONAL
Esto significa que debemos definir el nivel de detalle de nuestro Data warehouse.
En nuestro caso, el objetivo es analizar los volúmenes de ventas por cada producto
de una orden.
DIM_producto DIM_categoria
SKproductoID SKcategoriaID
productoID categoriaID
nombre nombre
color
FACT_Ventas
DIM_modelo
SKVenta DIM_subcategoria
SKmodeloID ordenID SKsubcategoriaID
DIM_vendedor DIM_cliente
SKvendedorID SKclienteID
vendedorID clienteID
nombre nombre
Ejemplo:
“Comparativos entre meses relacionados a monto de facturación”
o El M.D, está en esquema estrella, pues las tablas dimensión se conectan con
la tabla de hechos directamente.
o Las estructuras de las tablas del M.D. presentan diferencias con las del
modelo E-R.
3.5. BASE DE DATOS DE TRABAJO O INTERMEDIA (VentasStage)
STG_territorio
territorioID
STG_vendedor
nombre
STG_modelo vendedorID
modeloID codigoPais
nombre
nombre Grupo
SKvendedorID
SKmodeloID SKterritorioID
Generar, dentro de un Proyecto, uno o más paquetes de ETL que nos permita
trasladar los datos de diferentes orígenes a un destino.
Permitirá administrar mejor los procesos de ETL que puedan desarrollarse para
poblar el data warehouse,
Controlar la secuencia que los datos deben seguir mediante el control de eventos
de éxito y fallo;
SSIS está constituido por varios elementos que permiten construir paquetes de ETL
complejos. Sus componentes son:
A. Data Sources.- Identifica las conexiones hacia los diversos orígenes de datos.
B. Data Source View.- Definen vistas parciales o totales de los objetos de un Data
Source.
En la siguiente ventana:
Dar nueva
Ponemos los valores de proveedor, nombre del servidor, conexión, base de datos
en el Administrador de conexiones, presionamos el botón de probar conexión y
finalmente aceptar.
Propiedad Valor
Name Limpiar Tablas
Description Limpia Tablas de VentasStage
ConnectionType OLEArea
DB
Connection Localhost.VentasStage
SQL Statement Delete from STG_Cliente…
Para probar la tarea tenemos que ejecutarla: Para esto seguimos los siguientes
pasos, seleccionamos la tarea / Clic Derecho / Ejecutar tarea
Se debe definir el orden de ejecución de las tareas, creando una conexión entre
estas, para lo que se debe dar clic sobre la tarea previa (Limpiar Tablas) y arrastrar
la punta de la flecha a la siguiente tarea a ejecutar (2).
Dar clic derecho sobre la tarea, Editar.
Modificamos las siguientes propiedades
Propiedad Valor
Name Limpiar Tablas
Description Limpia Tablas de VentasStage
ConnectionType OLEArea
DB
Connection Localhost.VentasStage
SQL Statement DBCC CHECKIDENT…
Para inicializar los seriales presionar el botón (…) al final de la línea
SQLStatement y se abrirá una ventana donde se debe introducir este código:
Darle Aceptar
Actividad Carga Categoria
La pantalla de Flujo de datos nos permitirá realizar la tarea de ETL. Para ello
necesitaremos conectarnos a un origen de datos, diseñar las tareas de
transformación para, finalmente, trasladarla hacia el destino final.
SSIS dentro del flujo de datos nos permite conectarnos a los siguientes
orígenes:
Administrador de Conexión OLE DB.- Define el origen del cual se leerá los
datos.
Modo de Acceso a Datos.- Define la forma en cómo se leerán los datos. Esta
puede ser:
o Tabla o vista
o Variable de Nombre de tabla o Nombre de vista
o Comando SQL
o Comando SQL con variable.
Nombre de la tabla o vista – indica la tabla de la que se van a leer los datos (como
se seleccionó como origen de datos una vista de la base de datos que contiene
alguna tablas, la lista muestra solamente la tablas contenidos en la vista):
Para el ejemplo, debemos considerar los siguientes valores:
Propiedad Valor
Administrador de Conexión OLE DB DW_AdventureWorks
Modo de Acceso a Datos Tabla o Vista
Nombre de la tabla o vista [Production].[ProductCategory]
Propiedad Valor
Administrador de conexión OLE DB Localhost.VentasStage
Modo de acceso a datos Tabla o Vista
Nombre de la tabla o vista [dbo].[STG_Categoria]
Propiedad Valor
Administrador de Conexión OLE DB DW_AdventureWorks
Modo de Acceso a Datos Tabla o Vista
Nombre de la tabla o vista [Sales].[SalesTerritory]
Seleccionamos las columnas que utilizaremos en el proceso de carga
Propiedad Valor
Nombre de columna Nombre20
Columna derivada <agregar como columna nueva>
Expresión SUBSTRING(Name,1,20)
Tipo de datos Cadena Unicode[DT_WSTR]
Longitud 20
3.- crear un destino de datos.
Propiedad Valor
Administrador de conexión OLE DB Localhost.VentasStage
Modo de acceso a datos Tabla o Vista
Nombre de la tabla o vista [dbo].[STG_Territorio]
Propiedad Valor
Administrador de conexión DW_AdventureWorks
Modo de acceso a datos Comando SQL
Texto de comando SQL select customerid,firstname,middlename,
lastname
from sales.customer c inner join person.person p
on c.personid = p.businessentityid
Aparecen solo las columnas que se incluyeron en la operación de SQL.
Propiedad Valor
Nombre de columna FullName
Columna derivada <agregar como columna nueva>
Expresión ISNULL(middlename) ? SUBSTRING(TRIM(lastname) +
" " + TRIM(firstname),1,50) :
SUBSTRING(TRIM(lastname) + " " +
Tipo de datos TRIM(middlename)
Cadena + " " + TRIM(firstname),1,50)
Unicode[DT_WSTR]
Longitud 50
3.- crear un destino de datos.
Propiedad Valor
Administrador de conexión OLE DB Localhost.VentasStage
Modo de acceso a datos Tabla o Vista
Nombre de la tabla o vista [dbo].[STG_Cliente]
Para desarrollar nuestra Tarea de flujo de datos seguiremos los siguientes pasos:
Propiedad Valor
Administrador de DW_AdventureWorks
conexión
Modo de acceso a datos Comando SQL
Texto de comando SQL select businessentityid,
substring(firstname+' ' +
case
when middlename is null then '' else middlename
end
+ ' '+lastname,1,50) as Fullname
from person.person
where businessentityid in (select salespersonid
from sales.salesorderheader)
Aparecen solo las columnas que se incluyeron en la operación de SQL incluyendo la
columna FullName.
Propiedad Valor
Administrador de conexión OLE DB Localhost.VentasStage
Modo de acceso a datos Tabla o Vista
Nombre de la tabla o vista [dbo].[STG_Vendedor]
Utilizando SQL Server Management Studio crear la vista vendedores en la base de datos
VentasStage.
use ventasStage;
Propiedad Valor
Administrador de conexión ventasStage
Modo de acceso a datos Tabla o vista
Nombre de la tabla o vista vendedores
Aparecen solo las columnas que se incluyeron en la vista.
Propiedad Valor
Administrador de conexión OLE DB Localhost.VentasStage
Modo de acceso a datos Tabla o Vista
Nombre de la tabla o vista [dbo].[STG_Vendedor]
Para realizar este proceso debemos crear una Tarea de flujo de datos como sigue:
Para la opción A debemos crear con el SQL Server Managment Studio una vista que
llamaremos Vfechas en la Base de datos VentasStage con la siguiente definicion:
use ventasStage
La columna Mesd del origen de datos tiene una longitud mayor que la columna
Mesd de la tabla de destino, por lo que se deberá recortar a una longitud de 10
utilizando una transformación de columna derivada como sigue, esto también se
puede corregir en la vista y/o comando de SQL:
Propiedad Valor
Administrador de conexión OLE DB Localhost.VentasStage
Modo de acceso a datos Tabla o Vista
Nombre de la tabla o vista [dbo].[STG_Fechas]
Paquete extraerVentas
B. Construir paquete TransformarVentas
Una vez Cargada la información de la base de datos, se procederá a hacer algunas tareas
para acondicionar los datos para el Data Warehouse, por ejemplo eliminar valores nulos que
se cargaron en algunas tablas.
Productos (STG_Producto)
Como se puede observar, en la tabla de productos, aparecen algunas tuplas con valores nulos
en las columnas de color, subcategoría y modelo.
La tarea a realizar consistirá en cambiar el valor nulo de color por ‘Sin color’, subcategoriaID a
0 y modeloID también a 0, sin embargo como subcategoriaID se relaciona con la tabla
STG_Subcategoria y modeloID con STG_modelo, insertaremos previamente las siguientes
tuplas:
Tablas Tupla
STG_Categoria 0,’Sin categoria’
STG_Subcategoria 0,’Sin Subcategoria’,0
STG_Modelo 0,’Sin modelo’
Repetir los pasos para subCategoria y modelo con las siguientes operaciones de
inserción:
Tabla Operacion
subcategoria insert into STG_Subcategoria
values(0,'Sin Subcategoria',0);
modelo insert into STG_modelo
values(0,'Sin modelo');
Propiedad Valor
Name preparaProducto
Description Elimina valores nulos de producto
ConnectionType OLE DB
Connection VentasStage
SQL Statement update STG_Producto
set color = 'Sin Color'
where color is null;
update STG_Producto
set subcategoriaID = 0
where subcategoriaID is null;
update STG_Producto
set modeloID = 0
where modeloID is null;
La compañía maneja ventas por internet y el sitio de comercio electrónico para identificarlas
deja la columna VendedorID de la tabla de órdenes con un valor nulo, como se puede
observar.
Ordenes (STG_Ordenes)
La tarea a realizar consistirá en cambiar el valor nulo por un 0 (cero) e insertar en la tabla de
vendedores este valor con el nombre de ‘ventas por internet’ para complementar la
información.
Propiedad Valor
Name incluye ventas por internet
Description incluye ventas por internet
ConnectionType OLE DB
Connection Localhost.VentasStage
SQL Statement insert into STG_vendedor
values(0,'Ventas por internet');
update STG_Orden
set vendedorID = 0
Ya que las referencias (llaves foráneas) que se utilizaran para el Data Warehouse serán las
llaves seriales definidas en la base de datos intermedia (VentasStage), el siguiente paso,
antes de la carga del DWH será el resolver esas referencias, por ejemplo: en la tabla
STG_producto a la columna SKProductoID se le dieron automáticamente los valores al
momento de insertar las tuplas en la tabla, sin embargo falta asignarle valor a los columnas
SKCategoriaID, SKSubCategoriaID y SKModeloID, se acuerdo con los valores que se
asignaron al momento de cargar las tablas respectivas.
Para la base de datos VentasStage, será necesario actualizar los seriales (subrogados) de las
tablas:
Tabla STG_Producto:
SKCategoriaID
SKSubCategoriaID
SKModelo
Tabla STG_DetalleOrden:
SKProductoID
Tabla STG_Orden:
SKClienteID
SKVendedorID
SKTerritorioID
update stg_producto
set SKsubcategoriaID = (select SKsubcategoriaID
from STG_subcategoria
where stg_producto.subcategoriaID =STG_subcategoria.subcategoriaID),
SKcategoriaID = (select SKcategoriaID
from STG_categoria
where categoriaID in (select categoriaID
from STG_subcategoria
where stg_producto.subcategoriaID =
STG_subcategoria.subcategoriaID))
where SKsubcategoriaID is null
update stg_producto
set SKmodeloID = (select SKmodeloID
from STG_modelo
where stg_producto.modeloID = STG_modelo.modeloID)
where SKmodeloID is null
update STG_Orden
set SKclienteID = (select SKclienteID
from STG_cliente
where stg_orden.clienteID = STG_cliente.clienteID)
where SKclienteID is null;
update STG_Orden
set SKvendedorID = (select SKvendedorID
from STG_vendedor
where stg_orden.vendedorID = STG_vendedor.vendedorID)
where SKvendedorID is null;
update STG_Orden
set SKterritorioID = (select SKterritorioID
from STG_territorio
where stg_orden.territorioID = STG_territorio.territorioID)
where SKterritorioID is null;
update STG_DetalleOrden
set SKproductoid = (select SKproductoid
from STG_producto
where stg_DetalleOrden.productoid = STG_producto.productoid)
where SKproductoid is null;
end;
Para crear la tarea, de los elementos de flujo de control arrastramos “Tarea ejecutar
SQL” al diseñador y le cambiamos el nombre a prepara seriales
Dar doble clic sobre la tarea o Clic derecho/editar y Configurar las siguientes
propiedades, de tal forma que se ejecute el procedimiento almacenado (seriales):
Propiedad Valor
Name Prepara seriales
Description Prepara seriales
ConnectionType OLE DB
Connection VentasStage
SQL statement Exec seriales
Paquete transformarVentas
5. CREACIÓN DEL PROYECTO (CargarVentas) PARA CARGAR
EL DATA WAREHOUSE (VENTASDWH) CON LAS
INFORMACIÓN DE LA BASE DE DATOS DE TRABAJO
(VENTASSTAGE).
STG_territorio
territorioID
STG_vendedor
nombre
STG_modelo vendedorID
modeloID codigoPais
nombre
nombre Grupo
SKvendedorID
SKmodeloID SKterritorioID
ESTRUCTURA DEL MODELO VENTASDWH (MULTIDIMENSIONAL)
DIM_producto DIM_categoria
SKproductoID SKcategoriaID
productoID categoriaID
nombre nombre
color
FACT_Ventas
DIM_modelo
SKVenta DIM_subcategoria
SKmodeloID ordenID SKsubcategoriaID
DIM_vendedor DIM_cliente
SKvendedorID SKclienteID
vendedorID clienteID
nombre nombre
STG_producto STG_Orden
productoID ordenID
STG_DetalleOrden fecha
nombre
OrdenID
NoProducto clienteID
OrdenDetalleID
color vendedorID
productoid
costo territorioID
cantidad subtotal
precio
preciounitario impuesto
subcategoriaID
total total
modeloID
SKVenta SKclienteID
SKproductoID
SKproductoid SKvendedorID
SKcategoriaID
SKsubcategoriaID SKterritorioID
SKmodeloID SKfecha
Cree la vista ventas con la siguiente definición:
use VentasStage;
La cual nos producirá la siguiente información, note que es la misma estructura que la tabla
FACT_Ventas):
Para esto ingrese a Microsoft SQL Server Managment Studio y cree la vista como sigue:
CREACIÓN DEL PROYECTO (cargarVentas)
Generamos la conexión a VentasDWH (destino de los datos), con los siguientes pasos:
Crear todas las actividades de flujo de datos, para la carga de todas las tablas de dimensión.
Actividad Cargar Hechos Ventas
Se crea una tarea de Flujo de datos y le cambiamos el nombre por Carga Hechos Ventas,
de damos doble clic para entrar al editor y arrastramos un Origen de datos de Ole DB, al
que le ponemos lee Ventas.
Presionar aceptar
En caso de que no se quiera usar la vista, en el editor de Origen de datos indicamos
la base de datos (VentasStage), el modo de acceso a datos la opción de Comando
SQL y en el Texto de comando SQL la siguiente proposición select:
select do.SKVenta,do.ordenID,do.OrdenDetalleID,do.cantidad,p.costo,do.preciounitario,
do.total,o.SKfecha,do.SKproductoid,p.SKcategoriaID,p.SKsubcategoriaID,
p.SKmodeloID,o.SKclienteID,o.SKvendedorID,o.SKterritorioID
from STG_Orden o inner join STG_DetalleOrden do on o.ordenID = do.OrdenID
inner join STG_producto p on p.productoID = do.productoid
Paquete CargarVentas