Relaciones entre tablas en DAX – RELATED

En estos días estamos tratando temas del Lenguaje de expresiones DAX y su importancia en la creación de modelos de datos con PowerPivot desde Excel 2010 y Modelado Tabular de Analysis Services 2012.

Hoy iniciamos nuestro recorrido por funciones vinculadas al trabajo con relaciones entre tablas.

Como hemos visto antes, las relaciones entre tablas son una parte primordial del modelado de datos con PowerPivot o Modelo Tabular.

El primer aspecto, aquí lo tenemos resuelto, hay que garantizar que las tablas implicadas estén bien relacionadas. Para ello contamos con el grupo Relaciones de la ficha Diseño, con dos botones que nos permiten crear una nueva relación o administrar las relaciones existentes.

Este grupo está activo tanto para la vista Tablas como para la vista Diagrama. Desde Diagrama además, podemos crear, modificar y eliminar relaciones de forma gráfica, lo que es muy cómodo y conveniente.

Pues como ya tenemos un grupo de relaciones, vamos a comenzar a utilizarlas. Como indica el título, vamos a trabajar con la función RELATED(). Desde el punto de vista dimensional esta función nos permite de-normalizar atributos de dimensiones en una única dimensión sin copos de nieve. Entre otras ventajas, nos va a permitir crear una jerarquía de usuario natural dentro de la dimensión. Además, la función RELATED() permite acceder a cualquier columna de una tabla relacionada.

Si unimos los beneficios de esta función con las opciones de menú PowerPivot que nos permiten ocultar aquellas tablas y/o columnas que no serán vistas por el cliente final, entonces tenemos muchas ventajas.

Crear relaciones

En este caso no ha sido necesario, se han heredado de la Base de datos AdventureWorks de donde se importaron los datos. Como hemos visto antes, la tabla Producto toma la descripción de la subcategoría de la tabla Subcategoría, con quien está relacionada por la columna ProductSubcategoryID, luego la Subcategoría se relaciona con la Categoría por la columna ProductCategoryID.

Las columnas que se utilizan para establecer las relaciones no tienen que permanecer visibles para el cliente final. En nuestro caso no lo están, porque no aportan nada en el análisis. Lo importante: visibles o no, es que la relación se haya establecido correctamente y lo podemos ver desde las opciones del menú Relaciones y/o desde la propia columna involucrada, a través del icono que muestra que existe relación.

Crear columnas calculadas con RELATED()

Nuestra tarea es crear dos columnas calculadas en la tabla Producto que muestren ambas descripciones. Se va a cumplir todo lo visto antes.

Aquí les dejo un par de imágenes que muestran la selección de ambas columnas para las fórmulas.

El resultado es el siguiente

Ocultar columnas y tablas no necesarias para el cliente

A partir de este momento, tenemos dos columnas nuevas en la tabla Producto. Estas columnas son tan válidas como el resto de las columnas importadas, por lo que podemos prescindir en nuestro modelo, visible al usuario final, de las tablas Categoría y Subcategoría cuya única función era obtener estas columnas descriptivas.

Actualmente las tablas Categoría y Subcategoría presentan este aspecto en el modelo.

Como ya no son necesarias, las ocultamos y podemos incluso mover las fichas, de forma tal que las tablas ocultas queden al final.

Podemos ver el antes y el después de los campos y tablas visibles en la lista de campos de la tabla dinámica.

Sin dudas se trata de un modelo al que hemos eliminado el copo de nieve y hemos despejado al cliente que tiene que navegar a través de menos tablas y además, hemos preparado el terreno para crear jerarquías naturales al tener todos los niveles de jerarquía en la misma tabla. Son todo ventajas. Y todo gracias a las expresiones y funciones DAX.

En la próxima entrada continuaremos hablando de relaciones, esta vez nos apoyaremos en la función RELATEDTABLE(), del Lenguaje de expresiones DAX.

Tags: , , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: