Power AppsTécnico

Delegação no Power Apps: por que o app mostra só 500 linhas e como resolver

O app de tela para em 500 registros quando a fórmula não é delegável. Entenda o aviso azul, o que cada fonte delega e as fórmulas Power Fx que resolvem.

Marcos MoraisEspecialista em Power Platform6 min de leitura

Uma construtora com 1.200 funcionários usava há oito meses um app de ordens de serviço feito sobre uma lista do SharePoint. Em uma segunda-feira, os técnicos deixaram de ver as ordens antigas. Ninguém recebeu erro. A lista tinha acabado de passar de 500 itens, e a fórmula da galeria filtrava por um campo que o SharePoint não consegue filtrar sozinho. O app baixava os 500 primeiros registros, aplicava o filtro neles e mostrava o que sobrava.

Eu já atendi esse chamado mais vezes do que gostaria, e a causa é sempre a mesma: delegação. Este post explica o que é, como enxergar o problema antes de ir para produção e como reescrever as fórmulas.

O que é delegação e de onde vem o 500

Quando a galeria tem Items igual a Filter(Pedidos, ...), o Power Apps tenta traduzir a fórmula para uma consulta que a fonte de dados executa. A fonte filtra, ordena e devolve só o que interessa, em páginas de 100 registros conforme a pessoa rola a tela. Isso é delegar. Funciona para milhões de linhas porque o trabalho acontece no servidor.

Quando a fórmula usa algo que a fonte não entende, o Power Apps faz o que consegue: baixa os primeiros registros até o limite de linhas de dados, que é 500 por padrão, e aplica a fórmula localmente. Tudo que estiver depois do registro 500 deixa de existir para o app. Sem erro e sem aviso em tempo de execução.

O limite é configurável em Configurações, na opção de limite de linhas para consultas não delegáveis. A documentação de outubro de 2026 indica 10.000 como teto (antes eram 2.000). Subir o valor faz o app baixar mais dados em toda consulta não delegável, inclusive no celular com rede ruim, e só adia o dia em que a lista passa do novo número.

Antes e depois: fórmulas que delegam no SharePoint

A fórmula abaixo é delegável no SharePoint. Igualdade em coluna de escolha (Status.Value), igualdade no e-mail de uma coluna de pessoa e o operador && são traduzidos para a consulta. A galeria mostra todos os pedidos abertos da pessoa, estejam eles na linha 10 ou na linha 40.000.

Items da galeria: delegável no SharePointpowerfx

// Tudo roda no SharePoint: escolha por igualdade, pessoa por e-mail, && entre condições
Filter(
    Pedidos,
    Status.Value = "Aberto" && Solicitante.Email = User().Email
)

Os dois casos abaixo aparecem em quase toda revisão de app que fazemos. O primeiro usa o operador in para testar se o status está em uma coleção local; o SharePoint não executa isso. O segundo faz busca por texto digitado em uma coluna de pessoa, que também fica fora da delegação.

Antes e depoispowerfx

// ANTES: in com coleção local. Aviso de delegação, para em 500.
Filter(Pedidos, Status.Value in colStatusAbertos.Value)

// DEPOIS: condições explícitas, delegável
Filter(
    Pedidos,
    Status.Value = "Aberto" || Status.Value = "Em análise"
)

// ANTES: busca com in em coluna de pessoa. Não delega no SharePoint.
Filter(Pedidos, txtBusca.Text in Solicitante.DisplayName)

// DEPOIS: StartsWith em coluna de texto (Title), delegável
Filter(Pedidos, StartsWith(Title, txtBusca.Text))

// DEPOIS (quando precisa ser por pessoa): seletor e igualdade no e-mail
Filter(Pedidos, Solicitante.Email = cmbPessoa.Selected.Mail)

A versão corrigida troca a coleção por condições explícitas e move a busca para uma coluna de texto com StartsWith, que o SharePoint delega. Se a busca precisa mesmo ser por pessoa, a saída é um seletor de pessoa e igualdade no e-mail, em vez de texto livre.

O que cada fonte delega

A tabela resume o que vemos em projeto, de forma conservadora. Cada conector tem uma tabela oficial com detalhes por tipo de coluna, e ela muda; o link está nas fontes.

Função ou operadorSharePointDataverseSQL Server
Filter e LookUp com =, <>, <, >, && e ||
Search (busca em texto)Só colunas de texto
StartsWith
in (texto dentro de uma coluna)
in com coleção ou tabela
Sort e SortByColumnsColunas simples
Sum, Average, Min e Max
CountRows e CountIfConfira a tabela oficial
DistinctConfira a tabela oficialConfira a tabela oficial
Coluna de pessoa ou de pesquisa (lookup) no FilterSó igualdade, em alguns subcamposIgualdade com o registro; subcampos nãoNão se aplica
Resumo conservador feito em novembro de 2026. A tabela oficial de cada conector tem exceções por tipo de coluna; confira antes de decidir a arquitetura.

No SharePoint, o tipo da coluna importa tanto quanto a função. Colunas de pessoa, de escolha com vários valores e de pesquisa aceitam pouca coisa além de igualdade. Colunas calculadas do SharePoint não são filtráveis pelo app. Quando a lista passa de 5.000 itens, entra outro limite, o de exibição de lista do próprio SharePoint, que exige colunas indexadas para o filtro funcionar. Quando trocar a planilha por um app tem o contexto de quando a lista é a base certa.

Quando a regra não cabe na fórmula, leve a regra para o Dataverse

Uma parte dos avisos vem de contas feitas dentro do Filter: diferença de datas, texto concatenado, condição que depende de três colunas. A primeira saída é tirar a conta de dentro da comparação: a coluna fica de um lado, e a expressão calculada localmente fica do outro. A segunda é criar a regra na própria tabela, com uma coluna de fórmula no Dataverse, e filtrar por ela como por qualquer coluna. Exibições (views) do Dataverse também valem: o app usa a exibição como fonte e o filtro pesado roda no servidor.

Regra no lado escalar e coluna de fórmula no Dataversepowerfx

// ANTES: função de data dentro do Filter. Não delega.
Filter(Pedidos, DateDiff('Data de abertura', Today(), TimeUnit.Days) > 30)

// DEPOIS: a conta sai do Filter, a comparação fica simples e delegável
Filter(Pedidos, 'Data de abertura' < DateAdd(Today(), -30, TimeUnit.Days))

// Regra com várias colunas: crie uma coluna de fórmula na tabela
// (no Dataverse: 'Valor total' = Quantidade * 'Preço unitário')
// e filtre por ela como por qualquer outra coluna
Filter(Pedidos, 'Valor total' > 5000)

Esse é um dos motivos para escolher Dataverse quando a tabela vai crescer. Além de delegar contagem e soma, ele aceita regras no lado do servidor. A comparação completa está em SharePoint ou Dataverse.

Paginar com coleções: só quando não houver saída

Existe um padrão para trazer mais de 500 registros para uma coleção: dividir a lista por faixas de ID, que é uma coluna que o SharePoint delega, e coletar lote a lote. Funciona, é lento e perde registros apagados nas faixas. Use para um relatório pontual ou uma exportação, nunca como base da galeria principal.

OnVisible: lotes por faixa de ID, último recursopowerfx

// Carrega até 5 lotes de 500 registros, por faixa de ID
Clear(colPedidos);
ForAll(
    Sequence(5) As lote,
    Collect(
        colPedidos,
        Filter(
            Pedidos,
            ID > (lote.Value - 1) * 500 && ID <= lote.Value * 500
        )
    )
)

Cada Collect também respeita o limite de linhas, por isso as faixas têm 500 IDs. Se a lista tem muitos itens apagados, os lotes voltam incompletos e o total fica abaixo do esperado; some um lote a mais e confira o CountRows da coleção no fim.

O que vemos em revisão de app

Faça

  • Tratar todo aviso de delegação como erro antes de publicar. O App Checker lista todos de uma vez.
  • Filtrar por colunas simples e indexadas: ID, data, texto, número e e-mail de pessoa com igualdade.
  • Testar com uma lista de 3.000 itens de teste antes de ir para produção. O limite só aparece com volume.
  • Mover regra de negócio para a fonte: exibição no Dataverse, coluna de fórmula, coluna indexada no SharePoint.
  • Escolher Dataverse quando a tabela vai passar de alguns milhares de linhas e precisa de soma ou contagem.

Evite

  • Subir o limite para 10.000 e seguir em frente. O app fica mais lento no celular e o problema volta no mês seguinte.
  • Usar in com coleção para filtrar uma lista grande. Troque por condições com || ou por uma coluna na fonte.
  • Fazer Search ou in em coluna de pessoa, escolha ou pesquisa no SharePoint.
  • Carregar a lista inteira em uma coleção no OnStart para filtrar depois. Além do limite, o app demora para abrir.
  • Contar registros com CountRows(Filter(...)) no SharePoint. O número para em 500 e ninguém percebe.

O próximo passo é abrir o App Checker do app mais usado da sua área e contar os avisos de delegação. Para cada um, decida: reescrever a fórmula, indexar e filtrar por outra coluna, ou mover a tabela para o Dataverse. Em padrões de Power Apps que não quebram estão os outros cuidados que evitam o chamado de segunda-feira, e a Formação Power Apps tem um módulo inteiro de delegação e desempenho com apps reais.

Fontes

Preços, nomes de plano e limites mudam. Confira sempre a tabela oficial da Microsoft antes de decidir.

Perguntas frequentes

O que mais perguntam sobre este assunto

O que significa o aviso de delegação no Power Apps?
Que parte da fórmula não pode ser executada pela fonte de dados e será aplicada só nos primeiros registros baixados, 500 por padrão. O aviso aparece como um sublinhado azul no trecho e um triângulo ao lado da barra de fórmulas. O app publica normalmente, e o problema só aparece quando a tabela passa do limite.
Aumentar o limite de 500 para 2.000 ou mais resolve?
Adia. O teto indicado na documentação de outubro de 2026 é 10.000, e cada consulta não delegável passa a baixar até esse volume, o que deixa o app mais lento, principalmente no celular. Quando a tabela passa do novo limite, os registros voltam a sumir. A correção é tornar a fórmula delegável ou trocar a fonte.
SharePoint ou Dataverse delega melhor?
Dataverse. Ele delega filtros em quase todos os tipos de coluna, ordenação, StartsWith, in em texto, Sum, Average, Min, Max, CountRows e CountIf. O SharePoint delega Filter, LookUp, Sort, Search em texto e StartsWith, com restrições em coluna de pessoa, escolha e pesquisa, e sem agregações. Para tabelas que vão passar de alguns milhares de linhas e precisam de totais, Dataverse é a base certa.
Como contar registros no Power Apps sem estourar o limite?
No Dataverse, CountRows e CountIf são delegáveis e funcionam em qualquer volume. No SharePoint a contagem é local: CountRows(Filter(...)) para em 500. As saídas são manter o subconjunto contado abaixo do limite com filtros delegáveis, guardar o total em outra lista atualizada por um fluxo do Power Automate, ou mostrar '500+' e deixar a contagem exata para um relatório.

Próximo passo

Quer aprender isso de ponta a ponta?

Os cursos da Disruptivos são gravados, com projetos reais e certificado. Para turmas fechadas na sua empresa, use o formulário.

Para você aprender

Formação Power Apps

Módulo inteiro de delegação, desempenho e Dataverse, com apps reais.R$ 697

Ver o curso

Para a sua empresa

Power Apps

10 horas ao vivo, turma fechada, com as listas e os dados da sua empresa.

Ver o treinamento
Ir para o formulário

Fale Conosco

Conte seu desafio, respondemos em até 1 dia útil

Diagnóstico Estratégico Gratuito

Analisamos seu cenário e indicamos a melhor rota para seus objetivos.

Interesse*
Cursos EAD

Para cursos EAD não precisa de formulário.

Os preços, as ementas e a garantia de 7 dias estão nas páginas dos cursos. Se tiver dúvida, fale direto no WhatsApp.

Leia também