Avisos de delegação, limites e funções não delegáveis

Concluído

O Power Apps usa indicadores visuais para ajudar você, o criador do app, a entender quando a delegação está ocorrendo. O maker portal também tem uma configuração que você pode ajustar para aumentar a quantidade de dados retornados quando a delegação não é possível.

Avisos de delegação

Sempre que você usa uma função não delegável, o Power Apps a sublinha com uma linha ondulada e exibe um triângulo de aviso amarelo, conforme mostrado abaixo.

Captura de tela de função não delegável com linha azul e triângulo de aviso amarelo.

Isso retorna uma indicação visual nítida de que a delegação não está ocorrendo, o que significa que talvez você não veja todos os seus dados. É importante entender algumas coisas sobre esse indicador visual.

  • O Power Apps mostrará esse aviso, seja qual for o tamanho da fonte de dados. Mesmo que a fonte de dados tenha apenas alguns itens e a delegação não esteja tecnicamente causando problemas, o aviso ainda será mostrado. Lembre-se de que os primeiros 500 itens são retornados por padrão e processados localmente. O aviso é exibido sempre que sua fórmula não é delegada.

  • O indicador de aviso é processado somente no primeiro item que causa o problema de delegação. Na captura de tela acima, observe que o único campo com sublinhado ondulado é "FirstName". Isso porque ele foi o primeiro item que causou a delegação. "LastName" também causaria delegação nesse cenário, mas não está sublinhado. Isso pode gerar confusão porque as pessoas tentam solucionar qual é a diferença entre FirstName e LastName, em vez do problema real, que é a função Pesquisa. Em caso de confusão, reorganize sua fórmula para validar que o campo que for mostrado primeiro, mostra o problema.

    Captura de tela do indicador de Aviso do primeiro item que causou a delegação.

  • Esse indicador visual só aparece quando você está no maker portal, desenvolvendo o aplicativo. Quando um usuário está executando o aplicativo, ele não recebe nenhuma notificação de que a delegação não está ocorrendo e que ele pode estar vendo apenas resultados parciais. Tenha isso em mente ao projetar seu aplicativo e crie-o adequadamente.

Alterar o número de registros retornados quando a delegação não está disponível

Por qualquer motivo, se uma fórmula não puder ser delegada para a fonte de dados, o Power Apps recuperará os primeiros 500 registros dessa fonte de dados e processará a fórmula localmente. O Power Apps permite ajustar esse limite entre 1 e 2000. Você pode ajustar esse limite nas configurações avançadas.

  1. No Maker Portal, selecione Configurações no menu na parte superior da tela. Se Configurações não estiver visível, clique nas reticências.

  2. Em Configurações do aplicativo, mantenha a guia Geral selecionada e role para baixo até o Limite da linha de dados.

  3. Defina o Limite da linha de dados para consultas não delegáveis com qualquer valor entre 1 e 2000.

  4. Após definir o limite, selecione fechar, na parte inferior direita, para salvar sua alteração e retornar ao Maker Portal.

Captura de tela das Configurações Avançadas do Power Apps com limite de linha de dados definido.

Há dois motivos principais para ajustar esse limite.

  • Para aumentar o limite se você trabalha com dados em que 500 registros não são suficientes, mas menos de 2000 são. Por exemplo, se você tiver uma lista de clientes e souber que nunca terá mais de 1000 clientes, poderá projetar seu aplicativo para ignorar a delegação e sempre retornar todos os 1000 registros.

  • Para diminuir o limite para 1 ou 10 para ajudar nos testes. Se você encontrar situações em que não tem certeza se uma função não delegável está causando problemas no seu aplicativo, diminua o limite e teste. Se você definir o limite para 1 e sua galeria estiver apresentando apenas um registro, você saberá que tem uma função não delegável. Essa configuração acelera o processo de solução de problemas.

Funções não delegáveis

Na unidade anterior, você aprendeu sobre as funções que são delegáveis e como elas se relacionam às diversas fontes de dados. Estas outras funções, não abordadas nessa unidade, não são delegáveis. Veja abaixo funções importantes que não permitem delegação.

  • First, FirstN, Last, LastN

  • Choices

  • Concat

  • Collect, ClearCollect (nenhuma dessas funções retorna um aviso de delegação, mas elas não são delegáveis)

  • CountIf, RemoveIf, UpdateIf

  • GroupBy, Ungroup

Todas essas funções não são delegáveis. Portanto, ao adicioná-las a uma fórmula, você pode converter uma função delegável em não delegável, conforme mostrado no exemplo anterior.

Funções delegáveis parcialmente aceitas

As funções de modelagem de tabela abaixo são parcialmente delegáveis. Isso significa que as fórmulas em seus argumentos podem ser delegadas. No entanto, a saída dessas funções está sujeita ao limite de registros de não delegação.

  • AddColumns

  • DropColumns

  • ShowColumns

  • RenameColumns

Um padrão comum é usar AddColumns e LookUp para mesclar informações de uma tabela em outra, normalmente chamado de Junção no jargão de bancos de dados. Por exemplo:

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

Embora Products e Suppliers sejam fontes de dados potencialmente delegáveis, e a função LookUp seja delegável, a função AddColumns tem capacidade de delegação parcial. Portanto, o resultado de toda a fórmula permanece restrito ao segmento inicial da fonte de dados Products.

Embora a função LookUp e sua fonte de dados associada permitam a delegação, facilitando a descoberta de fornecedores em um vasto conjunto de dados, há uma ressalva. LookUp necessita de consultas separadas à fonte de dados para cada um dos registros iniciais em Produtos, resultando em maior atividade de rede. No entanto, se o conjunto de dados de Fornecedores é relativamente pequeno e permanece estável, uma abordagem alternativa envolve armazenar em cache a fonte de dados no aplicativo. Empregar uma chamada Collect durante a inicialização do aplicativo (usando OnVisible na tela de abertura) permite operações LookUp subsequentes diretamente na fonte de dados em cache, mitigando a vibração da rede.