PowerApps: Aprende a evitar advertencias de delegación

Un concepto muy importante a entender es el de delegación, en especial si queremos evitar problemas con grandes conjuntos de datos en PowerApps. Por ejemplo, cuando hacemos operaciones como filtrar o buscar por registros específicos en PowerApps, la delegación descarga el trabajo a la fuente de datos.

PowerApps evitar delegación

Lo que esto realmente significa es que operaciones como Search, Filter y Lookup son desarrolladas en la fuente de datos en lugar de traer el conjunto de datos completo al dispositivo y luego procesarlo de forma local.

En esencia, delegar es un método mucho más poderoso ya que procesa datos más rápido y mejora el desempeño de la app. Fuentes delegables son Dynamics 365 (CRM), Common Data Service for Apps, SharePoint y SQL Server, por lo que el día de hoy vamos a discutir advertencias comunes de delegación y cómo es que podemos evitarlas.

Nótese que, generalmente hablando, delegación no aplica a conjuntos de datos con menos de 500 registros ya que esos pueden ser procesados en el dispositivo sin problema alguno, y si bien este «límite» puede ser cambiado, hacer esto puede resultar en un desempeño más pobre.

RAZONES PARA ADVERTENCIAS DE DELEGACIÓN

Si obtenemos una advertencia de delegación mientras desarrollamos operaciones en nuestras fórmulas, significa que una o más de las operaciones que están siendo desarrolladas no pueden ser descargadas al otro servidor por una de las siguientes razones:

  • Puede que estemos usando una función que (aún) no tiene soporte por la fuente de datos en cuestión. Una lista detallada de las operaciones soportadas puede ser encontrada aquí.
  • Respecto a la función Filter, puede que no estemos usando valores constantes en una expresión (lo cual veremos más adelante). Esto significa que la expresión contiene un valor que será diferente dependiendo en el valor de cierta columna en el conjunto de datos. Cuando un valor en una expresión de filtro depende en una columna en el conjunto de datos que está siendo filtrado, el valor no es conocido al momento de la recuperación y por lo tanto el procesamiento no puede ser descargado a la fuente de datos ya que la fuente de datos no puede desarrollar los cálculos, pues solo es capaz de evaluar el número conjunto de expresiones descritas aquí.

EJEMPLOS DE ESCENARIOS QUE ARROJARÁN ADVERTENCIAS DE DELEGACIÓN

Ejemplo #1 – El siguiente filtro arrojó una advertencia de delegación

Filter(Jobs, 'Tentative Job Start Date' <= DateAdd(Today(),7, Days))

Problema: DateAdd no es un valor constante. El filtro depende del valor de esta expresión, pero la expresión no es delegable a la fuente de datos (no está en la lista de operaciones soportadas). Como resultado, toda la operación de filtro no puede ser delegada.

Solución: Evaluar la expresión DateAdd por separado y almacenar el valor en una variable (DateLimit) para que sea usada en la función Filter. DateLimit es un valor constante al momento de hacer el filtro. De esta forma, el filtro ya no arroja una advertencia de delegación.

Set(DateLimit, DateAdd(Today(),7, Days));
Filter(Jobs, 'Tentative Job Start Date' <= DateLimit )

Ejemplo #2 – El siguiente filtro arroja una advertencia de delegación

Filter(Jobs, 'Project Manager' = LookUp(Users, domainname = User().Email, systemuserid))

Problema: LookUp no es un valor constante. El filtro depende del valor de esta expresión, pero la expresión no es delegable a la fuente de datos (no se encuentra en la lista de operaciones soportadas). Como resultado, toda la operación de filtro no puede ser delegada.

Solución: Evaluar la expresión LookUp por separado y almacenar el valor en una variable (UserGuid) para que sea usada en la función Filter.[?] UserGuid es un valor constante al momento de la filtración y así, el filtro ya no arroja una advertencia de delegación.

Set(UserGuid, LookUp( Users, domainname = User().Email , systemuserid) );
Filter(Jobs, 'Project Manager' = UserGuid )

EVITANDO ADVERTENCIAS DE DELEGACIÓN

Como podemos ver en los ejemplos anteriores, usar solo valores constantes en nuestras expresiones de filtro, separar otros cálculos independientes y almacenar el resultado en una variable eliminará las advertencias de delegación. También ayuda solo usar expresiones que son soportadas, tal y como sugiere la documentación oficial.

Corto pero al grano. Cualquier duda nos leemos abajo.

PowerApps: Aprende a evitar advertencias de delegación
Scroll hacia arriba