Forum Discussion

a7024782's avatar
a7024782
Brass Contributor
Jul 13, 2023
Solved

Como crear una relacion 1:1 entre dos tablas en Excel 2016

Es posible crear una relación 1:1 entre dos tablas en Excel 2016, sea usando los asistentes que provee Excel o mediante código VBA?. Lo he intentado de diferentes formas y la aplicación siempre crea relaciones uno a varios, sin posibilidad de editarla para cambiarla a 1:1

Esta es la situación, la tabla Coins tiene el campo numérico IdCoin, con valores únicos que sirve para relacionar con la tabla Operaciones, hasta ese punto todo funciona; el problema se presenta cuando intento relacionar las tablas Operación (campo IdOperacion, numérico, valores únicos) con el campo IdOperacion (numérico, valores duplicados) de la tabla Análisis, al crear una consulta en ese escenario por cada registro de la tabla Operaciones que selecciono, me devuelve todos los registros de la Tabla Análisis, estén relacionados o no con el registro seleccionado. A modo de ejemplo, si selecciono el campo fecha en la tabla Operaciones y el campo tendencia de la tabla Análisis, me devuelve una fecha con las 7 opciones que tengo de tendencia, y eso por cada fecha de la tabla Operaciones. Lo que busco es que al seleccionar una fecha de la tabla Operaciones me devuelva el valor único registrado para esa fecha en la tabla análisis. Gracias de antemano por los comentarios

 

 

 

 

 

 

 

 

  • a7024782 

    Data model in Excel doesn't support bi-directional relationships (many-to-many and one-to-one). Moreover, such kind of relationship is not recommended to use in general.

    Alternatively you may create explicit measure like

    =CALCULATE(myAggregation, CROSSFILTER( Analysis[Id] ,Operations[Id], Both )) 

    Even better is to add bridge table with IDs only, hide Id both in Analysis and Operations and use it only from Bridge

2 Replies

  • a7024782 

    Data model in Excel doesn't support bi-directional relationships (many-to-many and one-to-one). Moreover, such kind of relationship is not recommended to use in general.

    Alternatively you may create explicit measure like

    =CALCULATE(myAggregation, CROSSFILTER( Analysis[Id] ,Operations[Id], Both )) 

    Even better is to add bridge table with IDs only, hide Id both in Analysis and Operations and use it only from Bridge

  • NikolinoDE's avatar
    NikolinoDE
    Gold Contributor

    a7024782 

    En Excel 2016, no es posible crear una relación directa 1:1 entre dos tablas usando los asistentes que proporciona Excel. Los asistentes de relación en Excel están diseñados para establecer relaciones uno a varios (1:N) o varios a varios (N:N) entre las tablas.

    Sin embargo, puedes lograr una relación 1:1 entre dos tablas utilizando código VBA. A continuación, te mostraré un ejemplo de cómo puedes hacerlo:

    1. Abre el Editor de Visual Basic presionando Alt + F11.
    2. Inserta un nuevo módulo desde el menú Insertar > Módulo.
    3. En el módulo recién creado, escribe el siguiente código VBA:

    vba code:

    Sub CrearRelacion1a1()
        Dim rngTabla1 As Range
        Dim rngTabla2 As Range
        Dim ws As Worksheet
        Dim relaciones As WorkbookConnection
        Dim relacion As WorkbookConnection
        
        'Especifica la hoja y el rango de la Tabla 1
        Set ws = ThisWorkbook.Sheets("Hoja1")
        Set rngTabla1 = ws.Range("A1:B10")
        
        'Especifica la hoja y el rango de la Tabla 2
        Set ws = ThisWorkbook.Sheets("Hoja2")
        Set rngTabla2 = ws.Range("A1:B10")
        
        'Crea la conexión entre las dos tablas
        Set relaciones = ThisWorkbook.Connections
        Set relacion = relaciones.Add2("Relacion1a1", "1 a 1")
        relacion.Add(rngTabla1, rngTabla2)
        
        'Actualiza la conexión
        ThisWorkbook.RefreshAll
    End Sub
    1. Asegúrate de reemplazar "Hoja1" y "Hoja2" con los nombres reales de las hojas que contienen las tablas.
    2. Ajusta los rangos "A1:B10" para que coincidan con los rangos reales de tus tablas.
    3. Ejecuta el código presionando F5.

    Este código creará una conexión entre las dos tablas especificadas, estableciendo una relación 1:1. Asegúrate de tener los datos correctamente organizados en las tablas para que la relación funcione correctamente.

    Es importante destacar que, aunque puedes establecer la relación 1:1 mediante código VBA, debes asegurarte de que los datos en las tablas cumplan con las condiciones necesarias para una relación 1:1. Es decir, cada valor en la columna que se utiliza para la relación debe ser único en ambas tablas.

    Como nadie me ha respondido, ingresé tu pregunta en varias IA. El texto y los pasos son el resultado de varias IA juntas.

     

    ¡Mis respuestas son voluntarias y sin garantía!

     

    Espero que esta información sea útil y te ayude a lograr tu objetivo.

Resources