Compreender a delegaçãoUnderstand delegation

O PowerApps inclui um poderoso conjunto de tabelas de dados de funções de filtragem, classificação e formatação: funções Filtrar, Classificar e AdicionarColunas para mencionar apenas algumas.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. Com essas funções, você pode fornecer aos usuários o acesso com foco às informações de que eles precisam.With these functions, you can provide your users with focused access to the information they need. Para usuários com uma tela de fundo do banco de dados, usar essas funções é o equivalente a escrever uma consulta de banco de dados.For those with a database background, using these functions is the equivalent of writing a database query.

A chave para a criação de aplicativos eficientes é minimizar a quantidade de dados que precisa ser colocada em seu dispositivo.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Talvez, apenas alguns dos milhares de registros são necessários, ou um único valor agregado pode representar milhares 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. Ou talvez somente o primeiro conjunto de registros pode ser recuperado e o restante trazido à medida que o usuário demonstra que quer mais.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Ter foco pode reduzir consideravelmente a capacidade de processamento, a memória e a largura de banda de rede necessária para seu aplicativo, resultando em tempos de resposta mais rápidos para seus usuários, mesmo em telefones conectados por meio de uma rede de celular.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.

Delegação é onde a expressividade das fórmulas dos PowerApps atende às necessidades para minimizar a movimentação de dados pela rede.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Em resumo, isso significa que o PowerApps delegará o processamento de dados para a fonte de dados, em vez de mover os dados para o aplicativo para processamento local.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.

Onde isso se torna complicado e o motivo pelo qual existe este artigo, é porque nem tudo o que pode ser expressado em uma fórmula do PowerApps pode ser delegado para cada fonte de dados.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. A linguagem do PowerApps imita a linguagem de fórmula do Excel, projetada com acesso completo e instantâneo a uma pasta de trabalho completa na memória, com uma ampla variedade de funções numéricas e de manipulação 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 resultado, a linguagem do PowerApps é muito mais sofisticada do que o que a maioria das fontes de dados pode oferecer suporte, incluindo os avançados mecanismos de banco de dados como o 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.

Trabalhar com grandes conjuntos de dados requer o uso de fontes de dados e fórmulas que podem ser delegadas.Working with large data sets requires using data sources and formulas that can be delegated. É a única maneira de manter seu aplicativo com um bom desempenho e garantir que os usuários possam acessar todas as informações necessárias.It is the only way to keep your app performing well and ensure users can access all the information they need. Preste atenção nas sugestões de pontos azuis que sinalizam lugares onde a delegação não é possível.Take heed of blue-dot suggestions that flag places where delegation is not possible. Se estiver trabalhando com conjuntos de dados pequenos (com menos de 500 registros), você poderá usar qualquer fonte de dados e fórmula, pois o processamento poderá ser realizado localmente se a fórmula não puder ser delegada.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.

Fontes de dados delegáveisDelegable data sources

Consulte a lista de delegação para obter a lista completa de quais fontes de dados oferecem suporte à delegação e até que ponto.See the delegation list for the full list of which data sources support delegation and to what extent.

Continuamos adicionando o suporte à delegação a fontes de dados existentes e adicionando mais fontes de dados.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Pastas de trabalho importadas do Excel (usando a fonte de dados "Adicionar dados estáticos ao seu aplicativo"), coleções e tabelas armazenadas em variáveis de contexto não requerem a delegação.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 esses dados já estão na memória e a linguagem completa do PowerApps pode ser aplicada.All of this data is already in memory, and the full PowerApps language can be applied.

Funções delegáveisDelegable functions

A próxima etapa é usar somente as fórmulas que podem ser delegadas.The next step is to use only those formulas that can be delegated. Os elementos da fórmula que podem ser delegados estão incluídos aqui.Included here are the formula elements that could be delegated. No entanto, cada fonte de dados é diferente e nem todas elas oferecem suporte a todos esses elementos.However, every data source is different, and not all of them support all of these elements. Verifique as sugestões de pontos azuis na fórmula específica.Check for blue-dot suggestions in your particular formula.

Essas listas serão alterado ao longo do tempo.These lists will change over time. Estamos trabalhando para oferecer suporte a mais funções e operadores com a delegação.We're working to support more functions and operators with delegation.

Funções FiltrarFilter functions

As funções Filtrar, Pesquisar e Pesquisa podem ser delegadas.Filter, Search, and LookUp can be delegated.

Dentro das funções Filtrar e Pesquisa, os itens a seguir podem ser usados com as colunas da tabela para selecionar os registros apropriados:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Partes da fórmula que são avaliados como um valor constante para todos os registros também podem ser usadas.Portions of your formula that evaluate to a constant value for all records can also be used. Por exemplo, Left( Language(), 2 ) não depende de nenhuma coluna do registro e, portanto, retorna o mesmo valor para todos os registros.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Isso é efetivamente uma constante.It is effectively a constant. O uso de variáveis de contexto, coleções e sinais pode não ser constante e, portanto, impedirá que as funções Filtrar e Pesquisa sejam delegadas.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Alguns itens importantes ausentes da lista acima:Some notable items missing from the above list:

Funções de classificaçãoSorting functions

Classificar e ClassificarPorColunas podem ser delegadas.Sort and SortByColumns can be delegated.

Em Classificar, a fórmula só pode ser o nome de uma única coluna e não pode incluir outros operadores ou funções.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Funções de AgregaçãoAggregate functions

Soma, Média, Mín e Máx podem ser delegadas.Sum, Average, Min, and Max can be delegated. Somente um número limitado de fontes de dados dá suporte a essa delegação neste momento. Consulte a lista delegação para obter mais detalhes.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Funções de contagem como CountRows, CountA e Count não podem ser delegadas.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Outras funções de agregação como StdevP e VarP não podem ser delegadas.Other aggregate functions such as StdevP and VarP cannot be delegated.

Outras funçõesOther functions

Todas as outras funções não oferecem suporte à delegação, incluindo essas funções importantes:All other functions do not support delegation, including these notable functions:

Um padrão comum é usar AdicionarColunas e Pesquisa para mesclar informações de uma tabela em outra, normalmente conhecido como uma junção na linguagem do banco de dados.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 exemplo:For example:

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

Embora Products e Suppliers possam ser fontes de dados delegáveis e Pesquisa seja uma função delegáveis, a função AdicionarColunas não é delegável.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. O resultado da fórmula inteira será limitado à primeira parte da fonte de dados Products.The result of the entire formula will be limited to the first portion of the Products data source.

Como Pesquisa e sua fonte de dados são delegáveis, uma correspondência para Suppliers pode ser encontrada em qualquer lugar na fonte de dados, mesmo que seja 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. Uma possível desvantagem é que Pesquisa terá feito chamadas separadas para a fonte de dados para cada um dos primeiros registros em Products, causando muitas conversas na rede.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. Se Suppliers for pequeno o suficiente e não for alterado muitas vezes, você poderá armazenar em cache a fonte de dados em seu aplicativo com uma chamada de Coleta quando o aplicativo for iniciado (usando OnVisible na tela de abertura) e efetuar Pesquisa ele em vez disso.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.

Limites não delegáveisNon-delegable limits

As fórmulas que não podem ser delegadas serão processadas localmente.Formulas that cannot be delegated will be processed locally. Isso permite que toda a gama de linguagens de fórmula do PowerApps seja usada.This allows for the full breadth of the PowerApps formula language to be used. Mas por um preço: todos os dados devem ser colocados no dispositivo primeiro, o que pode envolver a recuperação de uma grande quantidade de dados pela rede.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. Isso pode levar tempo, dando a impressão de que seu aplicativo está lento ou possivelmente travado.That can take time, giving the impression that your app is slow or possibly hung.

Para evitar isso, o PowerApps impõe um limite na quantidade de dados que podem ser processados localmente: 500 registros.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. Escolhemos esse número para que você ainda tenha acesso completo a pequenos conjuntos de dados e possa refinar o uso de grandes conjuntos de dados ao ver resultados parciais.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, é necessário ter cuidado ao usar esse recurso, pois ele pode confundir os usuários.Obviously care must be taken when using this facility as it can be confusing for users. Por exemplo, considere uma função Filtrar com uma fórmula de seleção que não pode ser delegada por uma fonte de dados de um milhão de registros.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Como a filtragem será feita localmente, somente os primeiros 500 registros do milhão de registros serão verificados.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Se o registro desejado for 501 ou 500.001, ele não será considerado ou retornado por Filtrar.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Outro lugar em que isso pode ser confuso é ao agregar funções.Another place where this can be confusing is aggregate functions. Considere Average em uma coluna da mesma fonte de dados de um milhão de registros.Take Average over a column of that same million record data source. Como Average ainda não pode ser delegado, somente os primeiros 500 registros serão calculados na média.Since Average cannot yet be delegated, only the first 500 records will be averaged. É preciso ter cuidado para que uma resposta parcial não seja interpretada erroneamente como uma resposta completa por um usuário de seu aplicativo.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Sugestões de ponto azulBlue dot suggestions

Para facilitar o conhecimento do que é e não é delegado, a experiência de criação fornece sugestões de ponto azul quando uma fórmula contiver algo que não pode ser delegado.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.

Pontos azuis são mostrados somente em fórmulas que operam em fontes de dados delegáveis.Blue dots are only shown on formulas that operate on delegable data sources. Se você não vir um ponto azul e achar que a fórmula não está sendo delegada corretamente, verifique o tipo de fonte de dados em relação à lista de fontes de dados delegáveis acima.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.

ExemplosExamples

Neste exemplo, usaremos uma tabela do SQL Server que contém nomes de produtos, em particular frutas, [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. Na tela Novo, o PowerApps pode criar um aplicativo de três telas básico conectado a essa fonte de dados:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Anote a fórmula para a propriedade Items da galeria.Note the formula for the Gallery's Items property. Ela está usando as funções ClassificarPorColunas e Pesquisar, que podem ser delegadas.It is using SortByColumns and Search functions, both of which can be delegated.

Vamos digitar “Apple” no controle de entrada de texto de pesquisa.Let's type "Apple" into the search text-input control. Se formos muito observadores, momentaneamente veremos pontos movendo-se na parte superior da tela enquanto a nova entrada na nova pesquisa é processada.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. Os pontos em movimento indicam que estamos nos comunicando com o SQL Server:The marching dots indicate that we are communicating with the SQL Server:

Como isso tudo é delegável, mesmo se a tabela [dbo].[Products] contiver milhões de registros, ainda os encontraremos todos, colocando-os na galeria em páginas à medida que o usuário rolar pelos 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.

Você observará que vemos uma correspondência para "Apple" e "Pineapple".You will notice that we are seeing a match for both "Apple" and "Pineapple". A função Pesquisar encontrará um termo de pesquisa em qualquer lugar em uma coluna de texto.The Search function will find a search term anywhere in a text column. Em vez disso, digamos que queremos localizar somente o termo de pesquisa no início do nome da fruta.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Podemos usar outra função delegável, Filtrar, com um termo de pesquisa mais complicado (para manter a simplicidade, removeremos a chamada de ClassificarPorColunas):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Isso parece estar funcionando, apenas "Apples" é exibido corretamente agora e não "Pineapple".This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. No entanto, há um ponto azul sendo exibido ao lado da galeria e há uma linha ondulada azul sob uma parte da 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. Há também um ponto azul sendo exibido na miniatura de tela.There is even a blue dot showing in the screen thumbnail. Se passarmos o cursor no ponto azul ao lado da galeria, veremos o seguinte:If we hover over the blue dot next to the gallery, we see the following:

Embora estejamos usando Filtrar que é uma função delegável, com o SQL Server que é uma fonte de dados delegável, a fórmula que usamos dentro de Filtrar não é delegável.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. Mid e Len não podem ser delegados a qualquer fonte de dados.Mid and Len cannot be delegated to any data source.

Mas funcionou, não foi?But it worked, didn't it? Bem, mais ou menos.Well, kind of. E é por isso que isso é um ponto azul em vez de um ícone de risco amarelo e erro ondulado em vermelho.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Se a tabela [dbo].[Products] contiver menos de 500 registros, então sim, isso terá funcionado perfeitamente.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Todos os registros foram colocados no dispositivo e Filtrar foi aplicado localmente.All records were brought to the device and the Filter was applied locally.

Se, em vez disso, essa tabela contiver mais de 500 registros, somente as frutas que começarem com "Apple" nos primeiros 500 registros da tabela serão exibidas na galeria.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. Se "Apple, Fuji" aparecer como um nome no registro 501 ou 500.001, ela não será encontrada.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.