Compartilhar via


Limitações de consulta: delegação e limites de consulta

O Power Apps funciona melhor com uma fonte de dados back-end quando uma consulta do Power Fx é totalmente convertida em uma consulta equivalente executada na fonte de dados. O Power Apps envia uma consulta que a fonte de dados entende, a fonte de dados executa a consulta e o Power Apps obtém os resultados. Por exemplo, a fonte de dados filtra os dados e retorna apenas as linhas que atendem aos critérios de filtro. Quando isso acontece, a consulta é delegada à fonte de dados.

Mas as consultas do Power Fx nem sempre podem ser convertidas em consultas equivalentes em todas as fontes de dados. Por exemplo, o Dataverse oferece suporte a mais recursos de consulta do que o Excel. O Dataverse dá suporte ao operador de consulta 'in' (associação), mas o Excel não. Uma consulta é não delegável se usar um recurso que a fonte de dados não oferece suporte. Se qualquer parte de uma expressão de consulta for indelegável, o Power Apps não delegará nenhuma parte da consulta.

Quando uma consulta é não delegável, o Power Apps obtém os primeiros 500 registros da fonte de dados e, em seguida, executa as ações na consulta. Você pode aumentar esse limite para 2.000 registros. Alterar o limiteO Power Apps limita o tamanho do resultado a 500 registros para manter o bom desempenho do aplicativo. Conjuntos de resultados maiores podem causar problemas de desempenho para seu aplicativo e o Power Apps.

Mas essa limitação pode ser um problema porque a consulta poderá retornar resultados incorretos se a fonte de dados tiver mais de 500 ou 2.000 registros. Por exemplo, se sua fonte de dados tiver 10 milhões de registros e sua consulta precisar trabalhar na última parte dos dados, como nomes de família que começam com 'Z', e sua consulta usar um operador indelegável como distinto, você receberá apenas os primeiros 500 ou 2.000 registros. Portanto, você obtém resultados incorretos.

Crie suas consultas do Power Fx usando as tabelas delegáveis para a fonte de dados. Use somente as funções de consulta que podem ser delegadas. É a única maneira de manter seu aplicativo com bom desempenho e garantir que os usuários obtenham todas as informações necessárias.

Preste atenção aos avisos de delegação que mostram onde a delegação não é possível. Se você trabalha com pequenos conjuntos de dados (menos de 500 registros), pode usar qualquer fonte de dados e fórmula porque o aplicativo processa dados localmente se a fórmula não for delegada.

Nota

Avisos de delegação ajudam você a gerenciar seu aplicativo para que ele retorne resultados corretos. Se os dados na fonte de dados excederem 500 registros e uma função não for delegada, o Power Fx marcará a fórmula com um sublinhado azul.

Fontes de dados delegáveis

A delegação funciona apenas com determinadas fontes de dados tabulares. Se uma fonte de dados oferecer suporte à delegação, a documentação do conector explica esse suporte. Essas fontes de dados tabulares populares dão 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 precisam da delegação. Esses dados já estão na memória, portanto, você usa a linguagem completa do Power Apps.

Funções delegáveis

Use apenas fórmulas que possam ser delegadas. Este artigo lista os elementos de fórmula que podem ser delegados. 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.

Funções de filtro

Filtrar, Pesquisar, Primeiro e LookUp são funções que podem ser delegadas.

Nas funções Filtrar e Pesquisar, os seguintes itens podem ser usados com as colunas da tabela para selecionar os registros apropriados:

  • And (incluindo &&), Or (incluindo ||), Not (incluindo !)
  • In> [!NOTE]

    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
  • 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, eles retornam o mesmo valor para todos os registros. Esses valores são enviados para o fonte de dados como uma constante e não bloqueiam a delegação.

A lista anterior não inclui estes itens notáveis:

Delegação e coleções

Quando você usa With, UpdateContextou Set, essas funções criam coleções internamente. As coleções são uma lista estática na memória de registros e não podem participar da delegação. Você não vê um aviso de delegação.

Limitações de consulta

Pesquisar e expandir níveis

O Power Apps permite usar até dois níveis de pesquisa. A expressão de consulta do Power Fx pode incluir, no máximo, duas funções de pesquisa para manter o desempenho. Quando uma expressão de consulta inclui uma consulta, o Power Apps primeiro consulta a tabela base e, em seguida, executa uma segunda consulta para expandir a primeira tabela com as informações de pesquisa. Um nível adicional além disso é compatível como o máximo. Para cenários offline, há suporte para apenas um nível de expansão de pesquisa.

Expanda ou una até 20 entidades em uma única consulta. Se você precisar unir mais de 20 tabelas em uma consulta, tente criar uma exibição no servidor de dados, se possível.

Avaliação da expressão – a propriedade da entidade deve estar no lado esquerdo "LHS" do operador de igualdade

Coloque a propriedade de uma entidade a ser comparada no lado esquerdo (LHS) de uma equação. Por exemplo, na expressão a seguir, a propriedade da entidade 'Business unit ID'.Name está no LHS e a expressão funciona:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

No entanto, essa expressão não funciona:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

Funções de classificação

Sort e SortByColumns podem ser delegadas.

Em Classificar, 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

Algumas funções agregadas podem ser delegadas com base no suporte back-end. Funções como Sum, Average, Min e Max podem ser delegadas. Funções de contagem como CountRows and Count, também podem ser delegadas. No entanto, RemoveIf e UpdateIf têm restrições de delegação. Somente um número limitado de fontes de dados oferece suporte à delegação para essas funções. Para obter mais informações, consulte Lista de delegações.

Funções não delegáveis

Todas as outras funções não podem delegar. Funções notáveis incluem:

Limites não delegáveis

As fórmulas que não podem ser delegadas são processadas localmente. O processamento local permite que você use a linguagem de fórmula completa do Power Apps. Mas há uma troca: todos os dados chegam primeiro ao dispositivo, o que pode significar receber muitos dados pela rede. Esse processo pode levar tempo e fazer com que seu aplicativo pareça lento ou sem resposta.

Para evitar isso, o Power Apps limita a quantidade de dados que podem ser processados localmente até 500 registros, por padrão. Esse limite permite que você use conjuntos de dados pequenos completamente e trabalhe com grandes conjuntos de dados vendo resultados parciais.

Tenha cuidado ao usar esse recurso, pois ele pode confundir os usuários. Por exemplo, se você usar a função Filter com uma fórmula de seleção que pode ser delegada para uma origem de dados comum milhão de registros, somente os primeiros 500 registros são digitalizados. Se o registro desejado for o registro 501 ou 500.001, Filter não o encontrará nem o retornará.

As funções de agregação também podem gerar confusão. Por exemplo, se você usar Média em uma coluna nessa mesma fonte de dados de milhões de registros, a Média não poderá ser delegada porque a expressão não é delegada (consulte a observação anterior). Apenas os primeiros 500 registros são calculados em média. Se você não tiver cuidado, um usuário pode achar que uma resposta parcial é a resposta completa.

Alteração do limite

O número padrão de registros é 500, mas você pode alterar esse número para seu aplicativo:

  1. Selecione Configurações.
  2. Em Geral, altere a configuração Limite de linha de dados de 1 a 2000.

Em alguns casos, 2.000, 1.000 ou 1.500 registros são suficientes para seu cenário. É possível aumentar esse número para atender às suas necessidades, mas, ao fazer isso, o desempenho do seu aplicativo pode diminuir, especialmente para tabelas largas com muitas colunas. Ainda é melhor delegar o máximo possível.

Para garantir que seu aplicativo seja dimensionado para grandes conjuntos de dados, defina esse valor como 1. Tudo que não puder ser delegado retornará um único registro, o que é fácil de detectar ao testar o aplicativo. Isso ajuda a evitar surpresas ao tentar mover um aplicativo de prova de conceito para a produção.

Avisos de delegação

O Power Apps mostra um aviso (triângulo amarelo) quando você cria uma fórmula que não pode ser delegada. É mais fácil saber o que é ou não é delegado.

Os avisos de delegação aparecem apenas em fórmulas que usam fontes de dados delegadas. Se você não vir um aviso, mas achar que a fórmula não está sendo delegada, verifique o tipo de fonte de dados em relação à lista de fontes de dados delegáveis, anteriormente neste artigo.

Exemplos

Neste exemplo, você gerará automaticamente um aplicativo de três telas baseado em uma tabela do SQL Server chamada [dbo].[Fruit]. Para saber como gerar o aplicativo, aplique princípios semelhantes do artigo sobre o Dataverse ao SQL Server.

Aplicativo de três telas.

A propriedade Items da galeria usa uma fórmula com as funções SortByColumns e Search, que podem ser delegadas.

Na caixa de pesquisa, digite "Apple".

Pontos em marcha aparecem brevemente próximo ao topo da tela enquanto o aplicativo se comunica com o SQL Server para processar a solicitação de pesquisa. Todos os registros que correspondem aos critérios de pesquisa são exibidos, mesmo se a fonte de dados tiver milhões de registros.

Controle de entrada de texto de pesquisa.

Os resultados da pesquisa incluem "Apples" e "Pineapple" porque a função Search busca em todos os lugares de uma coluna de texto. Para encontrar somente os registros que contenham o termo de pesquisa no início do nome da fruta, use outra função delegável, Filter, 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 "Pineapple". Um triângulo amarelo aparecerá ao lado da galeria e na miniatura da tela se a barra de navegação esquerda mostrar miniaturas. Uma linha ondulada azul aparece sob parte da fórmula. Cada um desses elementos indica um aviso. Quando você passa o mouse sobre o triângulo amarelo ao lado da galeria, esta mensagem será exibida:

Passar o mouse sobre o aviso de delegação.

SQL Server é uma fonte de dados delegável e Filter é uma função delegável. Porém, Mid e Len não podem ser delegados a qualquer fonte de dados.

Mas funciona, não é? Mais ou menos isso. É por esse motivo que isso é um aviso e não um rabisco vermelho ondulado.

  • Se a tabela tiver 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