Noções básicas sobre delegação em um aplicativo de tela
O Power Apps inclui um conjunto avançado de funções para filtragem, classificação e formatação de tabelas de dados em um aplicativo de tela: as funções Filter, Sort e AddColumns são apenas algumas delas. Com essas funções, você pode fornecer aos usuários o acesso com foco às informações de que eles precisam. 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.
O segredo para a criação de aplicativos eficientes é minimizar a quantidade de dados que precisa ser inserida no dispositivo. Talvez você precise de apenas alguns dos milhões de registros, ou um único valor agregado pode representar milhares de registros. Ou talvez somente o primeiro conjunto de registros pode ser recuperado e o restante trazido à medida que o usuário demonstra que quer mais. Ter foco pode reduzir consideravelmente a capacidade de processamento, a memória e a largura de banda da 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 celular.
Delegação é onde a expressividade das fórmulas dos Power Apps atende às necessidades para minimizar a movimentação de dados pela rede. Em resumo, o Power Apps delegará o processamento de dados para a fonte de dados, em vez de mover os dados para o aplicativo para o processamento local.
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 Power Apps pode ser delegado para cada fonte de dados. A linguagem do Power Apps imita a das fórmulas do Excel, criada 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. Como resultado, a linguagem do Power Apps é muito mais rica do que a maioria das fontes de dados pode suportar, incluindo mecanismos de banco de dados eficientes, como o SQL Server.
Trabalhar com grandes conjuntos de dados requer o uso de fontes de dados e fórmulas que podem ser delegadas. É a única maneira de manter seu aplicativo funcionando bem e garantir o acesso dos usuários a todas as informações necessárias. Preste atenção aos avisos de delegação que identificam locais em que a delegação não é possível. 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 aplicativo pode processar os dados localmente caso a fórmula não possa ser delegada.
Observação
Os avisos de delegação eram marcados anteriormente no Power Apps como sugestões de "ponto azul", mas desde então as sugestões de delegação foram reclassificadas como avisos. Se os dados da fonte de dados excederem 500 registros e uma função não puder ser delegada, o Power Apps poderá não conseguir recuperar todos os dados e seu aplicativo poderá ter resultados incorretos. Os avisos de delegação ajudarão você a gerenciar seu aplicativo para que ele tenha resultados corretos.
Fontes de dados delegáveis
A delegação tem suporte apenas para determinadas fontes de dados tabulares. Se um fonte de dados der suporte à delegação, a documentação do conector descreverá esse suporte. Por exemplo, estas fontes de dados tabulares são as mais populares e oferecem suporte à delegação:
- Funções e operações delegáveis do Power Apps para o Microsoft Dataverse
- Funções e operações delegáveis do Power Apps para o SharePoint
- Funções e operações delegáveis do Power Apps para o SQL Server
- Funções e operações delegáveis do Power Apps para o Salesforce
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. Todos esses dados já estão na memória e a linguagem completa do Power Apps pode ser aplicada.
Funções delegáveis
A próxima etapa será usar somente as fórmulas que podem ser delegadas. Os elementos da fórmula que podem ser delegados estão incluídos aqui. No entanto, cada fonte de dados é diferente e nem todas elas oferecem suporte a todos esses elementos. Verifique se há avisos de delegação na fórmula específica.
Essas listas serão alteradas ao longo do tempo. Estamos trabalhando para oferecer suporte a mais funções e operadores com a delegação.
Funções de filtro
As funções Filter, Search e LookUp podem ser delegadas.
Nas funções Filter e LookUp, os seguintes itens podem ser usados com as colunas da tabela para selecionar os registros apropriados:
- And (incluindo &&), Or (incluindo ||), Not (incluindo !)
- In
Observação
In só é delegada às colunas na origem dos dados de base. Por exemplo, se a fonte de dados for a tabela Contas,
Filter(Accounts, Name in ["name1", "name2"])será delegado à fonte de dados para avaliação. Mas,Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])não é delegado, pois a coluna Nome completo está em uma tabela diferente (PrimaryContact) de Contas. A expressão é avaliada localmente. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Os valores constantes que são iguais em todos os registros, como propriedades de controle e variáveis globais e de contexto.
Você também pode usar as partes da sua fórmula avaliadas como um valor constante para todos os registros. Por exemplo, Left( Language(), 2 ), Date( 2019, 3, 31 ) e Today() não dependem de nenhuma coluna do registro e, portanto, retornam o mesmo valor para todos os registros. Esses valores podem ser enviados para o fonte de dados como uma constante e não bloquearão a delegação.
A lista anterior não inclui estes itens notáveis:
- If
- *, /, Mod
- Concatenate (incluindo &)
- ExactIn
- Funções de manipulação da cadeia de caracteres: Lower, Upper, Left, Mid, Len, ...
- Sinais: Location, Acceleration, Compass, ...
- Voláteis: Rand, ...
- Coleções
Funções de classificação
Sort e SortByColumns podem ser delegadas.
Em Sort, a fórmula só pode ser o nome de uma única coluna e não pode incluir outros operadores ou funções.
Funções de agregação
Sum, Average, Min e Max podem ser delegadas. No momento, somente um número limitado de fontes de dados dá suporte a essa delegação; confira a lista de delegação para obter detalhes.
Observação
Se uma expressão não for delegada, ela só funcionará nos primeiros 500 registros (configuráveis até 2.000, consulte Alteração do limite) recuperados da fonte de dados em vez de delegar o processamento de todos os dados na fonte de dados.
Funções de contagem como CountRows, CountA e Count não podem ser delegadas.
Outras funções de agregação como StdevP e VarP não podem ser delegadas.
Funções de modelagem de tabela
AddColumns, DropColumns, RenameColumns e ShowColumns são parcialmente compatíveis com a delegação. As fórmulas em seus argumentos podem ser delegadas. No entanto, a saída dessas funções está sujeita ao limite de registro de não delegação.
Como neste exemplo, os criadores com frequência usam AddColumns e LookUp para mesclar informações de uma tabela em outra, o que é normalmente conhecido como uma junção na linguagem de banco de dados.
AddColumns( Products,
"Supplier Name",
LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name
)
Embora Products e Suppliers possam ser fontes de dados delegáveis e LookUp seja uma função delegável, a saída da função AddColumns não é delegável. O resultado da fórmula inteira está limitado à primeira parte da fonte de dados Products. Como a função LookUp 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 ela seja grande.
Se você usar AddColumns dessa maneira, LookUp deverá fazer chamadas separadas para o fonte de dados para cada um daqueles primeiros registros em Products, o que causa muito ruído na rede. E se Suppliers for pequeno o suficiente e não mudar com frequência, você poderá chamar a função Collect em OnStart para armazenar em cache a fonte de dados no seu aplicativo quando ele for iniciado. Como alternativa, você pode reestruturar seu aplicativo para extrair os registros relacionados apenas quando o usuário os solicitar.
Funções não delegáveis
Todas as outras funções não oferecem suporte à delegação, incluindo estas funções importantes:
- First, FirstN, Last, LastN
- Choices
- Concat
- Collect, ClearCollect
- CountIf, RemoveIf, UpdateIf
- GroupBy, Ungroup
Limites não delegáveis
As fórmulas que não podem ser delegadas serão processadas localmente. Isso permite que toda a gama de linguagens de fórmula do Power Apps seja usada. 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. Isso pode levar tempo, dando a impressão de que o aplicativo está lento ou de que houve uma possível falha.
Para evitar isso, o Power Apps impõe um limite para a quantidade de dados que podem ser processados localmente: 500 registros, por padrão. 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.
Obviamente, tenha cuidado ao usar esse recurso, pois ele pode confundir os usuários. Por exemplo, considere uma função Filter com uma fórmula de seleção que não pode ser delegada em uma fonte de dados que contém um milhão de registros. Como a filtragem é feita localmente, somente os primeiros 500 registros são examinados. Se o registro desejado for 501 ou 500.001, ele não será considerado nem retornado por Filter.
As funções de agregação também podem gerar confusão. Considere a função Average em uma coluna da mesma fonte de dados de um milhão de registros. A Média não pode ser delegada nesse caso, pois a expressão não é delegada (consulte a nota anterior); portanto, apenas os primeiros 500 registros têm a média calculada. Se você não tomar cuidado, uma resposta parcial poderá ser interpretada erroneamente como uma resposta completa por um usuário do aplicativo.
Alteração do limite
500 é o número padrão de registros, mas você pode alterar esse número para um aplicativo inteiro:
- Selecione Configurações.
- Em Geral, altere a configuração Limite de linha de dados de 1 a 2000.
Em alguns casos, você saberá que 2.000 (ou 1.000 ou 1.500) atenderá às necessidades do cenário. Com cautela, você pode aumentar esse número para ajustá-lo ao seu cenário. Conforme você aumenta esse número, o desempenho do aplicativo pode diminuir, principalmente para tabelas grandes com muitas colunas. Ainda assim, a melhor resposta é delegar o máximo possível de consultas.
Para garantir que o aplicativo possa ser dimensionado para conjuntos de dados grandes, reduza essa configuração para 1. Tudo que não puder ser delegado retornará um único registro, o que deve ser fácil de detectar ao testar o aplicativo. Isso pode ajudar a evitar surpresas ao tentar levar um aplicativo de prova de conceito para a produção.
Avisos de delegação
Para facilitar o conhecimento do que está e o que não está sendo delegado, o Power Apps fornece um aviso (triângulo amarelo) quando você cria uma fórmula com algo que não pode ser delegado.
Os avisos de delegação são exibidos somente em fórmulas que operam em fontes de dados delegáveis. 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, anteriormente neste tópico.
Exemplos
Neste exemplo, você gerará automaticamente um aplicativo de três telas baseado em uma tabela do SQL Server chamada [dbo].[Fruit]. Para obter informações sobre como gerar o aplicativo, aplique princípios semelhantes do tópico sobre o Dataverse ao SQL Server.

A propriedade Items da galeria está definida como uma fórmula que contém as funções SortByColumns e Search, que podem ser delegadas.
Na caixa de pesquisa, digite "Apple".
Pontos em movimento aparecem momentaneamente na parte superior da tela, enquanto o aplicativo se comunica com o SQL Server para processar a solicitação de pesquisa. Todos os registros que atenderem aos critérios de pesquisa serão exibidos, mesmo se a fonte de dados contiver milhões de registros.

Os resultados da pesquisa incluem "Apples", "Crab apples" e "Pineapple" porque a função Search busca em todos os lugares de uma coluna de texto. Se quiser encontrar somente os registros que contenham o termo de pesquisa no início do nome da fruta, use outra função delegável, Filtrar, com um termo de pesquisa mais complicado. Para manter a simplicidade, remova a chamada a SortByColumns.

Os novos resultados incluem "Apples", mas não "Crab apples" nem "Pineapple". No entanto, um triângulo amarelo é exibido ao lado da galeria (e na miniatura de tela, caso a barra de navegação à esquerda mostre miniaturas) e uma linha ondulada azul é exibida em uma parte da fórmula. Cada um desses elementos indica um aviso. Se você passar o mouse sobre o triângulo amarelo ao lado da galeria, esta mensagem será exibida:

O SQL Server é uma fonte de dados delegável e Filter é uma função delegável. No entanto, Mid e Len não podem ser delegados para nenhuma fonte de dados.
Mas funcionou, não foi? Bem, mais ou menos. E é por esse motivo que isso é um aviso e não um rabisco vermelho ondulado.
- Se a tabela contiver menos de 500 registros, a fórmula funcionará perfeitamente. Todos os registros foram inseridos no dispositivo e Filter foi aplicado localmente.
- Se a tabela contiver mais de 500 registros, a fórmula não retornará o registro 501 ou posterior, mesmo se ele corresponder aos critérios.
Consulte também
Impacto do uso de funções não delegáveis e limites de linha de dados inadequados no desempenho
Dicas de desempenho e práticas recomendadas para usar a delegação
Observação
Você pode nos falar mais sobre suas preferências de idioma para documentação? Faça uma pesquisa rápida. (Observe que esta pesquisa está em inglês)
A pesquisa levará cerca de sete minutos. Nenhum dado pessoal é coletado (política de privacidade).
Comentários
Enviar e exibir comentários de