Limitações de consulta: limites de consulta e delegação
Compreender a delegação
O Power Apps funciona melhor com uma origem de dados de back-end quando uma consulta do Power Fx pode ser totalmente traduzida numa consulta equivalente que pode ser executada na origem de dados. O Power Apps envia uma consulta que a origem de dados compreende, a consulta é efetuada na origem de dados e os resultados da consulta são devolvidos ao Power Apps. Por exemplo, a origem de dados poderá fazer o trabalho de filtrar os dados na origem de dados e devolver apenas as linhas que satisfazem os critérios de filtragem. Quando funciona corretamente, dizemos que a consulta é delegada para a origem de dados para fazer o trabalho da consulta.
No entanto, as consultas do Power Fx nem sempre podem ser convertidas em consultas equivalentes em todas as origens 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) e o Excel não. Dizemos que a consulta é não delegável se uma consulta utilizar uma caraterística que a origem de dados não suporta. Em geral, se alguma parte de uma expressão de consulta for não delegável, não delegamos nenhuma parte da consulta.
Quando uma consulta é não delegável, o Power Apps obtém apenas os primeiros 500 registos da origem de dados e, em seguida, efetua as ações na consulta. Este limite pode ser aumentado para 2.000 registos ao Alterar o limite. O Power Apps limita o tamanho do resultado para 500 registos para preservar o bom desempenho do Power Apps. Descobrimos através de experimentação que conjuntos de resultados maiores do que estes tamanhos introduzem problemas de desempenho na sua aplicação e no Power Apps em geral.
No entanto, esta limitação pode ser um problema, uma vez que a consulta poderá devolver resultados incorretos se os dados na origem de dados excederem 500/2000 registos. Por exemplo, considere o exemplo em que a sua origem de dados tem 10 milhões de registos e a sua consulta precisa de operar na última parte dos dados. (Por exemplo, os apelidos que começam por "Z"). No entanto, a consulta tem um operador não delegável (por exemplo, distinto). Neste caso, só obtém os primeiros 500/2000 registos e obtém resultados incorretos.
Crie as suas consultas do Power Fx utilizando as tabelas delegáveis para as suas origem de dados. Só deve utilizar funções de consulta que possam ser delegadas. É a única forma de manter o bom desempenho da sua aplicação e para garantir aos utilizadores o acesso a todas as informações de que necessitam.
Preste atenção aos avisos de delegação que identificam os locais onde a delegação não é possível. Se trabalhar com conjuntos de dados pequenos (menos de 500 registos), pode utilizar qualquer origem de dados e fórmula porque a aplicação pode processar dados localmente se não for possível delegar a fórmula.
Nota
Os avisos de delegação ajudam-no a gerir a sua aplicação de modo a que apresente resultados corretos. Se os dados existentes na sua origem de dados excederem os 500 registos e uma função não puder ser delegada, o Power Fx marcará a fórmula com um sublinhado azul.
Origens de dados delegáveis
A delegação é suportada apenas para determinadas origens de dados tabulares. Se uma origem de dados suportar a delegação, a documentação do conector explica esse suporte. Por exemplo, estas origens de dados tabulares são as mais populares e suportam a delegação:
- Funções e operações delegáveis Power Apps para Microsoft Dataverse
- Funções e operações delegáveis Power Apps para SharePoint
- Funções e operações delegáveis Power Apps para Servidor SQL
- Funções e operações delegáveis Power Apps para Salesforce
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. Todos estes dados já se encontram na memória e a linguagem completa do Power Apps pode ser aplicada.
Funções delegáveis
O passo seguinte consiste em utilizar apenas as fórmulas que podem ser delegadas. Incluímos aqui os elementos de fórmulas que podem ser delegados. No entanto, 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 específica.
Funções de filtro
Filter, Search, First e LookUp não podem ser delegadas.
Dentro das funções Filter e LookUp, pode utilizar estes elementos com colunas da tabela para selecionar os registos adequados:
- And (incluindo &&), Or (incluindo ||), Not (incluindo !)
- In
Nota
In is only delegated for columns on the base data source. Por exemplo, se a origem de dados for a tabela Contas, então
Filter(Accounts, Name in ["name1", "name2"])
delega na origem de dados para avaliação. No entanto,Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
não delega, uma vez que a coluna Fullname está numa tabela diferente (PrimaryContact) do que as Contas. A expressão é avaliada localmente. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Valores constantes que são os mesmos em todos os registos, tais como propriedades de controlos e variáveis de contexto e globais.
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 e, por isso, devolvem o mesmo valor para todos os registos. Estes valores podem ser enviados para a origem de dados como uma constante e não bloqueia a delegação.
A lista não inclui estes itens importantes:
- If
- *, /, Mod
- Colunas de operações de valor Texto Valor
- Concatenate (incluindo &)
- ExactIn
- Funções de manipulação de cadeias: Lower, Upper, Left, Mid, Len, ...
- Sinais: Location, Acceleration, Compass, ...
- Voláteis: Rand, ...
- Collections
Limitações da consulta
Níveis da procura
O Power Apps suporta dois níveis de procura. Isto significa que uma expressão de consulta do Power Fx pode ter, no máximo, duas funções de procura. Esta limitação destina-se a preservar o desempenho. Se uma expressão de consulta incluir uma procura, o Power Apps começa por consultar para obter a tabela base. Em seguida, realiza uma segunda consulta que expande a primeira tabela com as informações da procura. Suportamos mais um nível além disso como máximo. No entanto, para offline, suportamos apenas um nível de expansão da procura.
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 numa expressão no lado esquerdo 'LHS' de uma equação. Para ilustrar, no exemplo abaixo a propriedade da entidade "ID da unidade de negócio". Nome é um valor de propriedade e deve ser colocado no LHS da expressão a ser avaliada. A seguinte expressão tem sucesso:
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 irá:
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
As funções Sort e SortByColumns podem ser delegadas.
Em Sort, a fórmula só pode ser o nome de uma coluna individual 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. As funções Sum, Average, Min e Max podem ser delegadas. As funções de contagem, tais como CountRows e Count também podem ser delegadas. Neste momento, apenas um número limitado de origens de dados suporta estas funções para delegação. Para mais informações, consulte Lista de delegação.
O suporte da delegação RemoveIf e UpdateIf está em Experimental e desativado por predefinição.
funções não delegáveis
Todas as outras funções não suportam a delegação, incluindo estas funções importantes:
limites não delegáveis
As fórmulas que não puderem ser delegadas serão processadas localmente. O processamento local permite a utilização de todo o alcance da linguagem da fórmula do Power Apps. Mas a um preço: todos os dados têm de ser introduzidos no dispositivo em primeiro lugar, o que pode implicar a obtenção de uma grande quantidade de dados através da rede. Tal pode demorar tempo, dando a impressão de que a aplicação está lenta ou que teve uma possível falha.
Para evitar esta situação, o Power Apps impõe um limite à quantidade de dados que podem ser processados localmente: 500 registos por predefinição. Escolhemos este número para que possa continuar a ter acesso total a pequenos conjuntos de dados e, ainda assim, poder refinar a sua utilização de conjuntos de dados grandes, vendo resultados parciais.
Obviamente, deve ter cuidado ao utilizar esta função, porque pode confundir os utilizadores. Por exemplo, considere uma função Filter com uma fórmula de seleção que não pode ser delegada, numa origem de dados que contém um milhão de registos. Visto que a filtragem é feita localmente, apenas os primeiros 500 registos são analisados. Se o registo pretendido for o registo 501 ou 500.001, o mesmo não será considerado nem devolvido pela função Filter.
As funções de agregação também podem causar confusão. Calcule a função Average numa coluna dessa mesma origem de dados com um milhão de registos. A média não pode ser delegada neste caso uma vez que a expressão não é delegada (consultar a nota anterior), pelo que a média apenas é calculada para os primeiros 500 registos. Se não tiver cuidado, uma resposta parcial pode ser incorretamente interpretada como uma resposta completa por um utilizador da sua aplicação.
Alterar o limite
O número predefinido de registos é 500, mas pode alterá-lo para toda a aplicação:
- Selecione Definições.
- Em Geral, altere a definição Limite da linhas de dados de 1 para 2000.
Em alguns casos, o valor 2000 (ou 1000 ou 1500) vai ao encontro das necessidades do seu cenário. Pode aumentar este número para se adaptar ao seu cenário com o devido cuidado. À medida que aumenta este número, o desempenho da sua aplicação poderá diminuir, principalmente se tiver tabelas grandes com muitas colunas. Ainda assim, a melhor solução é delegar sempre o máximo que for possível.
Para garantir que a sua aplicação consegue dimensionar grandes conjuntos de dados, reduza esta definição para 1. Todos os conteúdos que não puderem ser delegados devolverão um único registo, que deverá ser facilmente detetado ao testar a sua aplicação. Assim, pode evitar surpresas desagradáveis ao tentar avançar com a aplicação de prova do conceito para a fase de produção.
Avisos de delegação
Para ser mais fácil saber o que está e não está a ser delegado, o Power Apps apresenta um aviso (na forma de triângulo amarelo) ao criar uma fórmula que contém algo que não pode ser delegado.
Os avisos de delegação só são apresentados em fórmulas que funcionam em origens de dados delegáveis. Se não vir um aviso e achar que a sua fórmula não está a ser delegada corretamente, verifique o tipo da origem de dados face à lista de origens de dados delegáveis indicada anteriormente neste artigo.
Exemplos
Neste exemplo, irá gerar 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 aos indicados no artigo sobre o Dataverse para o SQL Server.
A propriedade Itens da galeria é definida como uma fórmula que contém as funções SortByColumns e Search, que podem ser delegadas.
Na caixa de pesquisa, escreva "Maçã".
São apresentados momentaneamente pontos em movimento junto à parte superior do ecrã enquanto a aplicação comunica com o SQL Server para processar o pedido de pesquisa. Todos os registos que cumprem os critérios de pesquisa, mesmo que a origem de dados contenha milhões de registos.
Os resultados de pesquisa incluem "Maçãs" e "Ananás" porque a função Search procura em toda uma coluna de texto. Se quiser 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 complexo. (Para simplificar, remova a chamada SortByColumns.)
Os novos resultados incluem "Maçãs", mas não "Ananás". No entanto, é apresentado um triângulo amarelo junto à galeria (e na miniatura do ecrã, se a barra de navegação à esquerda mostrar miniaturas) e uma linha azul ondulada em baixo de uma parte da fórmula. Cada um destes elementos indica um aviso. Se passar o cursor amarelo sobre o triângulo amarelo junto à galeria, é apresentada a seguinte mensagem:
O SQL Server é uma origem de dados delegável e Filter é uma função delegável. No entanto, as funções Mid e Len não podem ser delegadas a nenhuma origem de dados.
Mas funcionou, não foi? Bem, mais ou menos. É por isso que se trata de um aviso e não uma linha ondulada vermelha.
- Se a tabela contiver mais de 500 registos, a fórmula funcionou na perfeição. Todos os registos foram importados para o dispositivo e a função Filter foi aplicada localmente.
- Se a tabela contiver mais de 500 registos, a fórmula não irá devolver o registo 501 ou superior, mesmo que corresponda aos critérios.
Consulte também
Impacto da utilização de funções não delegáveis e limites de linha de dados inadequado no desempenho
Sugestões e melhores práticas de desempenho para utilizar delegação
Nota
Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)
O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).