Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Compreender a 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 isto funciona, a consulta é delegada para a origem de dados.
Mas as consultas do Power Fx não podem ser sempre 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. A consulta é não delegável se utilizar uma caraterística que a origem 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 a 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. Isto significa que obtém resultados incorretos.
Crie as suas consultas do Power Fx utilizando as tabelas delegáveis para as suas origem de dados. Utilize apenas funções de consulta que possam ser delegadas. É a única forma de manter o bom desempenho da sua aplicação e de garantir que os utilizadores obtêm acesso a todas as informações de que necessitam.
Preste atenção aos avisos de delegação que mostram 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 processa dados localmente se não for possível delegar a fórmula.
Nota
Os avisos de delegação ajudam a gerir a sua aplicação de modo a que devolva resultados corretos. Se os dados na sua origem de dados excederem 500 registos e uma função não puder ser delegada, o Power Fx marca a fórmula com um sublinhado azul.
Origens de dados delegáveis
A delegação funciona com 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 populares 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, pelo que pode usar 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 is only delegated for columns on the base data source. 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. MasFilter(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 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, 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 não inclui estes itens importantes.
- If
- *, /, Mod
- Colunas de operações de valor TextoValor
- Concatenate (incluindo &)
- ExactIn
- Funções de manipulação de cadeias: Lower, Upper, Left, Mid, Len, ...
- Sinais: Location, Acceleration, Compass, ...
- Voláteis: Rand, ...
- Collections
Delegação e coleções
Quando usa With
, UpdateContext
ou Set
, estes criam coleções internamente. As coleções são uma lista estática na memória de registos e não participam 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 consulta. 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. Mas, para cenários offline, apenas um nível de expansão de procura é 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'
)
Mas 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
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 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. But 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
Todas as outras funções não podem delegar, incluindo estas funções importantes:
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 contrapartida: todos os dados têm de ser introduzidos no dispositivo em primeiro lugar, o que pode significar a obtenção de uma grande quantidade de dados através da rede. Este processo pode levar tempo e fazer com que a sua aplicação pareça lenta ou sem resposta.
Para evitar isto, por predefinição, o Power Apps limita a quantidade de dados que podem ser processados localmente a 500 registos. Este limite permite-lhe usar conjuntos de dados pequenos completamente e refinar a sua utilização de conjuntos de dados grandes ao ver 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 registo que pretender for o registo 501 ou 500.001, Filter não o considera nem devolve.
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 não tiver cuidado, um utilizador poderá pensar que uma resposta parcial está completa.
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, 2.000 (ou 1.000 ou 1.500) registos 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 se certificar de que a sua aplicação consegue dimensionar grandes conjuntos de dados, defina este valor para 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. Isto facilita saber o que é e o que não é delegado.
Os avisos de delegação só são apresentados em fórmulas que usam origens 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.
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.
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.
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:
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.