Partilhar via


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

O Power Apps funciona melhor com uma origem de dados do back-end quando uma consulta do Power Fx é traduzida totalmente numa consulta equivalente que é executada na origem de dados. O Power Apps envia uma consulta que a origem de dados compreende, a origem de dados executa a consulta e o Power Apps obtém os resultados. Por exemplo, a origem de dados filtra os dados e devolve apenas as linhas que cumprem os critérios de filtragem. Quando isso acontece, a consulta é delegada à fonte de dados.

Mas as consultas do Power Fx nem sempre podem ser traduzidas em consultas equivalentes em cada origem de dados. Por exemplo, o Dataverse suporta mais caraterísticas de consulta que o Excel. O Dataverse suporta o operador de consulta "in" (associação), mas o Excel não. Uma consulta é indelegável se usar um recurso que a fonte de dados não suporta. Se qualquer parte de uma expressão de consulta for não delegável, o Power Apps não delega nenhuma parte da consulta.

Quando uma consulta é não delegável, o Power Apps obtém os primeiros 500 registos da origem de dados e, em seguida, executa as ações na consulta. Pode aumentar este limite para 2.000 registos. Alterar o limiteO Power Apps limita o tamanho do resultado a 500 registos para manter o bom desempenho da aplicação. Conjuntos de resultados maiores podem causar problemas de desempenho para a sua aplicação e ao Power Apps.

Mas esta limitação pode ser um problema porque a consulta pode devolver resultados incorretos se a origem de dados tiver mais de 500 ou de 2.000 registos. Por exemplo, se a sua origem de dados tiver 10 milhões de registos e a sua consulta precisar de trabalhar na última parte dos dados, como apelidos que começam por "Z", e a sua consulta utilizar um operador não delegável como distinto, apenas obtém os primeiros 500 ou 2.000 registos. Assim, você obtém resultados incorretos.

Crie as suas consultas do Power Fx utilizando as tabelas delegáveis para a sua origem de dados. Utilize apenas funções de consulta que possam ser delegadas. É a única maneira de manter seu aplicativo funcionando bem e garantir que os usuários obtenham todas as informações de que precisam.

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

Os avisos de delegação ajudam a gerir a sua aplicação de modo a que devolva 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.

Origens de dados delegáveis

A delegação funciona apenas com determinadas fontes de dados tabulares. Se uma origem de dados suportar a delegação, a documentação do conector explica esse suporte. Estas fontes de dados tabulares populares suportam a delegação:

Os livros do Excel importados (com a origem de dados Adicionar dados estáticos à sua aplicação), as coleções e as tabelas armazenadas em variáveis de contexto não precisam de delegação. Esses dados já estão na memória, então você usa a linguagem completa do Power Apps.

Funções delegáveis

Utilize apenas fórmulas que possam ser delegadas. Este artigo lista elementos de fórmula que podem ser delegados. Todas as origens de dados são diferentes e nem todas suportam todos estes elementos. Verifique os avisos de delegação na sua fórmula.

Funções de filtro

Filter, Search, First e LookUp não podem ser delegadas.

Dentro das funções Filter e LookUp, utilize estes elementos com colunas da tabela para selecionar os registos adequados:

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

    In só é delegado para colunas na fonte de dados base. Por exemplo, se a origem de dados for a tabela Contas, Filter(Accounts, Name in ["name1", "name2"]) delega na origem de dados para avaliação. Mas Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) não é delegado, porque a coluna Nome completo está numa tabela diferente (PrimaryContact) do que a Contas. A expressão é avaliada localmente.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valores constantes que são os mesmos em todos os registros, como propriedades de controle e variáveis globais e de contexto.

Também pode utilizar partes da fórmula que são avaliadas como um valor constante para todos os registos. Por exemplo, Left( Language(), 2 ), Date( 2019, 3, 31 ) e Today() não dependem de quaisquer colunas do registo, pelo que devolvem o mesmo valor para todos os registos. Estes valores são enviados para a origem 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, UpdateContext, ou Set, essas funções criam coleções internamente. As coleções são uma lista estática na memória de registos e não podem participar da delegação. Não vê um aviso de delegação.

Limitações da consulta

Procurar e expandir níveis

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

Expanda ou associe até 20 entidades numa única consulta. Se precisar de unir mais de 20 tabelas numa consulta, experimente criar uma vista 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 "ID da Unidade de negócio".Nome 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, esta 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 ordenação

Sort e SortByColumns podem ser delegadas.

Em Sort, a fórmula só pode ser o nome de uma coluna individual e não inclui outros operadores ou funções.

Funções de agregação

Algumas funções de agregação podem ser delegadas com base no suporte de back-end. As funções como Sum, Average, Min e Max podem ser delegadas. As funções de contagem, como CountRows e Count também podem ser delegadas. No entanto, RemoveIf e UpdateIf têm restrições de delegação. Apenas um número limitado de origem de dados suportam a delegação para estas funções. Para mais informações, consulte a Lista de delegação.

Funções não delegáveis

As restantes funções não são delegáveis. Funções notáveis incluem:

Limites não delegáveis

As fórmulas que não puderem ser delegadas são processadas localmente. O processamento local permite-lhe usar a linguagem completa de fórmulas do Power Apps. Mas há uma troca: todos os dados chegam primeiro ao dispositivo, o que pode significar receber uma grande quantidade de dados pela rede. Este processo pode levar tempo e fazer com que a sua aplicação pareça lenta ou sem resposta.

Para evitar esta situação, o Power Apps limita a quantidade de dados que podem ser processados localmente a 500 registos por predefinição. Esse limite permite que você use pequenos conjuntos de dados completamente e trabalhe com grandes conjuntos de dados vendo resultados parciais.

Tenha cuidado ao utilizar esta caraterística, porque pode confundir os utilizadores. Por exemplo, se usar a função Filter com uma fórmula de seleção que não pode ser delegada numa origem de dados com um milhão de registos, apenas os primeiros 500 registos são verificados. Se o registro desejado for o registro 501 ou 500.001, o Filtro não o localizará nem o retornará.

As funções de agregação também podem ser confusas. Por exemplo, se usar Média sobre uma coluna nessa mesma origem de dados com um milhão de registos, Média não pode ser delegada porque a expressão não é delegada (consulte a nota anterior). Apenas os primeiros 500 registos têm a média calculada. Se você não tiver cuidado, um usuário pode pensar que uma resposta parcial é a resposta completa.

Alterar o limite

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

  1. Selecione Definições.
  2. Em Geral, altere a definição Limite da linhas de dados de 1 para 2000.

Em alguns casos, 2.000, 1.000 ou 1.500 registros são suficientes para o seu cenário. Pode aumentar este número para o ajustar às suas necessidades, mas quando o faz o desempenho da sua aplicação pode diminuir, principalmente se tiver tabelas grandes com muitas colunas. Ainda é melhor delegar tanto quanto possível.

Para garantir que seu aplicativo seja dimensionado para grandes conjuntos de dados, defina esse valor como 1. Todos os conteúdos que não puderem ser delegados devolverão um único registo, que é fácil de detetar ao testar a sua aplicação. Isto ajuda a evitar surpresas desagradáveis quando passar da prova do conceito para a fase de produção.

Avisos de delegação

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

Os avisos de delegação aparecem apenas em fórmulas que usam fontes de dados delegáveis. Se não vir um aviso, mas pensar que a sua fórmula não está a ser delegada corretamente, verifique o tipo da sua origem de dados face à lista de origens de dados delegáveis indicada anteriormente neste artigo.

Exemplos

Neste exemplo, gera automaticamente uma aplicação com três ecrãs baseada numa tabela do SQL Server com o nome [dbo].[Fruto]. Para obter informações sobre como gerar a aplicação, pode aplicar princípios semelhantes do artigo sobre o Dataverse para o SQL Server.

Aplicação com três ecrãs.

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

Na caixa de pesquisa, introduza "Maçã".

São apresentados brevemente pontos em movimento junto à parte superior do ecrã enquanto a aplicação comunica com o SQL Server para processar o pedido de pesquisa. Aparecem todos os registos que correspondem aos critérios de pesquisa, mesmo que a origem de dados tenha milhões de registos.

Controlo de introdução de texto de pesquisa.

Os resultados de pesquisa incluem "Maçãs" e "Ananás" porque a função Search procura em toda uma coluna de texto. Para encontrar apenas os registos com o termo de pesquisa no início do nome do fruto, pode utilizar outra função delegável — Filter, com um termo de pesquisa mais específico. Para simplificar, remova a chamada SortByColumns.

Remover chamada SortByColumns.

Os novos resultados incluem "Maçãs", mas não "Ananás". É apresentado um triângulo amarelo junto à galeria, e na miniatura do ecrã, se a barra de navegação à esquerda mostrar miniaturas. Uma linha azul ondulada aparece sob parte da fórmula. Cada um destes elementos indica um aviso. Quando paira o cursor sobre o triângulo amarelo junto à galeria, é apresentada a seguinte mensagem:

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

O SQL Server é uma origem de dados delegável e Filter é uma função delegável. No entanto, Mid e Len não podem ser delegadas a nenhuma origem de dados.

Mas funciona, não? Mais ou menos. É por isso que se trata de um aviso e não uma linha ondulada vermelha.

  • Se a tabela tiver menos de 500 registos, a fórmula funciona na perfeição. Todos os registos são importados para o dispositivo e a função Filter é aplicada localmente.
  • Se a tabela tiver mais de 500 registos, a fórmula não devolve o registo 501 e posteriores, mesmo que corresponda aos critérios.

Consultar também