¿Conoces el impacto de los filtros en tu flujo de Power Automate?

Power Automate nos ofrece la posibilidad de integrar datos de nuestros servicios M365 sin utilizar ni una línea de código (o muy poco). Es una herramienta fantástica para obtener ciertos datos almacenados en un lugar de la nube, procesarlos y realizar un flujo de acciones según las condiciones indicadas.
En la entrada de hoy quiero prestar especial atención a esa obtención de datos que muchas veces realizamos en nuestros flujos, seguro que os es familiar: tengo una lista o librería de documentos en SharePoint y necesito obtener todos aquellos elementos que cumplan una serie de filtros.
Podría poner varios ejemplos:
- Una lista de productos y necesito obtener aquellos que hace más de 3 meses que no se actualizan.
- Una lista de acciones realizadas en un almacén y necesito obtener aquellas que llevan más de 1 semana en estado "no procesada".
- Una lista de tickets Helpdesk y necesito obtener aquellos que llevan On Hold para darles respuesta rápida.

Como veis, ejemplos muy específicos, pero que ejemplifican el caso que os estoy exponiendo: una lista de elementos que debemos filtrar.
Como para el caso de hoy no me quiero salir de los límites de las herramientas M365, voy a utilizar como ejemplo el caso específico de las listas de SharePoint y la obtención de elementos con Power Automate. Para obtener todos esos elementos, hay mil maneras de hacerlo y todas son correctas pero:

¿Sabías que dependiendo del modo que elijas obtener los elementos de tu lista va a tener un gran impacto en el tiempo de ejecución de tu flujo?


Y ya sabéis que mi objetivo es tener un flujo lo más optimizado, correcto y específico posible. Voy a mostraros las distintas maneras de obtener elementos de SharePoint y el impacto de tiempo que tiene.
Atención: los tiempos mostrados pueden variar según el tipo de datos de listas, el estado del servicio y localización de los datos. Si bien los tiempos han podido variar entre pruebas, la proporción en la diferencia se mantiene.

Obtener todos los elementos de la lista

Acción utilizada: Acción OOTB "Obtener elementos" *
Filtro: ninguno
Elementos devueltos: 4999
Tiempo de ejecución: 4 minutos




Obtener todos los elementos de la lista por API ** 

Acción utilizada: Llamada HTTP a API de SharePoint
Filtro: ninguno
Elementos devueltos: 4999
Tiempo de ejecución: 4 segundos




Obtener solo algunos elementos de la lista

Acción utilizada: Acción OOTB "Obtener elementos" con filtro
Filtro: odata (Elementos con línea de producto = Gaming)
Elementos devueltos: 421
Tiempo de ejecución: 56s


Obtener solo algunos elementos de la lista por  API

Acción utilizada: Llamada HTTP a API de SharePoint con filtro
Filtro: odata (Elementos con línea de producto = Gaming)
Elementos devueltos: 421
Tiempo de ejecución: 1s



(*) Recordad que el "obtener elementos" de SharePoint tiene por defecto un límite de 100 elementos, esta prueba se ha realizado activando el paginado y aumentando el threshold.

(**) Recordad que la API de SharePoint devuelve por defecto unos 100 elementos, si queremos obtener más deberemos añadir el "top" al final de la query. Nunca podremos pasar del límite de 5000 en una misma petición.

A continuación adjunto una comparativa de los 4 métodos ejecutados en paralelo en un mismo flujo:



Conclusión: Aunque la acción de "Obtener elementos" para SharePoint de Power Automate es muy útil cuando se tiene 0 conocimiento de API, tiene cierto impacto en el tiempo de ejecución. Si bien es cierto que la respuesta de HTTP nos viene en JSON y debemos hacer una transformación del resultado, creo que es interesante tenerlo en cuenta.
Obviamente el filtro es no solo recomendable, sino necesario. La conclusión principal de esta pequeña prueba es mostraros la importancia que "el trabajo duro" lo haga el servicio, en este caso SharePoint y no nosotros. Es mucho más eficiente no solo traer los elementos ya filtrados, en vez de filtrarlos nosotros una vez obtenidos, sino que a tiempo de ejecución total también es mucho más rápido.

Hasta aquí la entrada de hoy, este ejercicio se lo muestro a algunos usuarios que trabajan con Power Automate; los filtros pueden ser complicados y requieren un conocimiento del funcionamiento de SharePoint, pero al final es la solución más eficiente y agradecida con la que trabajar.

Si quieres aprender más sobre buenas prácticas de Power Automate y cómo mejorar el rendimiento te espero en la Maratón Virtual de Power Platform el próximo 21 de Julio:
https://events.bizzabo.com/maraton-virtual-power-platform/agenda/session/264452