Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
DirectQuery
Helper I
Helper I

¿Detectar automáticamente la cardinalidad de una a una relaciones de tablas directQuery de SQL Server?

¿Cómo podemos configurar tablas en una base de datos de SQL Server para que Power BI detecte automáticamente la cardinalidad de una a una relaciones con o sin la dirección del filtro cruzado?

Podemos obtener uno a muchos o muchos a uno agregando claves principales y claves externas, pero no podemos obtener una a una relaciones.

Necesitamos una a una relaciones para poder mostrar columnas de las tres tablas siguientes.

- Los clientes de la tabla tienen CustomerId como clave principal
- Table FoodOrders tiene CustomerId como clave extranjera
- Table DrinkOrders tiene CustomerId como clave extranjera

Solo podemos mostrar columnas de Customers y FoodOrders o DrinkOrders.

20 REPLIES 20
v-xicai
Community Support
Community Support

Hola @DirectQuery ,

¿Tienen sentido las sugerencias de los ingenieros? Si es así, marque amablemente la respuesta adecuada como una solución para ayudar a otros que tienen el problema similar y cerrar el caso. Si no, avísame y trataré de ayudarte más.

Saludos

Amy

Las sugerencias de los ingenieros no resuelven el problema.

@DirectQuery

De acuerdo, bien.

¿Puede ampliar exactamente lo que espera lograr (dada la estructura de su modelo y datos)?





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Tome estas tres tablas de SQL Server DirectQuery cargadas con las relaciones detectadas como uno a uno.

CustomeridNombre
1John
2Joe
3María

CustomeridFoodOrderIdvíveres
111Alimentos11
222Alimentos22
333Alimentos33

CustomeridDrinkOrderIdBeber
144Bebida44
255Bebida55
366Bebida66

Mostrar esto en un informe.

CustomeridNombreFoodOrderIdDrinkOrderIdvíveresBeber
1John1144Alimentos11Bebida44
2Joe2255Alimentos22Bebida55
3María3366Alimentos33Bebida66

@DirectQuery

Vea si esto funciona:

Crossjoin.JPG





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






amitchandak
Super User
Super User

@DirectQuery , Puede unir al Cliente con pedidos de alimentos y pedidos de bebidas y analizar los datos juntos.

Además, supongamos que toma una columna no resumida de pedidos de alimentos y el identificador de cliente del cliente, puede tomar cualquier agregado de pedidos de bebidas

@amitchandak, cuando tengo una tabla con campos de Customers y FoodOrders, Power BI me da este error si agredo campos de DrinkOrders.

No se pueden determinar las relaciones entre los campos

No se pueden mostrar los datos porque Power BI no puede determinar la relación entre dos o más campos.


@amitchandak escribió:

@DirectQuery, Puede unir al Cliente con pedidos de alimentos y pedidos de bebidas y analizar los datos juntos.

Además, supongamos que toma una columna no resumida de pedidos de alimentos y el identificador de cliente del cliente, puede tomar cualquier agregado de pedidos de bebidas




@DirectQuery

En los objetos visuales, debe usar los campos de la tabla Customery, a continuación, agregar los campos o medidas de las otras tablas.
Si no utiliza el dield de la Tabla del Cliente para "puentear" los otros 2, obtendrá el error





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






@PaulDBrown

Aparece el error si los clientes son uno a varios con FoodOrders y DrinkOrders.

No obtengo el error si los clientes son uno a uno con FoodOrders y DrinkOrders.

Si tengo 100 tablas de pedidos, no quiero cambiar manualmente las relaciones de uno a varios a uno a uno.

Power BI detecta automáticamente uno a varios, pero no puedo conseguir que detecte automáticamente las relaciones uno a uno de las bases de datos de SQL Server.

¿Qué son las tablas de dimensiones?


@PaulDBrown escribió:

@DirectQuery

En los objetos visuales, debe usar los campos de la tabla Customery, a continuación, agregar los campos o medidas de las otras tablas.
Si no utiliza el campo de la tabla de clientes para "puentear" los otros 2, obtendrá el error.
Si tiene otros campos comunes a FoodOrders y DrinkOrders (por ejemplo, un campo de fecha, código postal, etc... también debe crear tablas de dimensiones para ellos y vincularlas en una relación de uno a varios con ambas tablas de hechos mediante los campos comunes.


@DirectQuery

Uno a uno está bien: solo significa que ambas tablas tienen valores únicos. Así que usted puede tener relaciones que son uno-a-uno o uno-a-muchos.

Lo que debe evitar a toda costa son las relaciones de varios a varios, ya que pueden causar estragos en los cálculos.

Las tablas de dimensiones tienen valores únicos de un campo determinado (y pueden tener más de un campo) que, a continuación, se utiliza para crear una relación con otras tablas. Estas tablas de dimensiones hacen que el modelo sea eficaz y se utilizan para segmentaciones de datos. filtros, expresiones de filtro en medidas....





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Queremos mostrar los campos de la tabla Clientes y varias tablas De pedido sin cambiar manualmente las relaciones a uno a uno.

Power BI solo detecta automáticamente uno a varios y uno a varios nos da errores.

¿Hay alguna manera de detectar automáticamente uno a uno?

¿Hay alguna manera de usar relaciones de uno a varios para mostrar campos de la tabla Customers y varias tablas Order?


@PaulDBrown escribió:

@DirectQuery

Uno a uno está bien: solo significa que ambas tablas tienen valores únicos. Así que usted puede tener relaciones que son uno-a-uno o uno-a-muchos.

Lo que debe evitar a toda costa son las relaciones de varios a varios, ya que pueden causar estragos en los cálculos.

Las tablas de dimensiones tienen valores únicos de un campo determinado (y pueden tener más de un campo) que, a continuación, se utiliza para crear una relación con otras tablas. Estas tablas de dimensiones hacen que el modelo sea eficaz y se utilizan para segmentaciones de datos. filtros, expresiones de filtro en medidas....


@DirectQuery

En primer lugar, debe tener cuidado de confiar en la detección automática de relaciones de tabla: es posible que haya algunas sorpresas o relaciones creadas entre campos que no son "correctos" o la relación deseable.

"Power BI solo detecta automáticamente uno a varios y uno a varios nos da errores."

¿En qué sentido te da errores una relación de uno a varios?





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






- Los clientes son uno a varios para FoodOrders

- Los clientes son uno a varios para DrinkOrders

- Informe de la tabla visual contiene campos de clientes y FoodOrders

En la ver anterior, Power BI muestra un error siguiente al agregar campos de DrinkOrders a la tabla visual de informe.


No se pueden determinar las relaciones entre los campos

No se pueden mostrar los datos porque Power BI no puede determinar la relación entre dos o más campos.

@DirectQuery

¿Puede mostrar la vista de modelo para las tablas afectadas + un ejemplo del objeto visual y especificar qué campos está utilizando y desde qué tablas?

Si el modelo está configurado correctamente, no recibirá este mensaje. Depende de las tablas de puente (tablas de dimensiones) que tiene que relacionar los campos,

Si intenta crear un objeto visual que no incluya campos de tablas de puente/dimensión, obtendrá este error.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






No tengo una tabla de dimensiones. Sólo tengo tres mesas.

¿Qué debe tener la tabla de dimensiones para conectar a los clientes uno a varios con FoodOrders y DrinkOrders?

@DirectQuery

Puede que estemos teniendo un problema con la terminología.
Una tabla de dimensiones, o tabla de búsqueda, es una tabla que contiene al menos un campo con valores únicos que está vinculado a tablas de hechos (donde el mismo campo tiene varias instancias de los mismos valores) mediante una relación de uno a varios (o uno a uno). A veces, estas tablas de dimensiones se denominan "tablas de puente" porque se utilizan para crear un "puente" entre dos tablas que contienen un campo común.
Estos puentes/dimensiotables se utilizan en segmentaciones, filtros, medidas, etc. para habilitar el filtro conext necesario para permitir medidas que comparan valores de diferentes tablas (por ejemplo, ventas de una tabla frente a destino desde otra tabla mediante la tabla "tabla puente"/dimensión de "cliente".

Los campos de estas tablas Bridge/Dimension son el "enlace" entre las tablas de hechos. Sin ellos, los objetos visuales representarán el mensaje de error que está viendo (a menos que sus medidas incluyan una expresión como TREATAS en la expresión de filtro, pero debe ser un plan "b" o utilizarse si no se puede establecer una relación mediante una "tabla de puentes" - pero ignore este comentario entre corchetes ya que estamos buscando una solución para el propio modelo)

Como mencioné en mi publicación anterior, ¿puede publicar una imagen de su modelo (tablas relevantes) y qué campos está utilizando para crear su objeto visual?





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Solo tengo tres tablas de la base de datos de SQL Server.

- Clientes

- FoodOrders

- DrinkOrders

DirectQuery_0-1601984845906.png

No hay error al hacer clic en los campos de la segunda tabla.

DirectQuery_1-1601984899967.png

Aparece un error al hacer clic en un campo de la tercera tabla.

DirectQuery_2-1601984926338.png

@DirectQuery

La pregunta es ¿por qué necesita agregar los campos CustomerID de sus "Tablas de hechos" (es decir, las tablas FoodOrder y DrinkOrder)?

Una vez que tenga la tabla dimension (su tabla "Clientes")), solo utilice el campo (Customers[CustomerID]) de esta tabla en el objeto visual (no necesita los campos customerID de otras tablas).

El campo Customers[CustomerID] del objeto visual filtrará las filas de cada tabla de hechos para devolver los valores correspondientes a otras columnas que incluya en el objeto visual. No es necesario agregar las columnas CustomerID de las tablas de hechos)





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Aparece el error cuando agredo cualquier columna. No importa qué columna agredo.

Estoy agregando campos CustomerID como una prueba para ver si obtengo el error.

@DirectQuery

Ok, veo lo que estás consiguiendo (he creado una muestra PBIX). Lamento mi confusión.

Aparece el error al agregar columnas de las tablas sin una agregación. Esto se debe a que la estructura de los datos no establece una relación entre cada columna (comida y bebida) para las tablas de hechos (son ocurrencias independientes). A menos que tenga un campo que establezca "qué bebida se pidió con cada alimento" (un identificador de pedido, por ejemplo), el objeto visual no puede establecer la relación entre las dos columnas, por lo tanto, obtiene el error.

1) Puede forzar una combinación "artificial" (es decir, representar las posibles combinaciones de alimentos y bebidas para cada cliente) ya sea fusionando las tablas en Power Query o creando una medida mediante la función CROSSJOIN (puede aplicar esta medida en el panel de filtro del objeto visual).

Crossjoin = CALCULATE(
                DISTINCTCOUNT(Customers[CustomerID]), 
                        CROSSJOIN(FoodOrders, DrinkOrders))

Result.JPG

Pero como digo, esto es simplemente una representación de las posibles combinaciones

2) Si desea ver la lista exacta para cada cliente, cree una nueva tabla de dimensiones (la he llamado "Tipo") uniéndose a los campos de alimentos y bebidas:

Type = UNION(VALUES(FoodOrders[Food]), VALUES(DrinkOrders[Drink]))

Ahora crea una relación entre esta nueva tabla y las tablas de hechos que vinculan Type con FoodOrder[Food] y DrinkOrder[Drink]

Type.JPG

y utilice los campos Customers[CustomerID] y Type[Type] para crear sus objetos visuales:

Type Result.JPG

¡Disculpas de nuevo por mi confusión inicial!





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.