Apuntes Técnicos
Ejemplo de
automatización de cargas en Cognos DecisionStream
Problema:
Se necesita cargar la información que no este en la tabla de hechos
basándose en fechas de carga que pueden servir para la automatización de cargas diarias
o para recargas de información.
Solución:
Se tienen 2 tablas en la base de datos para el control de las
cargas.
DM_LoadingDates - Donde se localiza la fecha inicial
Initial_Loading_Date y final Finish_Loading_Date de la carga y los
diferentes rubros Information_Type que se requieran cargar.
DM_LoadingDates_Log - Donde se lleva el control del inicio y fin de las cargas por
día. Incluye los campos "Log_Date", que contiene la fecha y hora del comienzo o
terminación de la carga y "Log_Description", donde se describe la terminación
o comienzo de las cargas con su fecha de inicio y fin.
JOBSTREAM
Este job llevara a cabo la automatización de las cargas con la periodicidad que se
requiera, además se puede utilizar para recargas de información.
Primero se declaran las variables de fecha inicial (Initial_Loading_Date) y de fecha final
(Finish_Loading_Date) con Type de CHAR(10) en las propiedades del
jobstream.
Se realiza un job con los
componentes:


|
Procedure1
Descripción:
v Obtiene
la fecha inicial (Variable $Initial_Loading_Date) y final (Variable $Finish_Loading_Date)
de la carga.
v Inserta
un registro en una tabla de Log´s (DM_LoadingDates_Log) para tener documentado la fecha y
hora del comienzo de la carga.
Acción:
Se
asigna el valor de la variable $Initial_Loading_Date tomado del campo "Initial_Loading_Date"
de la tabla de "DM_LoadingDates
$Initial_Loading_Date
:= LookUp('ConnectionName',Concat('SELECT "Initial_Loading_Date" FROM
"DM_LoadingDates" WHERE
"Information_Type"=',char(39),'Rubro1',char(39)));
Se
asigna el valor de la variable $Finish_Loading_Date tomado del campo "Finish_Loading_Date"
de la tabla de "DM_LoadingDates
$Finish_Loading_Date
:= LookUp('ConnectionName',Concat('SELECT "Finish_Loading_Date" FROM "DM_LoadingDates" WHERE
"Information_Type"=',char(39),'Rubro1',char(39)));
Si
no tiene valor de fecha final $Finish_Loading_Date se le pone la fecha de ese día
IF
$Finish_Loading_Date = '' THEN $Finish_Loading_Date :=
ToChar('{$DS_RUN_TIMESTAMP}','mm/dd/yyyy');
Para
evitar duplicidad se pueden borrar los datos que hubieran existentes entre la fecha
inicial y final, con la instrucción Sql(' ConnectionName ', 'DELETE FROM ...') o se puede
usar en el siguiente Build el Refresh Type de UPDATE/INSERT, al
cual se le da una llave y si la encuentra actualiza el registro y si no la encuentra
inserta el registro.
Se
inserta un registro en la tabla donde se lleva el control del inicio y fin de las cargas
(DM_LoadingDates_Log) para indicar que empieza la carga
Sql('ConnectionName',Concat('INSERT
INTO "DM_LoadingDates_Log"("Log_Date","Log_Description")
VALUES (',char(39),ToChar('{$DS_RUN_TIMESTAMP}','mm-dd-yyyy
hh:mm:ss'),char(39),',',char(39),'Empieza la carga del Modelo de Rubro1 del día ', $Initial_Loading_Date,'
al día ',$Finish_Loading_Date,char(39),')')); |
|

|
Build v Build
que extrae la información de la tabla fuente de origen de Rubro1 a la tabla de destino,
tomando la fecha inicial ($Initial_Loading_Date) y final ($Finish_Loading_Date) de carga,
obteniendo estos valores del procedimiento anterior, para evitar duplicidad se puede usar
en el Build el Refresh Type de UPDATE/INSERT.
Ejemplo:
SELECT
FROM
Tabla_Fuente WHERE
Fecha_Rubro1
>= '{$Initial_Loading_Date}'
AND Fecha_Rubro1 <= '{$Finish_Loading_Date}' |
|
 |
Procedure2 Descripción:
v Inserta
un registro en una tabla de Log´s DM_LoadingDates_Log para tener documentado
la fecha y hora del termino de la carga.
v Obtiene
la fecha inicial de carga para Rubro1, para la próxima vez que se ejecute la
automatización.
v La
fecha inicial se asigna obteniendo la fecha máxima de la tabla de hechos de Rubro1 y se
actualiza en la tabla de DM_LoadingDates, que es de donde se toma la fecha
inicial al principio de la automatización y se deja la fecha final en blanco. Al
principio de la automatización si no encuentra la fecha final le pone la fecha de ese
día.
Acción:
Se
inserta un registro en la tabla donde se lleva el control del inicio y fin de las cargas
DM_LoadingDates_Log para indicar que termina la carga
Sql('ConnectionName',Concat('INSERT
INTO "DM_LoadingDates_Log"("Log_Date","Log_Description")
VALUES (',char(39),ToChar('{$DS_RUN_TIMESTAMP}','mm-dd-yyyy
hh:mm:ss'),char(39),',',char(39),'Termina la carga del Modelo de Rubro1 del día ',$Initial_Loading_Date,'
al día ',$Finish_Loading_Date,char(39),')'));
Se
asigna el valor de la variable $Initial_Loading_Date
$Initial_Loading_Date:=
LookUp('ConnectionName','SELECT max("OrderDate") FROM "Orders"');
Se
asigna el valor de la variable $Finish_Loading_Date
$Finish_Loading_Date:=
'';
Se
actualizan los campos de "Initial_Loading_Date" y
Finish_Loading_Date" de la tabla de "DM_LoadingDates"
Sql('ConnectionName',Concat('UPDATE
"DM_LoadingDates" SET
Initial_Loading_Date=',char(39),$Initial_Loading_Date,char(39),',
Finish_Loading_Date=',char(39),$Finish_Loading_Date,char(39),' WHERE
"Information_Type"=',char(39),'Rubro1',char(39))); |
|
|
La
línea de comando que aparece al ejecutarse el job se puede poner en un archivo .BAT, el
cual puede ser llamado desde Scheduler. |
|
Si desea aprender mas sobre
DecisionStream tenemos el curso de DecisionStream
Administration.
(Desarrollado
por PROFIN México) |