Trabajar con relaciones en Power Apps

Completado

De hecho, Power Apps ofrece un amplio conjunto de funciones y controles personalizados para establecer y utilizar relaciones dentro de sus aplicaciones. Normalmente, las relaciones tienen dos usos principales en la mayoría de las aplicaciones.

En primer lugar, como ya se ha visto, se almacenan datos en varias tablas para luego utilizar las relaciones a fin de conectar esos datos con fluidez. Esta unidad le explica los pasos para conectar tablas, como clientes y facturas, y le muestra cómo crear asociaciones significativas entre ellas.

En segundo lugar, las relaciones se emplean a menudo para obtener información del registro principal cuando se accede directamente al registro secundario. En ese caso, descubrirá cómo recuperar el nombre del cliente mientras trabaja en el contexto de un registro de factura. Esta funcionalidad le permite acceder a información importante de registros relacionados y mostrarla, lo que simplifica el uso y amplía la generalidad de la aplicación.

Conectar una tabla principal y secundaria en Power Apps

En este ejemplo, verá cómo hacer referencia a una relación principal y secundaria utilizando el filtro de Power Apps y una función LookUp.

La tabla Cliente es la principal en esta relación, lo que significa que un cliente puede tener muchas facturas. Tenga en cuenta que en la tabla Customer no hay ninguna referencia a la tabla Invoice. En este ejemplo, el nombre del origen de datos para esta tabla es CustomerTable. La tabla será similar a la siguiente.

Id. CustomerName NúmeroTeléfonoCliente
1 Contoso 513-555-1212
2 Fabrikam 206-555-1313
3 Tailspin Toys 404-555-1414

La tabla Invoice es el elemento secundario de esta relación. En este ejemplo, el nombre del origen de datos para esta tabla es InvoiceTable. La tabla será similar a la siguiente.

Id. FechaFactura DescripciónFactura ImporteFactura IdCliente
1 5/16/2020 Piezas 412.33 1
2 5/1/2020 Servicio 205,44 3
3 06/05/2020 Viaje 132,98 1
4 31/05/2020 Piezas 75,55 2

En Power Apps, si tiene estas tablas creadas como origen de datos, puede usar un control Galería para mostrar el contenido de la tabla Cliente. Use el control Galería en los siguientes pasos:

  1. Inserte un control Galería en el lienzo.

  2. Establezca la propiedad Items en su CustomerTable.

La galería mostrará una lista de todos los registros de cliente de la tabla. Se trata de Gallery1.

Para mostrar todo el contenido de InvoiceTable, siga estos pasos:

  1. Inserte un control Galería en el lienzo.

  2. Puede establecer la propiedad Items en su InvoiceTable.

Esta galería mostrará una lista de todos los registros de factura de la tabla. Se trata de Gallery2.

Ahora, para mostrar solo las facturas para el cliente seleccionado en Gallery1, tendrá que modificar la propiedad Items de Gallery2, más o menos de la forma siguiente.

Filter(InvoiceTable, CustomerID = Gallery1.Selected.ID)

La fórmula hará lo siguiente.

Argumento de fórmula Entrada de fórmula Notas
origen InvoiceTable
logical_test IdCliente = Gallery1.Selected.ID IdCliente es el nombre de columna de InvoiceTable. Gallery1.Selected. El id. es el valor de la columna Id. del registro seleccionado en la galería.

La fórmula hace que Gallery2 muestre los registros de factura del cliente seleccionado en Gallery1.

Búsqueda de información almacenada en el elemento primario desde el elemento secundario

A veces, es necesario navegar hacia arriba o hacia abajo desde un registro secundario para llegar al registro principal asociado. En un escenario en el que examina los detalles de un registro de factura (por ejemplo, con un id. de 2) y conoce su asociación con el cliente que tiene un id. de 3, es posible que desee extraer más detalles de la tabla principal.

En este caso, puede utilizar la relación entre las tablas para recuperar información relacionada con el cliente, como su nombre o número de teléfono, haciendo referencia a los registros asociados en la tabla principal. Esta técnica le permite recopilar detalles pertinentes de registros vinculados en la tabla principal en función de la información disponible en el registro secundario; de este modo, suministrará una vista global y facilitará las referencias cruzadas entre datos relacionados. En Power Apps, puede usar la función LookUp para hacerlo.

La función LookUp permite consultar en un origen de datos un único registro que cumpla los criterios de evaluación. En el ejemplo siguiente, usaremos las mismas tablas que en el anterior, pero empezaremos por una pantalla en blanco para evitar confusiones.

Para mostrar todo el contenido de InvoiceTable, siga los pasos que indicamos a continuación:

  1. Inserte un control Galería en el lienzo.

  2. Establezca la propiedad Items en InvoiceTable.

  3. Establezca Layout en Title, Subtitle y body.

  4. En el panel Datos, establezca Title en InvoiceDate, Subtitle en InvoiceAmount y Body en CustomerID.

Esta galería mostrará una lista de todos los registros de factura de la tabla. Si quiere que sus campos de fecha se vean como en la imagen de abajo, modifique el campo Título para que muestre Text(ThisItem.InvoiceDate,DateTimeFormat.ShortDate). Esto es Gallery3.

Captura de pantalla de galería con una lista de todos los registros de facturas.

Mostrar el id. de cada cliente no proporciona mucha información al usuario de la aplicación. Así que, para mostrar el nombre del cliente, en lugar de mostrar el id., podemos hacer lo siguiente:

En Gallery3, seleccione la etiqueta de Body y establezca la propiedad Text en lo siguiente:

LookUp(CustomerTable, ID = ThisItem.CustomerID, CustomerName)

La fórmula hará lo siguiente:

Argumento de fórmula Entrada de fórmula Notas
origen CustomerTable
logical_test ID = ThisItem.CustomerID ID es el nombre de columna de CustomerTable. ThisItem.CustomerID es el valor de la columna CustomerID para el registro actual de la galería.
resultado CustomerName Es la columna que se devolverá para los registros que coincidan con logical_test.

Después de introducir este cambio, ahora Gallery3 proporciona el nombre del proveedor.

Captura de pantalla de galería con una lista de registros de facturas fácil de usar

Notas sobre rendimiento

Realizar búsquedas desde un registro secundario hasta su registro principal dentro de una galería puede tener importantes implicaciones en el rendimiento. En el escenario demostrado, la función LookUp dentro de una galería activaría consultas de orígenes de datos varias veces, una para cada registro en InvoiceTable.

Es decir, si InvoiceTable contiene cientos de registros, la función LookUp se ejecutará ese número de veces. Esto significa que podrían hacerse cientos de llamadas a orígenes de datos independientes. Como resultado, esto podría generar un mayor tráfico de red y tiempos de procesamiento más prolongados, lo que en última instancia afectaría el rendimiento de su aplicación.

Antes de implementar llamadas a orígenes de datos, especialmente dentro de una galería donde se procesan múltiples registros, es crucial sopesar el efecto en el rendimiento. La optimización de estas consultas (por ejemplo, almacenando datos en caché o reestructurando la lógica para minimizar las llamadas repetitivas) es esencial para mantener un rendimiento óptimo de la aplicación. Tenga siempre en cuenta la escala de sus datos y el impacto potencial en el rendimiento al implementar dichas operaciones dentro del contexto de la galería.

Una mejor opción para este escenario consiste en usar una colección u otro medio a fin de consultar y almacenar todos los registros de cliente para, después, realizar la búsqueda en la colección. Para obtener más información sobre el rendimiento de los datos, consulte la entrada del blog sobre Consideraciones de rendimiento con Power Apps.

En la siguiente unidad, aprenderá cómo Microsoft Dataverse elimina todos los problemas asociados a los datos relacionados al explorar en profundidad y de forma automática por usted.