Hoy por la mañana revisábamos un indicador en Microsoft Analysis Services (AS) cuyo tiempo de respuesta al desglosarlo a nivel cliente era de varios minutos; finalmente lo dejamos en segundos.
La fórmula de dicho indicador era como esta:
iif( [Measures].[Ventas] = 0,0,1- ([Measures].[Ventas]/[Measures].[Costo])
La fórmula regresa un cero para todo aquello cuyo costo es cero. Cuando Artus lee el resul set que mostrará, por default se trae todos los valores NON_EMPTY (así es como le solicita los registros a AS: NON EMPTY). Para la fórmula anterior si el costo es cero la fórmula devuelve un cero; cero es NON_EMPTY por lo tanto AS lo incluye en el result set y Artus lo lee.
Por otra parte, Artus por default solo muestra aquellos valores del indicador que no son cero, hay que en propiedades de la tabla activar Mostrar Ceros.
¿Qué es lo que estaba pasando? Que el indicador tenía miles de registros con valor cero que como quiera se estaban calculando y además Artus los estaba leyendo, como por default no los mostraba (los ceros) nunca nos dábamos cuenta.
Dándonos cuenta de lo que estaba pasando, modificamos el indicador:
iif( [Measures].[Ventas] = 0,NULL,1- ([Measures].[Ventas]/[Measures].[Costo])
Al devolver un NULL, los AS toman este valor como EMPTY por lo que no se incluye en el result set y además Artus no lo lee. Resultado, ahora AS preparaba un result set mucho más pequeño (lo que le toma menos tiempo y menos memoria) y Artus solo lee los 10 o 20 registros con valor.
El tiempo de respuesta quedó en segundos.
Otro método para obtener lo mismo, es clic derecho sobre el cubo y en preferencias activar excluir ceros y nulos. Este método de “por la fuerza bruta” activa esto a nivel cubo.
Es mejor el primer método que este segundo. Por que este es global y ocultaría los ceros para todos los indicadores.


Comentarios recientes