Jul 13 2023 01:35 PM
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
Jul 17 2023 05:42 AM
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:
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
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.
Jul 17 2023 08:02 AM
SolutionData 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
Jul 17 2023 08:02 AM
SolutionData 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