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

Noções básicas de estimativa

O Power Apps funciona melhor com uma fonte de dados de back-end quando uma consulta do Power Fx pode ser totalmente traduzida em uma consulta equivalente que possa ser executada na fonte de dados. O Power Apps envia uma consulta que a fonte de dados entende, a consulta é executada na fonte de dados e os resultados da consulta são retornados ao Power Apps. Por exemplo, a fonte de dados pode fazer o trabalho de filtrar os dados na fonte de dados e retornar somente as linhas que atendam aos critérios de filtro. Quando isso funciona corretamente, dizemos que a consulta é delegada à fonte de dados para fazer o trabalho da consulta.

No entanto, as consultas do Power Fx nem sempre podem ser traduzidas 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 oferece suporte ao operador de consulta 'em' (associação) e o Excel não. Dizemos que a consulta é não delegável se uma consulta usar um recurso ao qual a fonte de dados não ofereça suporte. Em geral, se qualquer parte de uma expressão de consulta não for delegável, não delegaremos nenhuma parte da consulta.

Quando uma consulta não é delegável, o Power Apps obtém somente os primeiros 500 registros da fonte de dados e depois executa as ações na consulta. Este limite pode ser aumentado para 2.000 registros Alteração do limite O Power Apps limita o tamanho do resultado a 500 registros para preservar o bom desempenho do Power Apps. Descobrimos, por meio da experimentação, que conjuntos de resultados maiores que esses tamanhos introduzem problemas de desempenho para seu aplicativo e para o Power Apps em geral.

No entanto, essa limitação pode ser um problema, pois a consulta pode retornar resultados incorretos se os dados na fonte de dados excederem 500/2.000 registros. Por exemplo, considere o exemplo em que sua fonte de dados tem 10 milhões de registros e sua consulta precise operar na última parte dos dados. (Por exemplo, os nomes de família que começam com 'Z'). No entanto, sua consulta tem um operador não delegável (por exemplo, distinto). Nesse caso, você obtém somente os primeiros registros 500/2.000 e tem resultados incorretos.

Crie suas consultas do Power Fx usando as tabelas delegáveis para sua fonte de dados. Você deve usar somente as funções de consulta 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 trabalhar 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 ajudarão você a gerenciar seu aplicativo para que ele tenha resultados corretos. Se os dados em sua fonte de dados excederem 500 registros e uma função não puder ser delegada, o Power Fx marcará a fórmula com um sublinhado azul.

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.

Funções de filtro

As funções**Filtrar**, Pesquisar, Primeiro 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:

Limitações de consulta

Níveis de pesquisa

O Power Apps oferece suporte a dois níveis de pesquisa. Isso significa que uma expressão de consulta do Power Fx pode ter, no máximo, duas funções de pesquisa. Essa limitação é para preservar o desempenho. Se uma expressão de consulta incluir uma pesquisa, o Power Apps primeiro fará uma consulta para obter a tabela base. Em seguida, ele fará uma segunda consulta que expande a primeira tabela com as informações de pesquisa. Oferecemos suporte a mais um nível além disso, como máximo. No entanto, para o modo offline, oferecemos suporte somente a um nível de expansão de pesquisa.

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

É importante colocar a propriedade de uma entidade a ser comparada em uma expressão no lado esquerdo "LHS" de uma equação. Para ilustrar, no exemplo abaixo, a propriedade da entidade 'Business unit ID'.Name é um valor de propriedade e deve ser colocado no LHS da expressão a ser avaliada. A expressão a seguir será bem-sucedida:

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 será:

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

Algumas funções agregadas podem ser delegadas dependendo do suporte no back-end. Sum, Average, Min e Max podem ser delegadas. Funções de contagem como CountRows e Contagem também podem ser delegadas. No momento, somente um número limitado de fontes de dados dá suporte a essas funções para delegação. Para obter mais informações, consulte Lista de delegações.

O suporte às delegações**RemoveIf** e UpdateIf está em fase experimental e fica desligado por padrão.

funções não delegáveis

Todas as outras funções não oferecem 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. O processamento local 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:

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

Em alguns casos, você sabe 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 artigo.

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 no artigo 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" 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 "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

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).