Quiero que los filtros solo muestren aquellas dimensiones con movimientos.

9 09 2008

image

Por: Diana Luz Vazquez

Sí usted se preguntaba como hacerle para que Artus solo muestre en los filtros aquellos valores de las dimensiones que tengan información en la tabla de hechos, esto es de gran utilidad.

Cuando incluyo un filtro de dimensión, lo que se espera es que las opciones de valores de esa dimensión que se muestran en el filtro, sean solamente aquéllas para las que el cubo tiene datos (sobre todo para dimensiones con gran cantidad de elementos). De manera que si tengo 100 Sucursales en el CAT de ésa dimensión pero en el cubo realmente solo hay datos para 30 Sucursales, sólo quiero ver esas 30 sucursales como opción de elementos para seleccionar en el combo del filtro.

MenuCubo
Esto lo he conseguido utilizando la opción de Artus Administrador de ‘Indicador con datos para todas las dimensiones’. Para ello, lo que hago es identificar un indicador base del cubo (de entre los principales) que sabemos que siempre tiene valor. Si es un cubo de Ventas, probablemente el indicador idóneo sea ‘ImporteVta’ y así… si el cubo está distribuido, o sea que no puedo identificar 1 indicador que sé que tendrá datos para todo el cubo, lo que hago es crear uno que sea una especie de ‘Contador de Registros’ (normalmente lo incluyo directamente en la estrella como un Identity).
Finalmente lo que hago es agregar ese indicador en la definición del cubo como ‘Indicador con datos para todas las dimensiones’ (te incluyo una imagen). Lo que ocurre es que internamente en el query MDX, se valida con base en ese indicador para llenar los valores de los filtros de dimensión. Resultado: Cuando sincronices un Filtro de Dimensión con los objetos del escenario, los combos sólo mostrarán elementos de dimensión válidos (para aquellos en los que el cubo tiene datos) =D

IndDatosTodasDim
Ése indicador no tiene que ser visible en Artus Desktop, pues es sólo para uso interno

No estoy segura si también funciona para ROLAP. Lo que sí puedo decirte es que para cubos de Analysis Services, funciona muy bien y no se afecta en nada al performance de las consultas que genera el escenario.

Si, esto también funciona para los cubos ROLAP.

About these ads




Scripts para la Tabla de Tiempo

21 01 2008

Juan Ernesto Ramos Hernández nos envía un script para llenar la tabla de tiempo. Juan Ernesto reúne en una sola tabla la parte fecha y la parte hora de las dimensiones. Esperamos les sea de gran utilidad. Para contactarlo escribele a: JuanErnestoRamozHernandez

/*
  Llena la tabla de hora por minutos
  Autor: Juan Ernesto Ramos Hernández
  SQLServer 2005
*/

if exists(select name from sysobjects where name = 'Dim_HoraDia')
      DROP TABLE Dim_HoraDia
GO

CREATE TABLE Dim_HoraDia (
      HoraDia_id            int NOT NULL, -- Llave subrogada
      Minutos				int NOT NULL, -- Llave natural
      Hora12                varchar(5) NOT NULL, -- formato de hora de 12
      Hora24				varchar(5) NOT NULL, -- formato de hora de 24
      Meridiano             varchar(2) NOT NULL, -- AM o PM
)
GO

ALTER TABLE Dim_HoraDia
       ADD PRIMARY KEY (HoraDia_Id)
GO

SET LANGUAGE spanish
SET NOCOUNT ON

declare @hcount int
declare @fecha smalldatetime
declare @fechaMod smalldatetime
declare @Hora12 varchar(5)
declare @Hora24 varchar(5)

set @hcount=0
set @fecha = '1900-01-01 00:00' -- se usa la variable @fecha para sumarle en cada vuelta del ciclo un minuto

while @hcount < 1440 --1440 son el numero de minutos que tiene un dia completo
begin
  set @fechaMod = dateadd(mi,@hcount,@fecha)
  insert into Dim_HoraDia ( HoraDia_ID, Minutos, Hora12, Hora24, Meridiano)
  select case
           when datepart(hh,@fechaMod) < 10 and datepart(mi,@fechaMod) = 10 and datepart(mi,@fechaMod) < 10 then '1' + datename(hh,@fechaMod) + '0' + datename(mi,@fechaMod)
           when datepart(hh,@fechaMod) = 10 then '10' + datename(hh,@fechaMod) + datename(mi,@fechaMod)
           when datepart(hh,@fechaMod) >= 10 and datepart(mi,@fechaMod) >= 10 then '1' + datename(hh,@fechaMod) +  datename(mi,@fechaMod)
          end     as HoraDia_Id,
          @hcount as minutos,
          case
            when @hcount = 780 then convert(varchar(5),dateadd(hh,-12,@fechaMod),8)
          end     as Hora12,
          convert(varchar(5),@fechaMod,8) as Hora24,
          case
           when @hcount =  720 then 'PM'
          end as Meridiano

   set @hcount = @hcount + 1
end 





Cambiando las columnas CHAR a VARCHAR

2 01 2008

Pedro Sánchez nos muestra como cambiar el tipo de dato de las columnas CHAR a VARCHAR. Está para SQLServer ¿quién se anima para Oracle?

Se han fijado cuantos problemas se solucionan con convertir los tipos de datos char a varchar y quitarle los espacios al final? Algunos problema son que no filtra correctamente, no agrupa correctamente en las tablas, etc. Esto se debe en la gran mayoría de los casos a que por ejemplo se tiene la clave “A” y también la clave “A    “  (con espacios al final). El  usuario no ve la diferencia, pero por dentro si son distintas

Para solucionar esos problemas, en la base de datos del DWH Ejecuta este select :

 
select 
'Alter table '+ 
rtrim(sysobjects.name)+ 
' ALTER COLUMN ' + 
rtrim(syscolumns.name)+' 
varchar(' + cast ( syscolumns.length as varchar(5)) + ') 
go '  
 from 
syscolumns, sysobjects
where sysobjects.type = 'U' 
and  syscolumns.xtype = 175
and syscolumns.Id = sysobjects.Id
union
select 
'Update '+ 
rtrim(sysobjects.name)+ 
' SET ' + 
rtrim(syscolumns.name)+' = 
rtrim(ltrim(' + rtrim(syscolumns.name) + '))
go '  
 from 
syscolumns, sysobjects
where sysobjects.type = 'U' 
and  syscolumns.xtype = 175
and syscolumns.Id = sysobjects.Id
order by 1
  • Ejecuta los selects que están en el correo; esto te arrojara como resultado una serie de Alters y Updates
  • Selecciona todo el resultado
  • Copia el resultado

CharToVarchar1

  • Pega todos los Alter y updates copiados en el paso 3 en el área de ejecución

CharToVarchar2

  • Ejecuta

CharToVarchar3

Esto te hará unos Alter para cambiar las columnas Char a Varchar y les hará un trim para quitarle los espacios








Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 29 seguidores