Últimamente me he estado enfrentando en un cliente con problemas de rendimiento en Analysis Services donde el cubo OLAP en cuestión contenía dimensiones de tamaño medio (+ 1 millón de miembros).

Como siempre, uno de los requisitos básicos en todo proyecto SSAS es poder navegar de una manera fluida y rápida a través de nuestro cubo, tanto por Tablas Dinámicas en Excel como desde el propio Management Studio (SSMS). Y siempre queremos tener contento al cliente ¿verdad? 🙂

El problema viene cuando nos disponemos a navegar por el cubo y arrastramos por primera vez un miembro de esa dimensión sin tener ninguna medida a analizar. Nos encontramos con que tenemos que esperar un cierto tiempo hasta que SSAS nos lo muestra en la zona de la tabla donde lo hayamos arrastrado.

¿Y esto por qué pasa?

Nos podría parecer a primera vista que al no estar analizando ninguna medida esto debería ser inmediato, pero en realidad sí estamos analizando una medida: La medida por defecto del cubo. (Propiedad DefaultMeasure)

En nuestro caso para el cubo de ejemplo Adventure Works 2008 R2 (descargar) es [Measures].[Reseller Sales Amount],como podemos ver en las propiedades del cubo dentro del proyecto en el BIDS (Business Intelligence Development Studio):

Como el rendimiento de esta operación va a depender de cómo de optimizado esté el cruce entre nuestra dimensión y esa medida por defecto, lo que vamos a hacer va a ser a crear una nueva medida calculada en MDX para usarla por defecto como medida de nuestro cubo y donde el valor siempre va a ser NULL.

Por una limitación en esta propiedad sólo se pueden seleccionar medidas directas provenientes de nuestros grupos de medidas, pero esto podemos resolverlo añadiendo el siguiente código al principio de nuestro script MDX que encontramos en la opción Script View de la pestaña Calculations:

 

El resultado final mostraría nuestra dimensión al instante sin ningún miembro, pero lista para seguir navegando por nuestra tabla.

Si quisiésemos mostrar todos los miembros de la dimensión nos bastaría con activar la propiedad Show empty cells de nuestra tabla en Management Studio o la propiedad Show Items with no data on rows/columns de nuestra PivotTable si lo estamos visualizando desde Excel.

En nuestro cliente hemos pasado de tardar más de 5 minutos en tener algunas dimensiones listas en la tabla, a finalmente tenerlas en menos de 2 segundos.

 

De buenas a primeras puede parecer una mejora innecesaria, pero con este pequeño cambio daríamos mayor fluidez a nuestra navegación inicial y una confianza con nuestra arquitectura, ya que desde el principio de la navegación los datos van a mostrarse rápidamente a los ojos del usuario final y en ningún momento va a dudar de la potencia y rendimiento de nuestro cubo.