Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No Power Apps, você pode criar um aplicativo de tela que acessa informações no Microsoft Excel, no SharePoint, no SQL Server e em várias outras fontes que armazenam dados em tabelas e registros. Para trabalhar com mais eficiência com esse tipo de dados, examine os conceitos que fundamentam essas estruturas.
- Um registro contém uma ou mais categorias de informações sobre uma pessoa, um lugar ou algo. Por exemplo, um registro pode conter o nome, o endereço de email e o número de telefone de um único cliente. Outras ferramentas se referem a um registro como uma "linha" ou "item".
- Uma tabela tem um ou mais registros que contêm as mesmas categorias de informações. Por exemplo, uma tabela pode conter os nomes, endereços de email e números de telefone de 50 clientes.
Em seu aplicativo, use fórmulas para criar, atualizar e manipular registros e tabelas. Você provavelmente lê e grava dados em uma fonte de dados externa, que é uma tabela estendida. Além disso, você pode criar uma ou mais tabelas internas, que são chamadas de coleções.
Você pode criar uma variedade de fórmulas que usam o nome de uma tabela como argumento, semelhante a uma fórmula no Excel que usa uma ou mais referências de célula como argumentos. Algumas fórmulas no Power Apps retornam uma tabela que reflete os outros argumentos que você especificar. Por exemplo, você pode criar uma fórmula:
- para atualizar um registro em uma tabela especificando a tabela como um dos vários argumentos para a função Patch
- para adicionar, remover e renomear colunas em uma tabela especificando a tabela como um argumento para a função AddColumns, DropColumns ou RenameColumns. Nenhuma dessas funções modifica a tabela original. Em vez disso, a função retorna outra tabela com base em outros argumentos que você especificar.
Elementos de uma tabela
Registros
Cada registro contém pelo menos uma categoria de informações para uma pessoa, lugar ou algo. O exemplo acima mostra um registro de cada produto (Chocolate, Bread e Water) e uma coluna para cada categoria de informações (Price, Quantity on Hand e Quantity on Order).
Em uma fórmula, você fazer referência a um registro por si só, fora do contexto de uma tabela, usando chaves. Por exemplo, este registro { Name: "Strawberries", Price: 7.99 } não está associado a uma tabela. Nomes de campo, como Nome e Preço nesse exemplo, não estão entre aspas duplas.
Campos
Um campo é uma informação individual em um registro. Você pode visualizar esse tipo de campo como um valor em uma coluna para determinado registro.
Assim como em um controle, você faz referência a um campo de um registro usando o .operador no registro. Por exemplo, First(Products).Name retorna o campo Name do primeiro registro na tabela Products.
Um campo pode conter outro registro ou tabela, como o exemplo para a função GroupBy mostra. Você pode aninhar quantos níveis de registros e tabelas desejar.
Colunas
Uma coluna refere-se ao mesmo campo para um ou mais registros em uma tabela. No exemplo anterior, cada produto tem um campo de preço e todos os produtos compartilham a mesma coluna para esse preço. A tabela anterior tem quatro colunas, mostradas horizontalmente na parte superior:
- Nome
- Preço
- Quantidade em Estoque
- Quantidade Pedida
O nome da coluna reflete os campos dela.
Todos os valores em uma coluna pertencem ao mesmo tipo de dados. No exemplo anterior, a coluna "Quantidade à Mão" sempre contém um número e não pode conter uma cadeia de caracteres, como "12 unidades", para um registro. O valor de qualquer campo também pode estar em branco.
Você pode ter se referido a colunas como "campos" em outras ferramentas.
Nota
Para fontes de dados como SharePoint, Excel ou blocos do Power BI que contêm nomes de coluna com espaços, o Power Apps substitui os espaços por "_x0020_". Por exemplo, "Nome da Coluna" em um tile do SharePoint, Excel ou Power BI aparece como "Column_x0020_Name" no Power Apps quando exibido no layout de dados ou usado em uma fórmula.
Table
Uma tabela consiste em um ou mais registros, cada um com vários campos com nomes consistentes entre os registros.
Use o nome da tabela para fazer referência a qualquer tabela armazenada em uma fonte de dados ou em uma coleção. Você também pode passar o nome da tabela para funções que tomam tabelas como argumentos. Uma função ou fórmula também pode retornar tabelas.
Conforme mostrado no exemplo a seguir, é possível representar uma tabela em uma fórmula usando a função Tabela com um conjunto de registros, que são expressos entre chaves:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Você também pode definir uma tabela de coluna única usando colchetes. A expressão a seguir é uma maneira equivalente de escrever a expressão anterior:
[ "Strawberry", "Vanilla" ]
Fórmulas de tabela
No Excel e no Power Apps, é possível usar fórmulas para manipular números e cadeias de caracteres de texto de maneiras semelhantes:
- No Excel, digite um valor, como 42, na célula A1 e, em seguida, digite uma fórmula, como A1+2, em outra célula para mostrar o valor de 44.
- No Power Apps, defina a propriedade Default de Slider1 como 42 e defina a propriedade Text de um rótulo como Slider1.Value + 2 para mostrar o valor 44.
Em ambos os casos, o valor calculado será alterado automaticamente se você alterar os valores dos argumentos (por exemplo, o número na célula A1 ou o valor de Slider1).
Da mesma forma, você pode usar fórmulas para acessar e manipular dados em tabelas e registros. Você pode usar nomes de tabelas como argumentos em algumas fórmulas, como Min(Catalog, Price) para mostrar o valor mais baixo na coluna Price da tabela Catalog. Outras fórmulas fornecem tabelas inteiras como valores de retorno, como RenameColumns(Catalog, "Price", "Cost"), que retornam todos os registros da tabela Catalog, mas altera o nome da coluna Price para Cost.
Assim como os números, fórmulas que envolvem tabelas e registros são recalculadas automaticamente à medida que ocorrem alterações na tabela ou nos registros subjacentes. Se o custo de um produto na tabela Catálogo for reduzido para um valor menor que o mínimo anterior, o valor retornado da fórmula Min será alterado automaticamente para corresponder a ele.
Vamos examinar alguns exemplos simples.
Crie um aplicativo em branco para um telefone e adicione um controle Galeria vertical que contém outros controles.
Por padrão, a tela mostra o texto do espaço reservado de uma tabela chamada CustomGallerySample. A propriedade Items do controle Galeria da tela é definida automaticamente como essa tabela.
Nota
Alguns controles são reorganizados e ampliados para fins ilustrativos.
Em vez de definir a propriedade Items como o nome de uma tabela, defina-a como uma fórmula que inclui o nome da tabela como um argumento, como neste exemplo:
Sort(CustomGallerySample, SampleHeading, SortOrder.Descending)Esta fórmula incorpora a função Sort, que usa o nome de uma tabela como seu primeiro argumento e o nome de uma coluna nessa tabela como seu segundo argumento. A função também dá suporte a um terceiro argumento opcional, que estipula que você deseja classificar os dados em ordem decrescente.
Defina a propriedade Items como uma fórmula que usa a fórmula da etapa anterior como um argumento e retorna uma tabela, como neste exemplo:
FirstN(Sort(CustomGallerySample, SampleHeading, SortOrder.Descending), 2)Nesta fórmula, use a função FirstN para mostrar um determinado número de registros em uma tabela. Você usa a função Sort como o primeiro argumento para FirstN e um número (nesse caso, 2) como o segundo argumento, que especifica quantos registros devem ser exibidos.
Toda a fórmula retorna uma tabela que contém os dois primeiros registros da tabela CustomGallerySample, classificados pela coluna SampleHeading em ordem decrescente.
Funções de tabela e propriedades de controle
Considere a função Lower. Se a variável welcome contiver a cadeia de caracteres de texto "Hello, World", a fórmula Lower( welcome ) retornará "hello, world". Essa função não altera o valor nessa variável. Inferior é uma função pura porque processa apenas a entrada e produz a saída. Não tem efeitos colaterais. Todas as funções no Excel e na maioria das funções no Power Apps são funções puras, o que significa que a pasta de trabalho ou o aplicativo recalcula automaticamente.
O Power Apps oferece um conjunto de funções que lidam com tabelas da mesma maneira. Essas funções recebem tabelas como entrada e filtro, classificam, transformam, reduzem e resumem tabelas inteiras de dados. Na verdade, Lower e muitas outras funções que normalmente usam um único valor também podem usar uma tabela de coluna única como entrada.
- Classificar, Filtrar – Classificar e filtrar registros.
- FirstN, LastN – Retornar os primeiros registros N ou últimos N da tabela.
- Abs, Sqrt, Round, RoundUp, RoundDown – Executar operações aritméticas em cada registro de uma tabela de coluna única, resultando em uma tabela de coluna única de resultados.
- Esquerda, Médio, Direito, Substituir, Substituir, Cortar, Inferior, Superior, Apropriado – Executar manipulações de cadeia de caracteres em cada registro de uma tabela de coluna única, resultando em uma tabela de coluna única de cadeias de caracteres.
- Len - para uma coluna de cadeias de caracteres, retorna uma tabela de coluna única que contém o comprimento de cada cadeia de caracteres.
- Concatenate - concatena várias colunas de cadeias de caracteres, resultando em uma tabela de coluna única de cadeias de caracteres.
- AddColumns, DropColumns, RenameColumns, ShowColumns – Executar a manipulação de coluna da tabela, resultando em uma nova tabela com colunas diferentes.
- Distinto – remove registros duplicados.
- Shuffle - mistura os registros em ordem aleatória.
- HashTags - pesquisa hashtags em uma cadeia de caracteres.
- Errors - fornece informações de erros quando você trabalha com uma fonte de dados.
Muitas dessas funções usam uma tabela de coluna única como entrada. Se uma tabela inteira tiver apenas uma coluna, você poderá especificá-la pelo nome. Se uma tabela tiver várias colunas, você poderá especificar uma dessas colunas usando a sintaxe Table.Column. Por exemplo, Products.Name retorna a tabela de coluna única somente com valores Name a tabela Products.
Você pode remodelar completamente uma tabela da maneira que desejar, usando a função AddColumns, RenameColumns, ShowColumns, ou DropColumns. Novamente, essas funções alteram apenas sua saída, não sua fonte.
As propriedades dos controles também podem ser tabelas:
- Items – aplica-se a galerias, caixas de listagem e caixas de combinação. Esta propriedade define a tabela que a galeria ou a lista mostra.
- SelectedItems – aplica-se a galerias, caixas de listagem e caixas de combinação. Essa propriedade define a tabela de itens que o usuário selecionou se SelectMultiple está habilitado.
Fórmulas de comportamento
Algumas funções são projetadas especificamente para modificar dados e ter efeitos colaterais. Como essas funções não são puras, você deve criá-las com cuidado. Eles não podem participar do recálculo automático de valores no aplicativo. Você pode usar essas funções somente nas fórmulas de comportamento.
- Collect, Clear, ClearCollect - cria coleções, as limpa e adiciona dados a elas.
- Patch - modifica um ou mais campos em um registro.
- Update, UpdateIf - atualiza registros que correspondem a um ou mais critérios que você especificar.
- Remove, RemoveIf - exclui registros que correspondem a um ou mais critérios que você especificar.
Fórmulas de registro
Você também pode criar uma fórmula que calcula os dados para um registro individual, usa um registro individual como um argumento e fornece um registro individual como um valor retornado. Retornando ao exemplo da galeria, use a propriedade Gallery1.Selected para exibir informações de qualquer registro selecionado pelo usuário nessa galeria.
Adicione um Botão e defina sua propriedade OnSelect como esta fórmula:
Collect( SelectedRecord, Gallery1.Selected )Selecione o botão enquanto mantém pressionado a tecla Alt.
No menu Arquivo, selecione Coleções.
Esta fórmula retorna um registro que inclui não apenas os dados do registro que está selecionado atualmente na galeria, mas também cada controle nessa galeria. Por exemplo, o registro contém uma coluna SampleText, que corresponde à coluna SampleText da tabela original, e uma coluna Subtitle1, que representa o rótulo que mostra os dados dessa coluna. Selecione o ícone de tabela na coluna Subtitle1 para analisar esses dados.
Nota
A coluna Subtítulo1 pode ser denominada Subtítulo2 ou semelhante se você adicionar elementos diferentes daqueles especificados por este tópico.
Agora que você tem o registro selecionado, você pode extrair campos individuais dele usando o operador .
Adicione um controle Rótulo e, em seguida, mova-o para a galeria e o botão.
Defina a propriedade Text do rótulo como esta expressão:
"Selecionado: " & Galeria1.Selected.SampleHeading
Você pegou a propriedade Selected , que é um registro, e extraiu a propriedade SampleHeading dela.
Também é possível usar um registro como um contêiner de finalidade geral para valores nomeados relacionados.
- Se criar uma fórmula em torno das funções UpdateContext e Navigate, use um registro para obter as variáveis de contexto que você deseja atualizar.
- Use a propriedade Atualizações em um controle editar formulário para coletar as alterações feitas pelo usuário em um formulário.
- Use a função Patch para atualizar uma fonte de dados, mas também para mesclar registros.
Nesses casos, o registro nunca foi uma parte de uma tabela.
Funções de registro e propriedades de controle
Funções que retornam registros:
- FirstN, LastN - retorna o primeiro ou último registro ou registros da tabela.
- Lookup - retorna o primeiro registro de uma tabela que corresponde a um ou mais critérios.
- Patch - atualiza uma fonte de dados ou mescla registros.
- Defaults - retorna os valores padrão para uma fonte de dados.
Propriedades que retornam registros:
- Selected – aplica-se a galerias e caixas de listagem. Retorna o registro selecionado atualmente.
- Updates - aplica-se a galerias. Reúne todas as alterações feitas pelo usuário em um formulário de entrada de dados.
- Update - aplica-se a controles de entrada como controles Entrada de texto e controles Sliders. Define as propriedades individuais da galeria para reunir.
Escopo do registro
Algumas funções funcionam avaliando uma fórmula em todos os registros de uma tabela, um registro por vez. Você usa o resultado da fórmula de maneiras diferentes para cada função:
- AddColumns – Use a fórmula para obter o valor do novo campo que você adiciona.
- Média, Máx, Min, Soma, StdevP, VarP – Use a fórmula para obter o valor que você deseja agregar.
- Filtro, Consulta – Use a fórmula para decidir se o registro deve fazer parte da saída.
- Concat – Use a fórmula para decidir quais cadeias de caracteres unir.
- Distinto – Use a fórmula para retornar um valor que ajude a localizar registros duplicados.
- ForAll – Use a fórmula para retornar qualquer valor, possivelmente com efeitos colaterais.
- Classificar – Use a fórmula para obter o valor pelo qual classificar os registros.
- Com – Use a fórmula para retornar qualquer valor, possivelmente com efeitos colaterais.
Dentro dessas fórmulas, você pode referenciar os campos do registro em que está trabalhando. Cada uma dessas funções cria um "escopo de registro" em que a fórmula é executada. Os campos do registro aparecem como identificadores de nível superior. Você também pode fazer referência às propriedades de controle e a outros valores em todo o aplicativo.
Por exemplo, considere uma tabela de Produtos:
Para criar esta tabela de exemplo no seu aplicativo, insira um botão, defina seu OnSelect para essa fórmula e selecione o botão (clique nele enquanto mantém pressionada a tecla Alt no Power Apps Studio):
Set( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
Para verificar se algum desses produtos tem mais solicitações do que está disponível, use esta fórmula:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
O primeiro argumento para Filtrar é a tabela de registros em que trabalhar. O segundo argumento é uma fórmula. O filtro cria um escopo de registro para avaliar essa fórmula. Os campos de cada registro estão disponíveis, como Produto, Quantidade Solicitada e Quantidade Disponível. O resultado da comparação decide se cada registro deve fazer parte do resultado da função:
Você pode adicionar a este exemplo calculando quanto de cada produto solicitar:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Aqui, você adiciona uma coluna calculada ao resultado. AddColumns usa seu próprio escopo de registro para calcular a diferença entre o que você solicitou e o que está disponível.
Por fim, você pode reduzir a tabela de resultados apenas para as colunas desejadas:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
No exemplo anterior, você usou aspas duplas (") em alguns locais e aspas simples (') em outros lugares. Você precisa de aspas simples quando faz referência ao valor de um objeto, como um campo ou tabela, e o nome do objeto contém um espaço. Use aspas duplas quando não estiver fazendo referência ao valor de um objeto, mas falando sobre ele. Use aspas duplas especialmente em situações em que o objeto ainda não existe, como no caso de AddColumns.
Desambiguidade
Os nomes de campo que você adiciona com o escopo do registro substituem os mesmos nomes que já existem em outras partes do aplicativo. Quando isso acontece, você ainda pode acessar valores de fora do escopo do registro usando o @ operador de desambiguação :
- Para acessar valores de escopos de registro aninhados, use o operador @ com o nome da tabela em que você está operando, usando este padrão:
Table[@FieldName] - Para acessar valores globais, como fontes de dados, coleções e variáveis de contexto, use o padrão [@NomeDoObjeto] (sem uma designação de tabela).
Se a tabela em que você está operando for uma expressão, como Filter(Table, ... ), você não pode usar o operador de desambiguação. Apenas o escopo interno do registro pode acessar os campos de expressão dessa tabela ao não utilizar o operador de desambiguidade.
Por exemplo, imagine ter uma coleção X:
Você cria essa coleção usando ClearCollect( X, [1, 2] ).
E outra coleção Y:
Você cria essa coleção usando ClearCollect( Y, ["A", "B"] ).
Além disso, defina uma variável de contexto chamada Value com esta fórmula: UpdateContext( {Value: "!"} )
Vamos reunir tudo isso. Nesse contexto, a fórmula a seguir:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
produz esta tabela:
O que está acontecendo? A função ForAll mais externa define um escopo de registro para X, permitindo o acesso ao campo Valor de cada registro à medida que processa. Você pode acessá-lo simplesmente usando a palavra Valor ou usando X[@Value].
A função ForAll mais interna define outro escopo de registro para Y. Como essa tabela também tem um campo Valor definido, usar Valor aqui refere-se ao campo no registro Y e não mais ao de X. Para acessar o campo Valor de X, você deve usar a versão mais longa com o operador de desambiguação.
Como Y é o escopo de registro mais interno, acessar campos dessa tabela não requer desambiguação, portanto, você pode usar essa fórmula com o mesmo resultado:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Todos os escopos do registro ForAll substituem o escopo global. A variável de contexto Value que você definiu não está disponível pelo nome sem o operador de desambiguação. Para acessar esse valor, use [@Value].
Ungroup nivela o resultado, uma vez que as funções ForAll aninhadas resultarão em uma tabela de resultados aninhados.
Tabelas de coluna única
Para operar em uma única coluna de uma tabela, use a função ShowColumns como neste exemplo:
ShowColumns( Products, "Product" )
Esta fórmula produz esta tabela de coluna única:
Para uma alternativa mais curta, especifique Table.Column, que extrai a tabela de coluna única somente de Column de Table. Por exemplo, esta fórmula produz exatamente o mesmo resultado que o uso de ShowColumns.
Products.Product
Registro em linha
Expresse registros usando chaves que contêm valores de campo nomeados. Por exemplo, você pode expressar o primeiro registro na tabela no início deste tópico usando esta fórmula:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Também é possível inserir fórmulas dentro de outras fórmulas, como exibido neste exemplo:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Você pode aninhar registros aninhando entre chaves, como demonstrado neste exemplo:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Coloque cada nome de coluna que contém um caractere especial, como um espaço ou um vírgula, entre aspas simples. Para usar uma aspa simples em um nome de coluna, clique duas vezes nele.
Observe que o valor na coluna Price não inclui o símbolo da moeda, como um sinal de cifrão. Essa formatação é aplicada quando o valor é exibido.
Tabelas em linha
Crie uma tabela usando a função Tabela e um conjunto de registros. Você pode expressar a tabela no início deste tópico usando esta fórmula:
Table(
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 }
)
Você também pode aninhar tabelas:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Tabelas de valores em linha
Crie tabelas de coluna única especificando valores em colchetes. A tabela resultante tem uma única coluna, chamada Value.
Por exemplo, [ 1, 2, 3, 4 ] é equivalente a Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) e retorna esta tabela: