Estrategias de carga de datos

Completado

Power Apps proporciona a los usuarios una forma eficiente de trabajar con sus datos y procesos empresariales. Las aplicaciones pueden acceder a los datos mediante conectores. Por lo general, cuando se inicia una aplicación o se muestra una nueva pantalla, se recupera parte de la información para la visualización inicial. Los controles de las pantallas a menudo están vinculados directamente a los conectores y los datos se recuperan cuando la pantalla se muestra para el usuario. Navegar de una pantalla a otra también puede hacer que los datos se recuperen nuevamente. En algunos casos, si no se optimiza, este proceso puede resultar en una experiencia de usuario deficiente o en un procesamiento adicional. Al evaluar las necesidades de los usuarios y cómo se cargan los datos, puede desarrollar una estrategia para mejorar el rendimiento.

Al evaluar su aplicación, considere las siguientes preguntas clave:

  • ¿Son útiles los datos iniciales que se muestran al usuario? A menudo, los creadores de aplicaciones quieren mostrar datos cuando los usuarios llegan a una pantalla. Este comportamiento puede hacer que la aplicación se vea atractiva y se demuestre bien; sin embargo, es ineficaz cuando la lista inicial no se usa con regularidad. Esta situación puede provocar una lentitud involuntaria de la aplicación cuando los usuarios están cargando una gran cantidad de registros sin filtrar.

  • ¿Ofrece la aplicación los filtros de datos correctos? Agregar controles para que los usuarios puedan especificar criterios para reducir la cantidad de filas que se muestran puede ser útil para la productividad y el rendimiento del usuario.

  • ¿Está incurriendo en gastos generales al mostrar datos relacionados? Si está utilizando un origen de datos que proporciona acceso a datos relacionales y utiliza valores relacionados en una galería, la aplicación puede realizar consultas de búsqueda para cada fila que se muestra. Puede identificar este problema ejecutando la aplicación con Monitor y luego revisando los resultados. Puede ser más eficaz cargar previamente los datos relacionados en una colección y luego realizar la búsqueda desde la colección en su lugar.

  • ¿Sabe qué datos son estáticos y qué datos se actualizan con frecuencia? Antes de considerar la carga previa de los datos, asegúrese de saber si se actualizan con frecuencia. El almacenamiento en caché de los datos estáticos o que cambian con poca frecuencia puede ayudar a mejorar el rendimiento de la aplicación, al tener los datos listos cuando se muestra la pantalla. El almacenamiento en caché de datos que cambian con frecuencia puede tener un impacto perjudicial en el rendimiento de la aplicación o puede presentar datos obsoletos al usuario.

  • ¿Quiere mostrar un indicador de carga al usuario? Si está enlazando datos directamente del conector al control, no tiene la opción de mostrar y ocultar un indicador de carga como lo haría si almacenara en caché los datos en una colección.

  • ¿Cuántos datos se cargarán desde el origen de datos? Si está considerando el almacenamiento en caché, asegúrese de que el origen de datos que va a almacenar en caché no tenga más filas de las especificadas para el límite de filas de datos en la configuración de la aplicación.

  • ¿Necesita calcular columnas o manipular los datos que cargó? Si el origen de datos admite los cálculos necesarios y la columna es útil en varias aplicaciones, intente implementar estas columnas en el origen de datos. Por ejemplo, Microsoft Dataverse tiene capacidades de columnas calculadas y consolidadas.

  • ¿Con qué frecuencia necesita ver datos agregados o modificados por otra aplicación o automatización? Si está cargando previamente los datos en una colección, solo se mostrará la información actualizada si vuelve a cargar la colección.

Enlace directo del origen de datos

Cuando configura la propiedad Elementos de una galería para la tabla de un conector tabular, o si usa una expresión como una función Filter() que se basa en la tabla, está haciendo un enlace directo de origen de datos. La siguiente expresión se enlaza directamente a la tabla Escritorios.

SortByColumns(Filter([@Desks], StartsWith(Title, TextSearchBox1.Text)), "Title", If(SortDescending1, Descending, Ascending))

Este enfoque es más básico para la carga de datos. Los datos se recuperan directamente del conector a medida que cambian los criterios del filtro. Este enfoque es una forma declarativa de cargar datos en la que el runtime de Power Apps puede decidir cargar y actualizar los datos. Como resultado, no tiene la opción de que se muestre al usuario un indicador de carga.

Una vez que se han cargado los datos, los controles pueden utilizarlos sin tener que recuperarlos del origen de datos en cada ocasión. Puede actualizar manualmente los datos del origen de datos utilizando Refresh(tableName). Los datos que se muestran en los controles se actualizan automáticamente cuando los datos se modifican en otra parte de la aplicación.

Otra ventaja significativa del enlace directo es que no está limitado por la configuración de la aplicación Límite de filas de datos si el conector admite la delegación. Por ejemplo, si tuviera 100 000 filas de contactos en Microsoft Dataverse y enlazase una galería directamente a la tabla, la galería cargaría un conjunto inicial de elementos y luego obtendría más a medida que el usuario se desplazase. La siguiente captura de pantalla muestra los eventos de Monitor que incluyen una llamada a getRows para cargar los datos iniciales, seguida de varias llamadas a getMoreRows mientras el usuario se desplaza por la galería. Estas llamadas las realiza automáticamente Power Apps y la aplicación no necesita gestionar la paginación de los datos.

Captura de pantalla que muestra los eventos de Monitor con tres columnas.

Como se mencionó anteriormente, no desea presentar al usuario 100 000 filas. En cambio, con los orígenes de datos que admiten la delegación, puede agregar un filtro y luego dejar que el conector procese los criterios del filtro y solo devuelva las filas que coincidan.

Precargar datos en una colección

La precarga de datos en una colección le permite controlar la carga de los datos en la propiedad App.OnStart o OnVisible. La precarga de datos en App.OnStart es una buena opción si necesita los mismos datos en varias pantallas. Alternativamente, la precarga de datos de OnVisible le permite aplazar la carga hasta que se utilice esa pantalla. Cualquiera de las opciones le permite mostrar un indicador de carga mientras se cargan los datos.

La siguiente expresión borra la colección colDesks y carga todas las filas de la tabla Desks hasta alcanzar el valor de configuración de la aplicación Límite de filas de datos.

ClearCollect(colDesks,Desks)

Para usar los datos precargados, cambie las fórmulas pertinentes para usar la colección.

Captura de pantalla del menú Vista de árbol > Pantallas con la fórmula actualizada resaltada

Cuando usa datos que están precargados en una colección, los datos no se actualizan a menos que use la función ClearCollect() nuevamente para traer los datos más recientes. Este escenario es diferente del enlace directo de origen de datos, donde Power Apps administra la actualización automáticamente.

Otra ventaja de este enfoque es que puede permitir que su usuario modifique y revise varias filas a medida que avanzan, sin tener que guardar cada una mediante el uso del origen de datos. Una vez completados los cambios, puede volver a enviarlos al origen de datos utilizando una única llamada a la función Patch(). Si desea deshacer todos los cambios antes de la confirmación, puede actualizar la colección. El siguiente ejemplo muestra el proceso de usar la función Patch() para confirmar cambios en la colección colDesks de nuevo a la tabla Desks en Dataverse.

Patch(Desks,colDesks)

Carga desde un almacenamiento persistente

Una variación del enfoque de precarga simple es cargar datos desde el almacenamiento local de su dispositivo primero y luego continuar cargando directamente desde el origen de datos. Esta estrategia es útil cuando el origen de datos es lento o está disponible de forma intermitente. Para implementar este patrón, siga estos pasos:

  1. Cargue los datos, si existen, desde el almacenamiento local del dispositivo mediante la función LoadData(). En este punto, cualquier control que esté vinculado a la colección mostraría los datos.

  2. Cargue los datos directamente desde el conector del origen de datos en la misma colección. En este punto, cualquier control que esté vinculado a la colección mostrará los datos actualizados que se cargan desde el conector.

  3. Utilice la función SaveData() para conservar los datos más recientes en el almacenamiento local del dispositivo.

Sus fórmulas serían similares a las siguientes:

LoadData(colDesks,"LocalDesks",true);

ClearCollect(colDesks,Desks);

SaveData(colDesks,"LocalDesks");

Si sus usuarios ocasionalmente no están conectados, puede agregar una verificación condicional si se conectan antes de intentar cargar nuevos datos. La fórmula revisada sería similar a la siguiente:

LoadData(colDesks,"LocalDesks", true);

If (Connection.Connected,

ClearCollect(colDesks,Desks);

SaveData(colDesks,"LocalDesks")

)

Precargar en una variable

Cuando se trabaja con conectores no tabulares, como Usuarios de Office 365, puede mejorar el rendimiento guardando los resultados de una llamada de función en una variable. En el siguiente ejemplo, la fórmula llama a la función tres veces para obtener información del perfil:

Set(profileDisplayName,Office365Users.MyProfileV2().displayName);

Set(profileHireDate,Office365Users.MyProfileV2().hireDate);

Set(profileCity,Office365Users.MyProfileV2().city);

La siguiente expresión es más eficiente porque solo llama al conector una vez, pero aún completa las tres variables:

Set(profile,Office365Users.MyProfileV2());

Set(profileDisplayName,profile.displayName);

Set(profileHireDate,profile.hireDate);

Set(profileCity,profile.city);

También puede simplificarlo aún más con una variable llamada Profile y luego usar la notación de puntos para acceder a las propiedades cuando sea necesario. Por ejemplo, puede usar la propiedad profile.hireDate en lugar de la variable profileHireDate. Para hacerlo, solo usaría la siguiente expresión en App.OnStart:

Set(profile,Office365Users.MyProfileV2());

Entonces, en lugar de usar la expresión If(IsBlank(profileHireDate),Red,Green), que usa variables individuales para establecer un color de controles, usaría la expresión If(IsBlank(profile.hireDate),Red,Green), que usa la notación de puntos profile.hireDate en su lugar.

Cargar datos al mismo tiempo

Si está precargando datos desde conectores y tiene varios elementos que está almacenando en caché, de forma predeterminada, se ejecutará uno cada vez de forma secuencial. En el siguiente ejemplo se muestra el proceso de cargar dos tablas y el perfil de usuario en colecciones y una variable global.

ClearCollect(colDesks,Desks);

ClearCollect(colDeskFeatures,'Desk Features');

Set(userProfile, Office365Users.MyProfileV2())

Si cada tabla está precargando datos de forma independiente, puede ejecutarlos en paralelo mediante la función Concurrent().

Concurrent(

ClearCollect( colDesks,Desks ),

ClearCollect( colDeskFeatures, 'Desk Features' ),

Set( userProfile, Office365Users.MyProfileV2() )

)

Cargar datos una vez

Si precarga datos en App.OnStart, solo se ejecutará una vez cuando se inicie la aplicación. Si usa la propiedad OnVisible en su lugar para aplazar, luego se precarga la primera vez que se usa la pantalla y OnVisible se ejecuta cada vez que se navegue a la pantalla. Este enfoque potencialmente actualizará su colección con demasiada frecuencia. Para evitar esta situación, en lugar de usar una función ClearCollect(), primero debe verificar si ya ha cargado los datos.

Reemplace la llamada a la función ClearCollect(colDesks,Desks) con la expresión If(IsEmpty(colDesks),ClearCollect(colDesks,Desks)), que incluye la comprobación si la colección está vacía.

Configuración de la aplicación y carga de datos

Como se mencionó anteriormente, la configuración de la aplicación puede afectar al rendimiento y comportamiento de su aplicación. Si está utilizando colecciones para precargar datos, se aplica el valor de Límite de filas de datos y puede hacer que los conjuntos de datos más grandes no sean adecuados para la precarga.

Otro escenario a tener en cuenta es el Retraso de carga. Esta configuración retrasa la ejecución de llamadas de expresión de pantalla hasta que se necesitan y luego las ejecuta a pedido. Esta configuración está activada de forma predeterminada para todas las aplicaciones nuevas y se puede activar manualmente para las aplicaciones más antiguas.

La optimización de la carga de datos de su aplicación es única para cada aplicación. En este tema se explica cómo evaluar las necesidades de sus usuarios y la aplicación para adaptar su estrategia de carga de datos para obtener el mejor rendimiento y la mejor experiencia del usuario. La optimización no es un ejercicio de una sola vez, sino algo que hará durante la vida útil de la aplicación. Además, querrá aprovechar las nuevas capacidades de la plataforma que optimizan la carga de datos a medida que estén disponibles.