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 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. Como resultado, a linguagem do Power Apps é 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.

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 com um bom desempenho e garantir que os usuários possam acessar todas as informações necessárias. Tenha cuidado com avisos de delegação que identificam os 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:

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.

Dentro das funções Filter e LookUp, os seguintes itens podem ser usados com as colunas da tabela para selecionar os registros apropriados:

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:

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.

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 dão suporte à delegação, incluindo estas funções importantes:

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 função Average ainda não pode ser delegada e, portanto, será obtida a média somente dos 500 primeiros registros. 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:

  1. Na guia Arquivo, selecione Configurações do aplicativo.
  2. Em Configurações avançadas, altere a configuração Limite de linha de dados para consultas não delegáveis de 1 para 2.000.

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.

Aplicativo de três telas

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.

Controle de entrada de texto de pesquisa

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.

Remover 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:

Passar o mouse sobre o aviso de delegação

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