Una vez finalizado el proceso de carga de la tabla de hechos, descrito en la anterior entrega, con el presente artículo de esta serie completamos la fase dedicada a las operaciones ETL de nuestro sistema de información, realizadas mediante el paquete SSIS.

La tarea que actualmente necesitamos realizar, consiste en la inserción, sobre la tabla Fecha, de los registros con las fechas correspondientes al año del archivo que hayamos cargado. Con tal fin, utilizaremos el siguiente procedimiento almacenado, en el que también incluiremos un parámetro con el año para el que deberán crearse las fechas.

CREATE PROCEDURE spCargarFechasAnualidad
@sAnualidad varchar(4)
AS
BEGIN
 
DECLARE @dtFechaInicio AS date;
DECLARE @dtFechaFin AS date;
DECLARE @nNumDiasAnualidad AS int;
 
SET @dtFechaInicio = @sAnualidad;
SET @dtFechaFin = EOMONTH(@dtFechaInicio,11);
SET @nNumDiasAnualidad = DATEDIFF(day,@dtFechaInicio,@dtFechaFin);
 
WITH 
cteNumeros AS (
    SELECT 0 AS Numero
 
    UNION
 
    SELECT
    ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Numero
    FROM sys.all_columns
),
cteFechas AS (
    SELECT
    CONVERT(date,DATEADD(day,Numero,@dtFechaInicio)) AS Fecha
    FROM cteNumeros
    WHERE Numero BETWEEN 0 AND @nNumDiasAnualidad
)
INSERT INTO Fecha (
Fecha,
AnualidadID,
Anualidad,
MesID,
Mes,
MesNombre
)
SELECT 
Fecha,
YEAR(Fecha),
FORMAT(Fecha,'yyyy'),
MONTH(Fecha),
FORMAT(Fecha,'MM'),
FORMAT(Fecha,'MMMM','es-ES')
FROM cteFechas;
 
END

 

El código del anterior procedimiento calcula, en primer lugar, las fechas del primer y último día del año, así como la cantidad de días del mismo. A continuación, volveremos a ayudarnos de la técnica de presencia de filas para construir, dentro de una expresión de tabla (cteNumeros), mediante la tabla del sistema sys.all_columns, una lista de números que combinaremos con una segunda expresión de tabla (cteFechas), en la que generaremos las fechas correspondientes al año, que finalmente insertaremos en la tabla Fecha.

Como aspecto destacable en el código de estas expresiones de tabla, en la lista de números se incluye el cero, ya que, en caso contrario, en el momento de generar las fechas mediante la función DATEADD, la primera fecha del año no sería creada.

Por último, añadiremos al contenedor Foreach Loop una tarea de tipo Ejecutar SQL, a la que daremos el nombre sql_CargarFechasAnualidad, y que configuraremos en su ventana de edición, para que realice la llamada a este procedimiento almacenado, pasándole también como parámetro la variable sAnualidad, de manera que el procedimiento pueda saber el año para el que debe generar las fechas.

 

 

Como siguiente paso, ejecutaremos el paquete pckImportarDatos, para realizar la carga de datos en las tablas de la base VentasAnuales. Finalizada la ejecución, si todo ha funcionado satisfactoriamente, el diseñador del paquete de Visual Studio mostrará sus elementos con el indicador de ejecución correcta.

 

Llegados a este punto, cerraremos el proyecto SSIS, finalizando así la parte del desarrollo relacionada con las operaciones de carga y depuración de los datos de origen. El próximo artículo de esta serie estará dedicado a la creación del modelo tabular, tomando como punto de partida los datos proporcionados por este paquete SSIS que hemos construido.