O PowerApps inclui um poderoso conjunto de tabelas de dados de funções de filtragem, classificação e formatação: funções Filtrar, Classificar e AdicionarColunas para mencionar apenas algumas. Com essas funções, você pode fornecer aos usuários o acesso com foco às informações de que eles precisam. Para usuários com uma tela de fundo do banco de dados, usar essas funções é o equivalente a escrever uma consulta de banco de dados.

A chave para a criação de aplicativos eficientes é minimizar a quantidade de dados que precisa ser colocada em seu dispositivo. Talvez, apenas alguns dos milhares de registros são necessários, ou um único valor agregado pode representar milhares de registros. Ou talvez somente o primeiro conjunto de registros pode ser recuperado e o restante trazido à medida que o usuário demonstra que quer mais. Ter foco pode reduzir consideravelmente a capacidade de processamento, a memória e a largura de banda de rede necessária para seu aplicativo, resultando em tempos de resposta mais rápidos para seus usuários, mesmo em telefones conectados por meio de uma rede de celular.

Delegação é onde a expressividade das fórmulas dos PowerApps atende às necessidades para minimizar a movimentação de dados pela rede. Em resumo, isso significa que o PowerApps delegará o processamento de dados para a fonte de dados, em vez de mover os dados para o aplicativo para processamento local.

Onde isso se torna complicado e o motivo pelo qual existe este artigo, é porque nem tudo o que pode ser expressado em uma fórmula do PowerApps pode ser delegado para cada fonte de dados. A linguagem do PowerApps imita a linguagem de fórmula do Excel, projetada com acesso completo e instantâneo a uma pasta de trabalho completa na memória, com uma ampla variedade de funções numéricas e de manipulação de texto. Como resultado, a linguagem do PowerApps é muito mais sofisticada do que o que a maioria das fontes de dados pode oferecer suporte, incluindo os avançados mecanismos de banco de dados como o SQL Server.

Trabalhar com grandes conjuntos de dados requer o uso de fontes de dados e fórmulas que podem ser delegadas. É a única maneira de manter seu aplicativo com um bom desempenho e garantir que os usuários possam acessar todas as informações necessárias. Preste atenção nas sugestões de pontos azuis que sinalizam lugares onde a delegação não é possível. Se estiver trabalhando com conjuntos de dados pequenos (com menos de 500 registros), você poderá usar qualquer fonte de dados e fórmula, pois o processamento poderá ser realizado localmente se a fórmula não puder ser delegada.

Fontes de dados delegáveis

Consulte a lista de delegação para obter a lista completa de quais fontes de dados oferecem suporte à delegação e até que ponto.

Continuamos adicionando o suporte à delegação a fontes de dados existentes e adicionando mais fontes de dados.

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 PowerApps pode ser aplicada.

Funções delegáveis

A próxima etapa é 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 as sugestões de pontos azuis na fórmula específica.

Essas listas serão alterado ao longo do tempo. Estamos trabalhando para oferecer suporte a mais funções e operadores com a delegação.

Funções Filtrar

As funções Filtrar, Pesquisar e Pesquisa podem ser delegadas.

Dentro das funções Filtrar e Pesquisa, os itens a seguir podem ser usados com as colunas da tabela para selecionar os registros apropriados:

Partes da fórmula que são avaliados como um valor constante para todos os registros também podem ser usadas. Por exemplo, Left( Language(), 2 ) não depende de nenhuma coluna do registro e, portanto, retorna o mesmo valor para todos os registros. Isso é efetivamente uma constante. O uso de variáveis de contexto, coleções e sinais pode não ser constante e, portanto, impedirá que as funções Filtrar e Pesquisa sejam delegadas.

Alguns itens importantes ausentes da lista acima:

Funções de classificação

Classificar e ClassificarPorColunas podem ser delegadas.

Em Classificar, 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

Soma, Média, Mín e Máx podem ser delegadas. Somente um número limitado de fontes de dados dá suporte a essa delegação neste momento. Consulte a lista delegação para obter mais detalhes.

Funções de contagem como CountRows, CountA e Count não podem ser delegadas.

Outras funções de agregação como StdevP e VarP não podem ser delegadas.

Outras funções

Todas as outras funções não oferecem suporte à delegação, incluindo essas funções importantes:

Um padrão comum é usar AdicionarColunas e Pesquisa para mesclar informações de uma tabela em outra, normalmente conhecido como uma junção na linguagem do banco de dados. Por exemplo:

  • AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

Embora Products e Suppliers possam ser fontes de dados delegáveis e Pesquisa seja uma função delegáveis, a função AdicionarColunas não é delegável. O resultado da fórmula inteira será limitado à primeira parte da fonte de dados Products.

Como Pesquisa e sua fonte de dados são delegáveis, uma correspondência para Suppliers pode ser encontrada em qualquer lugar na fonte de dados, mesmo que seja grande. Uma possível desvantagem é que Pesquisa terá feito chamadas separadas para a fonte de dados para cada um dos primeiros registros em Products, causando muitas conversas na rede. Se Suppliers for pequeno o suficiente e não for alterado muitas vezes, você poderá armazenar em cache a fonte de dados em seu aplicativo com uma chamada de Coleta quando o aplicativo for iniciado (usando OnVisible na tela de abertura) e efetuar Pesquisa ele em vez disso.

Limites não delegáveis

As fórmulas que não podem ser delegadas serão processadas localmente. Isso permite que toda a gama de linguagens de fórmula do PowerApps 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 seu aplicativo está lento ou possivelmente travado.

Para evitar isso, o PowerApps impõe um limite na quantidade de dados que podem ser processados localmente: 500 registros. 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, é necessário ter cuidado ao usar esse recurso, pois ele pode confundir os usuários. Por exemplo, considere uma função Filtrar com uma fórmula de seleção que não pode ser delegada por uma fonte de dados de um milhão de registros. Como a filtragem será feita localmente, somente os primeiros 500 registros do milhão de registros serão verificados. Se o registro desejado for 501 ou 500.001, ele não será considerado ou retornado por Filtrar.

Outro lugar em que isso pode ser confuso é ao agregar funções. Considere Average em uma coluna da mesma fonte de dados de um milhão de registros. Como Average ainda não pode ser delegado, somente os primeiros 500 registros serão calculados na média. É preciso ter cuidado para que uma resposta parcial não seja interpretada erroneamente como uma resposta completa por um usuário de seu aplicativo.

Sugestões de ponto azul

Para facilitar o conhecimento do que é e não é delegado, a experiência de criação fornece sugestões de ponto azul quando uma fórmula contiver algo que não pode ser delegado.

Pontos azuis são mostrados 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 acima.

Exemplos

Neste exemplo, usaremos uma tabela do SQL Server que contém nomes de produtos, em particular frutas, [dbo].[Products]. Na tela Novo, o PowerApps pode criar um aplicativo de três telas básico conectado a essa fonte de dados:

Anote a fórmula para a propriedade Items da galeria. Ela está usando as funções ClassificarPorColunas e Pesquisar, que podem ser delegadas.

Vamos digitar “Apple” no controle de entrada de texto de pesquisa. Se formos muito observadores, momentaneamente veremos pontos movendo-se na parte superior da tela enquanto a nova entrada na nova pesquisa é processada. Os pontos em movimento indicam que estamos nos comunicando com o SQL Server:

Como isso tudo é delegável, mesmo se a tabela [dbo].[Products] contiver milhões de registros, ainda os encontraremos todos, colocando-os na galeria em páginas à medida que o usuário rolar pelos resultados.

Você observará que vemos uma correspondência para "Apple" e "Pineapple". A função Pesquisar encontrará um termo de pesquisa em qualquer lugar em uma coluna de texto. Em vez disso, digamos que queremos localizar somente o termo de pesquisa no início do nome da fruta. Podemos usar outra função delegável, Filtrar, com um termo de pesquisa mais complicado (para manter a simplicidade, removeremos a chamada de ClassificarPorColunas):

Isso parece estar funcionando, apenas "Apples" é exibido corretamente agora e não "Pineapple". No entanto, há um ponto azul sendo exibido ao lado da galeria e há uma linha ondulada azul sob uma parte da fórmula. Há também um ponto azul sendo exibido na miniatura de tela. Se passarmos o cursor no ponto azul ao lado da galeria, veremos o seguinte:

Embora estejamos usando Filtrar que é uma função delegável, com o SQL Server que é uma fonte de dados delegável, a fórmula que usamos dentro de Filtrar não é delegável. Mid e Len não podem ser delegados a qualquer fonte de dados.

Mas funcionou, não foi? Bem, mais ou menos. E é por isso que isso é um ponto azul em vez de um ícone de risco amarelo e erro ondulado em vermelho. Se a tabela [dbo].[Products] contiver menos de 500 registros, então sim, isso terá funcionado perfeitamente. Todos os registros foram colocados no dispositivo e Filtrar foi aplicado localmente.

Se, em vez disso, essa tabela contiver mais de 500 registros, somente as frutas que começarem com "Apple" nos primeiros 500 registros da tabela serão exibidas na galeria. Se "Apple, Fuji" aparecer como um nome no registro 501 ou 500.001, ela não será encontrada.