En los últimos meses me he dado cuenta que es frecuente encontrar clientes donde el mismo atributo aparece varias veces dentro de una misma dimensión. Los motivos que se argumentan son varios, pero las consecuencias no están muy claras en todos los casos.

Las situaciones que más he visto son las siguientes:

  • El atributo se duplica tantas veces como es usado en las distintas jerarquías que se definen dentro de la dimensión. Esta práctica realmente debe ser eliminada, no es necesario duplicar el atributo, ya que los niveles de las jerarquías pueden ser renombrados sin afectar al nombre del atributo que las generan. Además, si el atributo duplicado es la clave de la tabla, esto puede afectar drásticamente al tiempo de procesamiento de la dimensión ya que SSAS consultará n-veces la tabla completa (una por cada una de las veces que tengamos el atributo duplicado en nuestra dimensión).
  • Definir una jerarquía adicional de un solo nivel por cada atributo que se define en la dimensión. En esta situación el tiempo de procesamiento no se ve afectado por accesos innecesarios a la base de datos, pero si por la generación de estructuras jerárquicas adicionales innecesarias en muchos casos (ej: Dimensión Cliente donde generamos una jerarquía para el atributo teléfono). ¿Qué beneficio aporta esta práctica?
    • Desde el punto de vista de usuario, la etiqueta del elemento All deja de ser la misma etiqueta del elemento All de la dimensión y pasa a tener su propia etiqueta. Ej: Atributo Edad dentro de la dimensión Cliente, podemos definir un elemento ‘Todas las Edades’ para ese atributo en lugar de utilizar el elemento ‘Todos los clientes’. Esto sucede porque se está generando una jerarquía independiente para el atributo.
    • Desde el punto de vista de rendimiento, el atributo entra dentro de los elementos candidatos a ser utilizados dentro de la agregación del cubo. Con este punto hay que tener especial cuidado, ya que lo que aparentemente parece una ventaja, puede volverse en nuestra contra. SSAS determina si un atributo se va a usar como parte de una agregación en función del numero de valores distintos que se estima para ese atributo, si el número es muy elevado, no se va a usar para agregar aunque generemos una jerarquía independiente, pero si está en un rango medio de valores puede ser uno de los atributos elegidos para generar la agregación y puede afectar al rendimiento de procesamiento del cubo. (Se puede encontrar más detalles sobre cómo se eligen los atributos para generar agregados en la guía de mejora de rendimiento para SSAS)
  • Se habilita la propiedad AttributeHierarchyEnable para todos los atributos. ¿Realmente el usuario va a analizar la información por todos los atributos de la dimensión? Debemos evitar habilitar esta propiedad cuando el atributo no vaya a ser utilizada como elemento de filtrado o agrupación. Solo hay una excepción, si necesitamos mostrar ese atributo en los resultados de una acción drillthrough, entonces dicha propiedad debe estar habilitada para que podamos incluirla dentro del conjunto de datos a devolver.