Descripción de delegaciónUnderstand delegation

PowerApps incluye un eficaz conjunto de funciones para filtrar, ordenar y dar forma a tablas de datos: las funciones Filtrar, Ordenar y AddColumns son solo algunas de ellas.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data: Filter, Sort, and AddColumns functions to name just a few. Con estas funciones puede proporcionar a los usuarios acceso a la información que necesitan.With these functions, you can provide your users with focused access to the information they need. Para quienes conozcan bien las bases de datos, el uso de estas funciones es como escribir una consulta de base de datos.For those with a database background, using these functions is the equivalent of writing a database query.

La clave para compilar aplicaciones eficientes es minimizar la cantidad de datos que debe contener el dispositivo.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Quizás se necesiten solo unos pocos registros de un mar de millones o que un único valor agregado pueda representar miles de registros.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. O quizás solo se pueda recuperar el primer conjunto de registros, y el resto se trae cuando el usuario indica que desea más.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. De esta forma se puede reducir drásticamente la potencia de procesamiento, la memoria y el ancho de banda de red que necesita la aplicación, lo que conlleva menores tiempos de respuesta para los usuarios, incluso en teléfonos conectados a través de una red móvil.Being focused can dramatically reduce the processing power, memory, and network bandwidth needed by your app, resulting in snappier response times for your users, even on phones connected via a cellular network.

La delegación es el lugar en el que la expresividad de las fórmulas de PowerApps cubre la necesidad de minimizar la cantidad de datos que se mueven a través de la red.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. En resumen, significa que PowerApps delegará el procesamiento de los datos al origen de los mismos, en lugar de moverlos a la aplicación para que los procese localmente.In short, it means that PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

Esto se complica, y el motivo por el que existe este artículo, porque no todo lo que se puede expresar en una fórmula de PowerApps puede delegarse a todos los orígenes de datos.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. El lenguaje de PowerApps imita el lenguaje de fórmulas de Excel, que se está diseñado con acceso completo e instantáneo a un libro completo en la memoria, con una amplia variedad de funciones numéricas y de manipulación de texto.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. Como consecuencia, el lenguaje de PowerApps es mucho complejo de lo que la mayoría de orígenes de datos pueden admitir, incluidos motores de base de datos eficaces como SQL Server.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

El trabajo con grandes conjuntos de datos requiere que se usen orígenes de datos y fórmulas que se puedan delegar.Working with large data sets requires using data sources and formulas that can be delegated. Es la única manera de que la aplicación funcione correctamente y de tener la certeza de que los usuarios pueden acceder a toda la información que necesitan.It is the only way to keep your app performing well and ensure users can access all the information they need. Siga las sugerencias de los puntos azules que marcan los lugares en los que no es posible la delegación.Take heed of blue-dot suggestions that flag places where delegation is not possible. Si trabaja con conjuntos de datos pequeños (menos de 500 registros), puede utilizar cualquier origen de datos y cualquier fórmula, ya que el procesamiento se puede realizar localmente si la fórmula no se puede delegar.If you're working with small data sets (less than 500 records), you can use any data source and formula as processing can be done locally if the formula cannot be delegated.

Orígenes de datos delegablesDelegable data sources

En la lista de delegación se encuentran todos los orígenes de datos que admiten la delegación orígenes y en hasta qué punto lo hacen.See the delegation list for the full list of which data sources support delegation and to what extent.

A continuación agregaremos compatibilidad con la delegación a los orígenes de datos existentes y agregaremos más orígenes de datos.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Los libros de Excel importados (que usan el origen de datos "Agregar datos estáticos a la aplicación"), las colecciones y las tablas almacenadas en variables de contexto no requieren delegación.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Todos estos datos ya están en la memoria y se puede aplicar el lenguaje de PowerApps completo.All of this data is already in memory, and the full PowerApps language can be applied.

Funciones que se pueden delegarDelegable functions

El siguiente paso es usar solo aquellas fórmulas que se puedan delegar.The next step is to use only those formulas that can be delegated. Aquí se incluyen los elementos de las fórmulas que se pueden delegar.Included here are the formula elements that could be delegated. Sin embargo, todos los orígenes de datos son diferentes, y no todos ellos admiten todos estos elementos.However, every data source is different, and not all of them support all of these elements. Consulte las sugerencias de los puntos azules de su fórmula concreta.Check for blue-dot suggestions in your particular formula.

Estas listas cambiarán con el tiempo,These lists will change over time. ya que en el futuro habrá más funciones y operadores que admitan la delegación.We're working to support more functions and operators with delegation.

Funciones de filtroFilter functions

Filtrar, Buscar y Búsqueda se pueden delegar.Filter, Search, and LookUp can be delegated.

En las funciones Filtrar y Buscar, se puede usar lo siguiente en las columnas de la tabla para seleccionar los registros apropiados:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

También se pueden utilizar las partes de la fórmula que se evalúan como un valor constante para todos los registros.Portions of your formula that evaluate to a constant value for all records can also be used. Por ejemplo, Izquierda (Lenguaje(), 2) no depende de ninguna columna del registro y, por tanto, devuelve el mismo valor para todos los registros.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Efectivamente es una constante.It is effectively a constant. El uso de variables de contexto, colecciones y señales puede no ser constante y, por tanto, impedirá la delegación de Filtrar y Buscar.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Algunos elementos importantes que faltan en la lista anterior:Some notable items missing from the above list:

Funciones de ordenaciónSorting functions

Ordenar y SortByColumns (OrdenarPorColumnas) se pueden delegar.Sort and SortByColumns can be delegated.

En Ordenar, la fórmula solo puede ser el nombre de una columna individual y no puede incluir otros operadores o funciones.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Funciones de agregadoAggregate functions

Suma, Promedio, Min y Max pueden delegarse.Sum, Average, Min, and Max can be delegated. En este momento, solo un número limitado de orígenes de datos admite esta delegación. Para más información, consulte la lista de delegación.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Las funciones de recuento como CountRows (ContarFilas), ContarA y Contar no se pueden delegar.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Otras funciones de agregado, como StdevP y VarP, no se pueden delegar.Other aggregate functions such as StdevP and VarP cannot be delegated.

Otras funcionesOther functions

Las restantes funciones, entre las que se incluyen las siguientes, no admiten la delegación:All other functions do not support delegation, including these notable functions:

Un patrón habitual consiste en usar AddColumns y Buscar para combinar información de una tabla con la de otra, lo que suele conocerse como una combinación en el lenguaje de base de datos.A common pattern is to use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance. Por ejemplo:For example:

  • AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

Aunque Products y Suppliers pueden ser orígenes de datos delegables y Buscar es una función delegable, la función AddColumns no se puede delegar.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. El resultado de la fórmula completa se limitará a la primera parte del origen de datos Products.The result of the entire formula will be limited to the first portion of the Products data source.

Dado que Buscar y su origen de datos se pueden delegar, se puede encontrar una coincidencia con Suppliers en cualquier lugar del origen de datos, aunque sea grande.Since the LookUp and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it is large. Un posible inconveniente es que Buscar realizará llamadas al origen de datos en todos los primeros registros de Products, lo que provocará mucha charla en la red.A potential downside is that LookUp will made separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. Si Suppliers es suficientemente pequeño y no cambia con frecuencia, puede almacenar en la memoria caché el origen de datos en su aplicación con una llamada Recopilar cuando se inicia la aplicación (para lo que se usa AlEstarVisible en la pantalla inicial) y usar Buscar en su lugar.If Suppliers is small enough and does not change often, you could cache the data source in your app with a Collect call when the app starts (using OnVisible on the opening screen) and do the LookUp to it instead.

Límites no delegablesNon-delegable limits

Las fórmulas que no se puede delegar se procesarán localmente.Formulas that cannot be delegated will be processed locally. Esto permite usar todo el espectro del lenguaje de fórmulas de PowerApps.This allows for the full breadth of the PowerApps formula language to be used. Pero esto tiene un precio: primero deben pasarse todos los datos al dispositivo, lo que podría implicar la recuperación de una gran cantidad de datos a través de la red.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. Esta operación puede tardar un tiempo, lo que daría la impresión de que la aplicación se ejecuta con lentitud, o incluso que está bloqueada.That can take time, giving the impression that your app is slow or possibly hung.

Para evitarlo, PowerApps impone un límite en la cantidad de datos que se pueden procesar localmente: 500 registros.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. Elegimos este número para que tuviera acceso completo a los conjuntos de datos pequeños y pudiera pueda refinar su uso de conjuntos de datos grandes viendo los resultados parciales.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Obviamente si se usa este recurso es preciso tener cuidado, ya que puede ser confuso para los usuarios.Obviously care must be taken when using this facility as it can be confusing for users. Por ejemplo, considere una función Filtrar función con una fórmula de selección que no se puede delegar y con un origen de datos de más de un millón de registros.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Como el filtrado se realizará localmente, solo se examinarán los primeros 500 registros.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Si el registro deseado es el 501, o el 500 001, Filtrar no lo tendrá en cuenta o no lo devolverá.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Otro lugar en el que puede producirse confusión son las funciones de agregado.Another place where this can be confusing is aggregate functions. Tomemos como ejemplo Promedio en una columna con el mismo origen de datos de un millón de registros.Take Average over a column of that same million record data source. Como Promedio aún no se puede delegar, solo se obtendrá el promedio de los primeros 500 registros.Since Average cannot yet be delegated, only the first 500 records will be averaged. Se debe tener cuidado, ya que algún usuario de la aplicación podría malinterpretar una respuesta parcial como una respuesta completa.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Sugerencias de puntos azulesBlue dot suggestions

Para que sea más fácil saber lo que se va a delegar y lo que no, se proporciona sugerencias de puntos azules cuando una fórmula algo que no se puede delegar.To make it easier to know what is and is not being delegated, the authoring experience provides blue dot suggestions when a formula contains something that cannot be delegated.

Los puntos azules solo se muestran en las fórmulas que operan en orígenes de datos delegables.Blue dots are only shown on formulas that operate on delegable data sources. Si no ve un punto azul y cree que la fórmula no se delega correctamente, compruebe el tipo de origen de datos en la lista anterior de orígenes de datos que se pueden delegar.If you don't see a blue dot and you believe your formula is not being properly delegated, check the type of data source against the list of delegable data sources above.

EjemplosExamples

En este ejemplo, usaremos una tabla de SQL Server que contiene productos, en concreto frutas, nombres [dbo]. [ Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. En la pantalla nueva, PowerApps puede crear una aplicación básica de tres pantallas conectada a este origen de datos:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Tenga en cuenta la fórmula de la propiedad Elementos de la galería.Note the formula for the Gallery's Items property. Usa las funciones SortByColumns y Buscar, que se pueden delegar.It is using SortByColumns and Search functions, both of which can be delegated.

Vamos a escribir "Manzana" en el control de entrada de texto de búsqueda.Let's type "Apple" into the search text-input control. Si estamos muy atentos, veremos durante un instante unos puntos que se mueven en la parte superior de la pantalla mientras se procesa la nueva entrada de la nueva búsqueda.If we are very observant, we will momentarily see marching dots on the top of the screen while the new entry in the new search is processed. Dichos puntos indican que hay comunicación con el servidor SQL Server:The marching dots indicate that we are communicating with the SQL Server:

Dado que todo esto se puede delegar, aunque si la tabla [dbo]. [ Products] contiene millones de registros, se seguirán encontrando todos, para lo que nos desplazamos por la galería a medida que el usuario se desplaza por los resultados.Because this is all delegable, even if the [dbo].[Products] table contains millions of records, we will still find them all, paging through them in the gallery as the user scrolls through the results.

Observará que aparece una coincidencia para "Manzana" y "Piña".You will notice that we are seeing a match for both "Apple" and "Pineapple". La función Buscar encontrará un término de búsqueda en cualquier parte de una columna de texto.The Search function will find a search term anywhere in a text column. Sin embargo, supongamos que solo deseamos buscar el término de búsqueda únicamente al principio del nombre de fruta.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Podemos usar otra función que se puede delegar, Filtrar, con un término de búsqueda más complicado (por motivos de simplicidad quitaremos la llamada a SortByColumns):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Ahora solo se muestra "Manzanas", pero no "Piña".This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Sin embargo, se muestra un punto azul al lado de la galería y hay una línea ondulada de azul debajo de una parte de la fórmula.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Incluso aparece un punto azul en la miniatura de la pantalla.There is even a blue dot showing in the screen thumbnail. Si se mantiene el puntero sobre el punto azul que hay al lado de la galería, se ve lo siguiente:If we hover over the blue dot next to the gallery, we see the following:

Aunque usamos Filtrar, que es una función delegable, con SQL Server, que es un origen de datos que se puede delegar, la fórmula que se utilizó en Filtrar no se puede delegar.Although we are using Filter which is a delegable function, with SQL Server which is a delegable data source, the formula we used within Filter is not delegable. Extrae y Largo no se pueden delegar en ningún origen de datos.Mid and Len cannot be delegated to any data source.

Pero ha funcionado, ¿no?But it worked, didn't it? Bueno, más o menos.Well, kind of. Por eso aparece un punto azul, en lugar de un icono de peligro amarillo y una línea ondulada roja de error.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Si la tabla [dbo]. [ Products] contiene menos de 500 registros, ha funcionado perfectamente.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Todos los registros han pasado al dispositivo y Filtrar se ha aplicado localmente.All records were brought to the device and the Filter was applied locally.

Si la tabla contiene más de 500 registros, en la galería solo se mostrará la fruta que empiezan por "Manzana" en los primeros 500 registros de la tabla.If instead this table contains more than 500 records, then only fruit which begin with "Apple" in the first 500 records of the table will be displayed in the gallery. Si "Manzana, Fuji" aparece como nombre en los registros 501 o 500 001, no se encontrará.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.