Relaciones 1 a N en Excel y Power BI
El objetivo de este artículo es aclarar el concepto de relaciones «1 a N» entre tablas, a propósito de su relevancia en la creación de reportes en Power Pivot Excel y Power BI. Se asume que el lector sabe usar tablas dinámicas.
Gran parte de los desarrollos en Power BI y Power Pivot requieren comprender este tipo de relación denominada “1 a N”. De hecho, tópicos más avanzados como “Propagación de filtros”, “Tipos de combinación (Join)”, “Funciones DAX”, entre otros, asumen que este tipo de relación se entiende. De lo contrario, tarde o temprano llegaremos al punto de ver resultados en nuestros reportes que no sabremos como explicar.
Contexto previo: reportes Excel basados en distintas tablas
Sin la necesidad de entender el concepto de relación “1 a N”, el cual será explicado mas adelante, en Excel es común crear reportes (tablas dinámicas) basados en distintas tablas de datos. Un proceso resumen de creación de este tipo de reporte sería el siguiente:
- Fuentes de datos: Una o más tablas de datos que descargamos desde algún sistema y/o base de datos. En nuestro contexto, estas tablas tienen alguna relación entre ellas.
- Consolidación de datos: Una sola gran tabla que consolida todos los datos necesarios provenientes de distintas tablas. Para esto es común que usemos funciones como BUSCARV o funciones como SUMAR.SI.CONJUNTO.
- Reportes: Una o más tablas dinámicas creadas a partir de nuestra tabla de datos consolidada.
En resumen, cuando necesitamos crear un reporte que ocupe datos alojados en distintas tablas, buscamos juntar todo lo necesario en una sola gran tabla consolidada a partir de la cual crear este reporte.
Para entenderlo mejor, veamos un ejemplo donde buscamos crear un reporte que muestre los movimientos del mes por producto.
- Fuente de datos: Contamos con 2 tablas descargadas desde SAP (ERP). Una tabla es “Productos” que muestra los productos existentes (incluye la categoría asociada a cada producto y la unidad de negocio a la cual pertenecen), y otra tabla es “Movimientos”, que muestra las salidas y entradas de estos productos.
- Consolidación de datos: Llevaremos todos los datos necesarios de “Movimientos” hacia “Productos”. En nuestro caso llevaremos los movimientos del mes y la fecha de último movimiento a la tabla “Productos”. De esta manera, creamos nuestra tabla consolidada con todo lo necesario para crear nuestros reportes.
- Reporte: Ahora que la tabla “Productos” tiene todo lo que necesitamos, crearemos el reporte a partir de ella. En la siguiente figura se muestra un reporte con los movimientos por unidad de negocio y producto, además de la última fecha de movimiento.
Este tipo de ejercicios es un patrón bastante común al lidiar con análisis que dependen de datos alojados en distintas tablas. A continuación, veremos cómo lidiar con este tipo de casos en Power Pivot y Power BI, donde si será necesario dominar el concepto “1 a N” a la hora de trabajar con distintas tablas relacionadas.
Relaciones 1 a N: reportes Power Pivot y Power BI basados en distintas tablas
En Power Pivot y Power BI conocer el significado de una relación “1 a N” es una obligación para crear reportes efectivos y en términos prácticos implica inicialmente dejar de crear la “gran tabla consolidada” (mencionada anteriormente) y empezar a crear relaciones entre tablas de una forma distinta. En particular, el problema recién visto en Excel de productos y sus movimientos se abordaría de una manera diferente en el mundo de Power Pivot y Power BI, creando un reporte (tabla dinámica) en base a la creación de una relación “1 a N” entre ambas tablas (“Productos” y “Movimientos”) sin la necesidad de crear una “tabla consolidada”, lo cual se aprecia en la siguiente figura.
¿Cómo interpretamos esta relación llamada “1 a N” (también llamada “1 a muchos”)? Para eso debemos entender los siguientes conceptos:
- Columna en común: Para que exista una relación entre 2 tablas “1 a N”, debe existir una columna en común entre ambas tablas (no importa que no se llamen igual, solo importa que representen lo mismo). En nuestro ejemplo, la columna en común es “IDProducto”. Además, esta columna en común tiene un “rol” distinto en cada una de las 2 tablas relacionadas:
- Clave primaria: En una de las 2 tablas esta columna en común debe tener valores únicos (sin duplicados). A este tipo de columna se le denomina “clave primaria” y a la tabla que la contiene se le llama “Tabla lado 1”. En nuestro ejemplo, esta columna es “IDProducto” contenida en la tabla “Productos”.
- Clave foránea: En la otra tabla relacionada, la columna en común si puede tener valores duplicados. A este tipo de columna se le denomina “clave foránea” y a la tabla que la contiene se le llama “tabla lado N”. En nuestro ejemplo, esta columna es “IDProducto” contenida en la tabla “Movimientos”.
- Clave primaria: En una de las 2 tablas esta columna en común debe tener valores únicos (sin duplicados). A este tipo de columna se le denomina “clave primaria” y a la tabla que la contiene se le llama “Tabla lado 1”. En nuestro ejemplo, esta columna es “IDProducto” contenida en la tabla “Productos”.
- Interpretación de relación: Considerando la columna en común, lo primero a notar es que este tipo de relación nos permite en definitiva vincular filas de una tabla con filas en la otra tabla. La siguiente figura, nos destaca por color las filas que se vinculan en ambas tablas dada la columna en común “IDProducto”. A partir de esto, lo próximo es entender que podemos interpretar esta relación de 2 formas.
- Interpretación 1 a N: Cualquier fila en “tabla lado 1” se relaciona con N filas en “tabla lado N”. En nuestro ejemplo, cualquier fila de la tabla “Productos” se relaciona con “N (1 o más)” filas en la tabla “Movimientos”.
- Interpretación N a 1: Cualquier fila en “tabla lado N” se relaciona con 1 fila en “tabla lado 1”. En nuestro ejemplo, cualquier fila de la tabla “Movimientos” se relaciona con 1 fila en la tabla “Productos”.
- Interpretación 1 a N: Cualquier fila en “tabla lado 1” se relaciona con N filas en “tabla lado N”. En nuestro ejemplo, cualquier fila de la tabla “Productos” se relaciona con “N (1 o más)” filas en la tabla “Movimientos”.
Bajo estos fundamentos, llamamos a una relación entre 2 tablas “1 a N” cuando cada fila de la “tabla lado 1” se relacionada con “N (1 o muchas)” filas en la “tabla lado N” considerando que existe una columna en común en ambas tablas. La “tabla lado 1” debe contener una clave primaria (valores únicos) y la “tabla lado N” debe contener una clave foránea (valores duplicados permitidos) en este tipo de relación. Si bien existen otro tipo de relaciones, como por ejemplo “N a N”, el tipo de relación “1 a N” es por lejos la más usada y necesaria para crear reportes de manera efectiva.
Agregando una tercera tabla
Hasta este punto solo hemos trabajado con 2 tablas, pero en la práctica trabajaremos con muchas más. Para considerar estos casos, agregaremos a nuestro ejemplo la tabla “Categoría” que muestra las categorías de productos existentes (cada categoría agrupa distintos productos).
Esta tabla de “Categoría” se relacionada 1 a N con la tabla de “Productos” dado que:
- “IDCategoria” actúa como columna en común en ambas tablas (tienen el mismo nombre por simplicidad).
- “IDCategoria” es clave primaria en tabla “Categoria” (valores únicos en esta columna).
- “IDCategoria” es clave foránea en tabla “Productos” (pueden duplicarse valores en esta columna).
Dicho esto, la tabla “Categoria” actúa como “tabla lado 1” y la tabla “Productos” actúa como “tabla lado N”. Si relacionamos las 3 tablas vistas, terminaremos con el siguiente esquema:
De este último caso se concluye algo importante: una misma tabla puede actuar como “tabla lado 1” y “tabla lado N”, y esto depende de la tabla con la cual se relacione. En nuestro ejercicio, la tabla “Productos” actúa como “tabla lado 1” al relacionarse con la tabla “Movimientos”, pero actúa como “tabla lado N” al relacionarse con la tabla “Categoria”. Si seguimos agregando tablas, el proceso de análisis será el mismo, siempre analizando relaciones entre 2 tablas.
Comentarios finales
Entender cómo funcionan las relaciones “1 a N” es un elemento básico a la hora de enfrentar escenarios reales de reportabilidad. A partir de esto, podemos seguir construyendo las bases necesarias para no encontrarnos con sorpresas a la hora de ver resultados y en definitiva para crear reportes mucho más efectivos.