Evitar antipatrones

Los antipatrones son prácticas que parecen beneficiosas, pero que provocan problemas de rendimiento, ineficiencias en los recursos y posibles errores en los flujos de trabajo. Al comprender y evitar estos antipatrones, optimiza los flujos de nube para mejorar el rendimiento y la confiabilidad.

Evitar los bucles For each anidados

Los bucles For each anidados pueden ser operaciones que consumen muchos recursos en los flujos de nube y afectar al rendimiento y al consumo de recursos.

  • Tiempo de ejecución: Los bucles anidados pueden multiplicar rápidamente el número total de iteraciones. Por ejemplo, si tiene dos bucles, cada uno con 10 iteraciones, el número total de iteraciones pasa a ser 10 x 10 = 100. Este aumento exponencial puede prolongar el tiempo de ejecución del flujo, especialmente si cada iteración procesa grandes conjuntos de datos o realiza operaciones complejas.
  • Límites y cuotas: Power Automate aplica límites y cuotas, como el número máximo de iteraciones permitidas dentro de un bucle y el tiempo total de ejecución. Los bucles anidados pueden acercarse rápidamente a estos límites, lo que provoca errores de flujo o limitaciones, especialmente cuando se trata de grandes conjuntos de datos o ejecuciones frecuentes.
  • Impacto en el rendimiento: cada iteración dentro de un bucle anidado consume potencia de procesamiento y memoria. A medida que crece el número de iteraciones, aumenta la demanda de recursos del sistema, lo que puede ralentizar todo el flujo.

Más información: Límites de simultaneidad, ejecución en bucle y fragmentación

En función de su escenario, puede evitar los bucles anidados procesando los registros relacionados de una tabla primaria. Tenga en cuenta lo siguiente:

  • Escenario: Un bucle externo usa la acción Enumerar filas para recuperar una lista de categorías de productos de la tabla ProductCategory donde la columna IsPromotion es verdadera. A continuación, un bucle interno procesa los registros relacionados de la tabla Product para cada categoría recuperada por el bucle externo.

  • Enfoque alternativo: Use la expansión de consultas de OData para agilizar este proceso. Este método le permite trabajar con un solo bucle For each, lo que reduce el número total de solicitudes a Dataverse a una sola llamada RetrieveMultiple.

Para implementar la expansión de consultas de OData:

  • Use el parámetro Expansión de consulta para especificar el nombre de la columna de búsqueda que vincula la tabla ProductCategory con la tabla Product. Este enfoque recupera registros relacionados en una sola consulta. Por ejemplo, establezca el parámetro Expandir consulta en Products($select=ProductName,Price).
  • Utilice el parámetro $select para limitar las columnas devueltas desde la tabla relacionada.
  • Recupere y procese registros relevantes aplicando condiciones directamente en las columnas de la tabla de búsqueda mediante el parámetro Filtrar filas. Por ejemplo, establezca el parámetro Filtrar filas en IsPromotion eq true.

Captura de pantalla del uso del parámetro Expandir consulta y filtrar filas para implementar la expansión de consultas de OData.

Evitar bucles sin fin

Con Power Automate, los flujos pueden desencadenarse de forma infinita, como cuando el flujo actualiza la misma tabla que lo desencadena.

Cuando guarda un flujo que puede dar lugar a un bucle de desencadenador infinito, Power Automate le avisa.

Captura de pantalla de la advertencia que recibe un creador al intentar guardar un flujo que puede provocar un bucle infinito.

Para evitar bucles sin fin:

  • Usar condiciones de desencadenador: las condiciones de desencadenador garantizan que el flujo solo se ejecute cuando se cumplan criterios específicos, lo que evita ejecuciones innecesarias. Implemente condiciones de desencadenador agregando una condición al desencadenador para comprobar si hay determinados valores o estados antes de que continúe el flujo. Por ejemplo, si el flujo actualiza un campo de estado, puede establecer una condición de desencadenador para que solo se ejecute el flujo si el estado aún no se ha establecido en el valor deseado.
  • Terminar el flujo: un enfoque alternativo es detener la continuación del flujo si detecta una condición que provocaría un bucle infinito. Finalizar el flujo cuando se cumpla una condición específica mediante la acción Terminar. Este enfoque se puede utilizar como medida de seguridad para evitar más acciones si el flujo está a punto de entrar en un bucle infinito. Por ejemplo, si el flujo detecta que ya ha procesado un registro, puede finalizarse para evitar el reprocesamiento.

Evite un gran número de operaciones de transformación de datos

Al trabajar con transformaciones de datos a gran escala, considere la posibilidad de utilizar un proceso de extracción, transformación y carga (ETL). Por ejemplo, en lugar de usar un flujo de nube Power Automate para leer datos de una hoja de cálculo de Excel grande, realice validaciones o formateo de datos y, a continuación, escriba los datos en Dataverse. Podría ser más apropiado utilizar flujos de datos de Power Platform u otra herramienta ETL.

Los flujos de datos manejan grandes volúmenes de datos de manera eficiente y proporcionan un mejor rendimiento para las tareas de ETL que los flujos de nube. Las herramientas ETL ofrecen funciones especializadas para la transformación, validación y carga de datos, lo que puede simplificar las tareas complejas de procesamiento de datos.

Para administrar la carga de datos con lógica de orquestación en flujos de nube, combine flujos de nube con flujos de datos. El método es el siguiente:

  1. Invocar actualización de flujos de datos

    • Acción: utilice el conector de flujo de datos en Power Automate para desencadenar una acción de actualización e iniciar el proceso ETL definido en su flujo de datos.
    • Ejemplo: configure un flujo de nube que desencadene la actualización del flujo de datos en función de una programación (por ejemplo, diaria) o un evento (por ejemplo, cuando se carga un nuevo archivo en una carpeta de SharePoint).
  2. Publicación de acciones ETL

    • Desencadenador: utilice el desencadenador Cuando se complete una actualización del flujo de datos en Power Automate para realizar acciones una vez finalizado el proceso ETL.
    • Ejemplo: Una vez completado el flujo de datos, utilice un flujo de nube para enviar notificaciones, actualizar registros o realizar el procesamiento de datos.

Captura de pantalla del uso de acciones de flujo de datos en un flujo de nube

Evite usar el bucle For each para actualizar un gran número de registros

A menudo, los usuarios necesitan crear o actualizar miles de registros en un origen de datos cuando se desencadena un flujo de Power Automate. Muchos usuarios utilizan un bucle For each para procesar cada registro secuencialmente, lo que provoca latencia y retrasos.

Para mejorar el rendimiento, pruebe estos dos enfoques:

  1. Operaciones por lotes

    • Descripción: cree o actualice registros en lotes. Muchos conectores y servicios proporcionan puntos de conexión de API que admiten solicitudes por lotes. Este enfoque le permite agrupar varias operaciones en una sola solicitud HTTP.
    • Implementación: use la característica de operación por lotes para enviar varias solicitudes de creación o actualización a la vez. Estas operaciones se ejecutan secuencialmente en el orden especificado en la solicitud por lotes. El orden de las respuestas coincide con el orden de las solicitudes en la operación por lotes.
    • Ventajas: Reduce el número de solicitudes individuales enviadas al origen de datos, lo que minimiza la latencia y mejora el rendimiento.

    Captura de pantalla que demuestra el uso de la API de SharePoint para ejecutar una solicitud por lotes.

  2. Paralelismo en bucle para cada uno

    • Descripción: habilite el procesamiento paralelo dentro del bucle For Each para manejar varios registros simultáneamente.
    • Implementación: configure el bucle For Each para procesar hasta 50 registros en paralelo. Este enfoque es útil para los servicios que no admiten operaciones por lotes.
    • Beneficios: Reduce significativamente el tiempo total de procesamiento al manejar múltiples registros al mismo tiempo.

Para obtener información sobre cómo realizar solicitudes por lotes, consulte la siguiente documentación de la API de REST:

Usar operaciones masivas en Dataverse

Cuando trabaje con Dataverse, utilice las APIs Web de Operaciones en Bloque para reducir la cantidad de acciones necesarias, optimizar sus procesos y mejorar el rendimiento.

Las APIs Web de Operaciones en Bloque ofrecen una clara ventaja frente a las operaciones por lotes. Así es como se diferencian:

  • Operaciones en Lote: aunque las operaciones por lotes se registran en una sola solicitud, se ejecutan como varias operaciones individuales. Cada operación dentro del lote se procesa por separado.
  • Operaciones masivas: en cambio, las operaciones masivas se registran y ejecutan como una sola operación. Toda la solicitud masiva se cuenta como una operación, lo que puede reducir significativamente el número de acciones y mejorar la eficiencia.

Para invocar operaciones masivas:

  • Usar HTTP con Microsoft Entra ID: puede invocar la API web de operaciones masivas mediante solicitudes HTTP autenticadas con Microsoft Entra ID.
  • Usar el conector HTTP con entidades de servicio: como alternativa, puede usar el conector HTTP en Power Automate cuando trabaje con entidades de servicio para invocar estas API.

En este ejemplo, preparamos los registros en formato JSON mediante la acción de Seleccionar:

Captura de pantalla del uso de una acción de selección para preparar el contenido para la solicitud masiva

A continuación, usamos HTTP con Microsoft Entra ID para publicar la solicitud mediante la API web CreateMultiple.

Captura de pantalla de la invocación de una solicitud HTTP para realizar una operación masiva

Si tiene 100 registros en la salida JSON, este enfoque solo incurre en una única acción en lugar de 100 acciones de Crear fila Dataverse.