PROBLEMA: Para los cubos realizados con el model_manager 903, todos los indicadores calculados construidos con el model manager no reflejan correctamente las dimensiones que fueron añadidas al cubo posteriormente a la creación del indicador calculado.


SOLUCION: El SCRIPT que se proporciona a continuación corrige el valor del campo dimensiones en la tabla SI_INDICADOR, solo se corrigen los cubos hechos con el modelo manager y únicamente se aplica la corrección a los indicadores calculados. El script consiste en dos partes:

  1. Query para determinar que cubos tienen el problema
  2. Script para corregir la tabla SI_INDICADOR de un cubo en especifico (se debe de modificar el parámetro Cla_concepto_Cubo sustituyéndolo con el valor de cla_concepto del cubo a corregir


NOTA: Es necesario grabar el cubo nuevamente una vez realizada la corrección para que la definición se mande correctamente a los servidores de BITAM CLOUD.


ADVERTENCIA: Solo es valido para los cubos hechos con el model manager 903


# FIX: Corrige campo DIMENSIONES de SI_INDICADOR
# Marzo 2021
# bitam.com

#Parte 1
#Determina cuales son los cubos que tienen el problema
SELECT*
FROM
(
SELECT a.cla_concepto AS ID_INTERNO, nom_concepto AS Cubo, COUNT(*) AS NumDimensionesTotales
FROM si_concepto a
JOIN si_cpto_llave b ON b.cla_concepto=a.cla_concepto
GROUP BY a.cla_concepto, nom_concepto
) Query1
JOIN
(
SELECT a.cla_concepto AS ID_INTERNO, nom_concepto AS Cubo, MIN(LENGTH(DIMENSIONES)) AS NumDimensiones
FROM si_concepto a
JOIN si_indicador b ON b.cla_concepto=a.cla_concepto
WHERE ES_ATRIBUTO=0 #Solo los indicadores calculados
AND RI_DEFINITION=6 #Solo para los cubos creados con el ModelManager 
GROUP BY a.cla_concepto, nom_concepto
) Query2 ON Query2.ID_INTERNO=Query1.ID_INTERNO
WHERE NumDimensionesTotales<>NumDimensiones
;
#Parte 2
#=========================================================
SET @CUBO = Cla_concepto_Cubo; #cla_concepto que corresponde al que se le hará la corrección
SET @CantidadRegistros = 0;
#Se obtiene la cantidad de dimensiones que tiene el cubo
SELECT COUNT(*) AS TotalCubo INTO @CantidadRegistros FROM SI_CPTO_LLAVE WHERE CLA_CONCEPTO=@CUBO
;

#Se genera el string correcto que debe de llevar el campo dimensiones
SELECT LPAD('',@CantidadRegistros,'1') INTO @Cadena
;
SELECT @CantidadRegistros,@Cadena
;
#Se actualiza el cubo
#NOTA: Es necesario grabar el cubo para que el proceso de actualización quede completo
UPDATE SI_INDICADOR 
SET DIMENSIONES=@Cadena 
WHERE 
ES_ATRIBUTO=0 
AND CLA_CONCEPTO=@CUBO
AND LENGTH(DIMENSIONES)<>@CantidadRegistros
;