Tu primer ETL con:
Tutorial Práctico y Sencillo
ARCHIVOS EN BRUTO:
CARGA A STAGING:
Se comienzo con la creación de la base de datos STAGE_SuperEPSA:
-- Verificamos si la base de datos STAGE_SuperEPSA ya existe
IF NOT EXISTS (SELECT name FROM [Link] WHERE name =
N'STAGE_SuperEPSA')
BEGIN
-- Si no existe, la creamos
CREATE DATABASE STAGE_SuperEPSA;
END;
Se utilizará los siguientes archivos para alimentar la base:
Y dentro del proyecto Integration Services Project, Proyecto_Integrador; se crearon los
siguientes SSIS Packages
Además de crear una nueva conexión dentro del Connection Managers:
Como un ejemplo de las tareas para limpieza de datos que se hará, escogeré el paquete
Extract_Categoria.
Se empezó creando una tarea de flujo de datos:
Dentro del Data Flow:
Origen de Excel:
Se tienen las siguientes columnas:
Conversión de datos:
En Destino de OLE DB:
Revisando Mappings:
Por último, una Tarea Ejecutar SQL, en el Control Flow para limpiar la tabla Categoria:
Al ejecutar Extract_Categoria.dtsx:
Extract_Cliente.dtsx:
Extract_DetallePedido.dtsx:
Extract_Distribuidor.dtsx:
Extract_Empleado.dtsx:
Extract_Pedido.dtsx:
Extract_Producto.dtsx:
Extract_Prooveedor.dtsx:
CARGA A DATAMART:
Primero se creo la base de datos DATAMART_SuperEPSA
-- Apuntando a la base maestra
USE master
GO
-- Verificando si la base de datos DATAMART_SuperEPSA ya existe
IF NOT EXISTS (SELECT name FROM [Link] WHERE name =
N'DATAMART_SuperEPSA')
-- Si no existe, la creamos
CREATE DATABASE DATAMART_SuperEPSA;
Se tomó la tabla DetalleProducto como la tabla de hechos, y las demas tablas como
dimenciones.
CREACION DE LAS TABLAS DE DIMENSION
-- Apuntando a la base de datos
USE DATAMART_SuperEPSA
CREACIÓN DE LA TABLA dm_categoria:
-- Verificando la existencia de la tabla dm_categoria
IF OBJECT_ID('dbo.dm_categoria') IS NULL
-- Si no existe, se creará la tabla.
-- Tambien se añade la clave de surco
CREATE TABLE [dbo].[dm_categoria](
[SK_IdCategoria] [nvarchar](3) NOT NULL PRIMARY KEY,
[Categoria] [nvarchar](255) NULL,
[Descripcion] [nvarchar](255) NULL
);
GO
Se le alimentará los datos de la tabla Categoria, de la base de datos STAGE_SuperEPSA, para
ello se crea el SSIS Package dim_categoria.
Se crea una Tarea de Flujo de datos
Dentro de ella se agrega un Origen de OLE DB
Se configura el origen de los datos de la base de datos STAGE_SuperEPSA y se selecciona la
tabla Categoria.
Para rastrear los cambios de la tabla Categoria se agrega una Dimensión de variacion lenta
Configurando la llave empresarial
Y el atributo fijo Categoria
Se mantiene seleccionado que falle la transformacion si se detectó cambios:
Se dehabilita la compatibilidad con miembros inferidos:
El destino es predeterminado a la del DATAMART
Ejecutando
La misma dinámica se utilizará con todos las tablas de dimensión
CREACIÓN DE LA TABLA dm_cliente:
IF OBJECT_ID('dbo.dm_cliente') IS NULL
CREATE TABLE [dbo].[dm_cliente](
[SK_IdCliente] [nvarchar](10) NOT NULL PRIMARY KEY,
[RazonSocial] [nvarchar](100) NULL,
[Contacto] [nvarchar](100) NULL,
[Cargo] [nvarchar](100) NULL,
[Direccion] [nvarchar](100) NULL,
[Ciudad] [nvarchar](50) NULL,
[Region] [nvarchar](50) NULL,
[CodPostal] [nvarchar](20) NULL,
[Pais] [nvarchar](30) NULL,
[Telefono] [nvarchar](30) NULL,
[Fax] [nvarchar](30) NULL
);
GO
CREACIÓN DE LA TABLA dm_distribuidor:
IF OBJECT_ID('dbo.dm_distribuidor') IS NULL
CREATE TABLE [dbo].[dm_distribuidor](
[SK_IdDistribuidor] [nvarchar](3) NOT NULL PRIMARY KEY,
[RazonSocial] [nvarchar](20) NULL,
[Telefono] [nvarchar](25) NULL
);
GO
CREACIÓN DE LA TABLA dm_empleado:
IF OBJECT_ID('dbo.dm_empleado') IS NULL
CREATE TABLE [dbo].[dm_empleado](
[SK_IdEmpleado] [nvarchar](3) NOT NULL PRIMARY KEY,
[Nombre] [nvarchar](50) NULL,
[Cargo] [nvarchar](50) NULL,
[Trato] [nvarchar](10) NULL,
[FechaNacimiento] [datetime] NULL,
[FechaIngreso] [datetime] NULL,
[Direccion] [nvarchar](100) NULL,
[Ciudad] [nvarchar](50) NULL,
[Region] [nvarchar](10) NULL,
[CodPostal] [nvarchar](20) NULL,
[Pais] [nvarchar](50) NULL,
[Telefono] [nvarchar](50) NULL,
[Anexo] [nvarchar](10) NULL,
[Jefe] [nvarchar](3) NULL
);
GO
CREACIÓN DE LA TABLA dm_pedido:
IF OBJECT_ID('dbo.dm_pedido') IS NULL
CREATE TABLE [dbo].[dm_pedido](
[SK_IdPedido] [numeric](18, 0)NOT NULL PRIMARY KEY,
[IdCliente] [nvarchar](10) NULL,
[IdEmpleado] [nvarchar](3) NULL,
[FechaPedido] [datetime] NULL,
[FechaEntrega] [datetime] NULL,
[FechaEnvio] [datetime] NULL,
[IdDistribuidor] [nvarchar](3) NULL,
[Importe] [float] NULL
);
GO
CREACIÓN DE LA TABLA dm_producto:
IF OBJECT_ID('dbo.dm_producto') IS NULL
CREATE TABLE [dbo].[dm_producto](
[SK_IdProducto] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[IdProducto] [nvarchar](3) NULL,
[Descripcion] [nvarchar](255) NULL,
[IdProveedor] [nvarchar](3) NULL,
[IdCategoria] [nvarchar](3) NULL,
[Presentacion] [nvarchar](100) NULL,
[Precio] [float] NULL,
[Stock] [numeric](18, 0) NULL,
[Costo] [float] NULL
);
GO
CREACIÓN DE LA TABLA dm_proveedor:
IF OBJECT_ID('dbo.dm_proveedor') IS NULL
CREATE TABLE [dbo].[dm_proveedor](
[SK_IdProveedor] [nvarchar](3) NOT NULL PRIMARY KEY,
[RazonSocial] [nvarchar](255) NULL,
[Contacto] [nvarchar](100) NULL,
[Cargo] [nvarchar](100) NULL,
[Direccion] [nvarchar](100) NULL,
[Ciudad] [nvarchar](50) NULL,
[Region] [nvarchar](50) NULL,
[CodPostal] [nvarchar](50) NULL,
[Pais] [nvarchar](50) NULL,
[Telefono] [nvarchar](50) NULL,
[Fax] [nvarchar](50) NULL
);
GO
CREACIÓN DE LA TABLA DE HECHOS FACT_DETALLEPEDIDO:
IF OBJECT_ID('FACT_DETALLEPEDIDO') IS NULL
CREATE TABLE [dbo].[FACT_DETALLEPEDIDO](
[IdDetallePedido] INT NOT NULL,
[IdPedido] INT NOT NULL,
[IdProducto] NVARCHAR(3) NOT NULL,
[IdCategoria] NVARCHAR(3) NOT NULL,
[IdCliente] NVARCHAR(10) NOT NULL,
[IdDistribuidor] NVARCHAR(3) NOT NULL,
[IdEmpleado] NVARCHAR(3) NOT NULL,
[IdProveedor] NVARCHAR(3) NOT NULL,
[Cantidad] [numeric](18, 0) NULL,
[Descuento] [float] NULL,
PRIMARY KEY(
[IdDetallePedido],
[IdPedido],
[IdProducto],
[IdCategoria],
[IdCliente],
[IdDistribuidor],
[IdEmpleado],
[IdProveedor]
)
);
GO
ALTER TABLE FACT_DETALLEPEDIDO add constraint fkCategoria
foreign key (IdCategoria) references dm_categoria (SK_IdCategoria);
GO
ALTER TABLE FACT_DETALLEPEDIDO add constraint fkCliente
foreign key (IdCliente) references dm_cliente (SK_IdCliente);
GO
ALTER TABLE FACT_DETALLEPEDIDO add constraint fkDistribuidor
foreign key (IdDistribuidor) references dm_distribuidor (SK_IdDistribuidor);
GO
ALTER TABLE FACT_DETALLEPEDIDO add constraint fkEmpleado
foreign key (IdEmpleado) references dm_empleado (SK_IdEmpleado);
GO
ALTER TABLE FACT_DETALLEPEDIDO add constraint fkProducto
foreign key (IdProducto) references dm_producto (SK_IdProducto);
GO
ALTER TABLE FACT_DETALLEPEDIDO add constraint fkProveedor
foreign key (IdProveedor) references dm_proveedor (SK_IdProveedor);
GO
Para observar mejor los cambios, se hizo un nuevo diagrama
CARGANDO DATOS
GRÁFICA 1
GRÁFICA 2
GRÁFICA 3
GRÁFICA 4
GRÁFICA 5