Entender as tabelas e os registros do aplicativo de tela no PowerAppsUnderstand canvas-app tables and records in PowerApps

No PowerApps, 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.In PowerApps, you can create a canvas app that accesses information in Microsoft Excel, SharePoint, SQL Server, and several other sources that store data in records and tables. Para trabalhar com mais eficiência com esse tipo de dados, examine os conceitos que fundamentam essas estruturas.To work most effectively with this kind of data, review the concepts that underlie these structures.

  • Um registro contém uma ou mais categorias de informações sobre uma pessoa, um lugar ou algo.A record contains one or more categories of information about a person, a place, or a thing. Por exemplo, um registro pode conter o nome, o endereço de email e o número de telefone de um único cliente.For example, a record might contain the name, the email address, and the phone number of a single customer. Outras ferramentas se referem a um registro como uma "linha" ou "item".Other tools refer to a record as a "row" or an "item."
  • Uma tabela tem um ou mais registros que contêm as mesmas categorias de informações.A table holds one or more records that contain the same categories of information. Por exemplo, uma tabela pode conter os nomes, endereços de email e números de telefone de 50 clientes.For example, a table might contain the names, the email addresses, and the phone numbers of 50 customers.

Em seu aplicativo, você usará fórmulas para criar, atualizar e manipular os registros e tabelas.In your app, you'll use formulas to create, update, and manipulate records and tables. Provavelmente, você vai ler e gravar dados em uma fonte de dados externa, que é uma tabela estendida.You'll probably read and write data to an external data source, which is an extended table. Além disso, você pode criar uma ou mais tabelas internas, que são chamadas de coleções.In addition, you might create one or more internal tables, which are called collections.

Você pode criar uma variedade de fórmulas que usam o nome de uma tabela como um argumento, assim como uma fórmula no Excel tem uma ou mais referências de célula como argumentos.You can build a variety of formulas that take the name of a table as an argument, just as a formula in Excel takes one or more cell references as arguments. Algumas fórmulas no PowerApps retornam uma tabela que reflete os outros argumentos que você especificar.Some formulas in PowerApps return a table that reflects the other arguments that you specify. Por exemplo, você pode criar uma fórmula:For example, you might create a formula:

  • para atualizar um registro em uma tabela especificando a tabela como um dos vários argumentos para a função Patchto update a record in a table by specifying that table as one of multiple arguments for the Patch function
  • para adicionar, remover e renomear colunas em uma tabela especificando a tabela como um argumento para a função AdicionarColunas , DropColumns ou RenameColumns .to add, remove, and rename columns in a table by specifying that table as an argument for the AddColumns, DropColumns, or RenameColumns function. Nenhuma dessas funções modifica a tabela original.None of those functions modifies the original table. Em vez disso, a função retorna outra tabela com base em outros argumentos que você especificar.Instead, the function returns another table based on the other arguments that you specify.

Elementos de uma tabelaElements of a table

RegistrosRecords

Cada registro contém pelo menos uma categoria de informações para uma pessoa, lugar ou algo.Each record contains at least one category of information for a person, a place, or a thing. O exemplo acima mostra um registro de cada produto (Chocolate, Pão e Água) e uma coluna para cada categoria de informações (Preço, Quantidade disponível e Quantidade do pedido).The example above shows a record for each product (Chocolate, Bread, and Water) and a column for each category of information (Price, Quantity on Hand, and 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.In a formula, you can refer to a record by itself, outside of a table's context, by using curly braces. Por exemplo, este registro {Name: "Morangos"; preço: 7;99} não está associado a uma tabela.For example, this record { Name: "Strawberries"; Price: 7,99 } isn't associated with a table. Observe que os nomes de campo, como Name e Price nesse exemplo, não estão entre aspas duplas.Note that field names, such as Name and Price in that example, aren't enclosed in double quotation marks.

CamposFields

Um campo é uma informação individual em um registro.A field is an individual piece of information in a record. Você pode visualizar esse tipo de campo como um valor em uma coluna para determinado registro.You can visualize this sort of field as a value in a column for a particular record.

Assim como com um controle, você se refere a um campo de um registro usando o .Just as with a control, you refer to a field of a record by using the . operador no registro.operator on the record. Por exemplo, First(Products).Name retorna o campo Nome do primeiro registro na tabela Produtos.For example, First(Products).Name returns the Name field for the first record in the Products table.

Um campo pode conter outro registro ou tabela, como o exemplo para a função GroupBy mostra.A field can contain another record or table, as the example for the GroupBy function shows. Você pode aninhar quantos níveis de registros e tabelas desejar.You can nest as many levels of records and tables as you want.

ColunasColumns

Uma coluna refere-se ao mesmo campo para um ou mais registros em uma tabela.A column refers to the same field for one or more records in a table. No exemplo acima, cada produto tem um campo de preço e esse preço está na mesma coluna para todos os produtos.In the above example, each product has a price field, and that price is in the same column for all products. A tabela acima tem quatro colunas, exibidas na horizontal na parte superior:The above table has four columns, shown horizontally across the top:

  • NomeName
  • PreçoPrice
  • Quantidade disponívelQuantity on Hand
  • Quantidade do pedidoQuantity on Order

O nome da coluna reflete os campos nessa coluna.The column's name reflects the fields in that column.

Todos os valores em uma coluna são do mesmo tipo de dados.All values within a column are of the same data type. No exemplo acima, a coluna "Quantidade disponível" sempre contém um número e não pode conter uma cadeia de caracteres, como "12 unidades", para um registro.In the above example, the "Quantity on Hand" column always contains a number and can't contain a string, such as "12 units," for one record. O valor de qualquer campo também pode ser em branco.The value of any field may also be blank.

Você pode ter feito referência a colunas como "campos" em outras ferramentas.You may have referred to columns as "fields" in other tools.

Observação

Nas fontes de dados do Excel e do SharePoint que contêm nomes de colunas com espaços, o PowerApps substituirá os espaços por "_x0020_" .For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". Por exemplo, "Nome da Coluna" , no SharePoint ou no Excel, aparecerá como "Nome_x0020_da_x0020_Coluna" no PowerApps quando exibidos no layout de dados ou usados em uma fórmula.For example, "Column Name" in SharePoint or Excel will appear as "Column_x0020_Name" in PowerApps when displayed in the data layout or used in a formula.

TabelaTable

Uma tabela consiste em um ou mais registros, cada um com vários campos com nomes consistentes entre os registros.A table comprises one or more records, each with multiple fields that have consistent names across the records.

Qualquer tabela que seja armazenada em uma fonte de dados ou em uma coleção tem um nome que você usa para fazer referência à tabela e passá-la para funções que aceitam tabelas como argumentos.Any table that's stored in a data source or a collection has a name, which you use to refer to the table and pass it to functions that take tables as arguments. Tabelas também podem ser o resultado de uma função ou uma fórmula.Tables can also be the result of a function or a formula.

Como no exemplo a seguir, você pode expressar uma tabela em uma fórmula usando a função Tabela com um conjunto de registros demarcados entre chaves:As in the following example, you can express a table in a formula by using the Table function with a set of records, which you express in curly braces:

Table( { Value: "Strawberry" }; { Value: "Vanilla" } )

Você também pode definir uma tabela de coluna única com colchetes.You can also define a single-column table with square brackets. Uma maneira equivalente de escrever o exemplo acima:An equivalent way to write the above:

[ "Strawberry"; "Vanilla" ]

Fórmulas de tabelaTable formulas

No Excel e no PowerApps, é possível usar fórmulas para manipular números e cadeias de caracteres de texto de maneiras semelhantes:In Excel and PowerApps, you use formulas to manipulate numbers and strings of text in similar ways:

  • 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.In Excel, type a value, such as 42, in cell A1, and then type a formula, such as A1+2, in another cell to show the value of 44.
  • No PowerApps, 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.In PowerApps, set the Default property of Slider1 to 42, and set the Text property of a label to Slider1.Value + 2 to show the value of 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).In both cases, the calculated value changes automatically if you change the values of the arguments (for example, the number in cell A1 or the value of Slider1).

Da mesma forma, você pode usar fórmulas para acessar e manipular dados em tabelas e registros.Similarly, you can use formulas to access and manipulate data in tables and records. Você pode usar nomes de tabelas como argumentos em algumas fórmulas, como Min(Catalog; Price) para mostrar o valor mais baixo na coluna Preço da tabela Catálogo.You can use names of tables as arguments in some formulas, such as Min(Catalog; Price) to show the lowest value in the Price column of the Catalog table. Outras fórmulas fornecem tabelas inteiras como valores de retorno, como RenameColumns(Catalog; "Price"; "Cost") , que retornam todos os registros da tabela Catálogo, mas altera o nome da coluna Preço para Custo.Other formulas provide whole tables as return values, such as RenameColumns(Catalog; "Price"; "Cost"), which returns all the records from the Catalog table but changes the name of the Price column to Cost.

Assim como com números, fórmulas que envolvem tabelas e registros são recalculadas automaticamente à medida que a tabela subjacente ou o registro são alterados.Just as with numbers, formulas that involve tables and records are automatically recalculated as the underlying table or record changes. Se o custo de um produto na tabela Catálogo for reduzido abaixo do mínimo anterior, o valor retornado da fórmula Min alterará automaticamente de acordo com ele.If the cost of a product in the Catalog table is lowered below the previous minimum, the return value of the Min formula will automatically change to match it.

Vamos examinar alguns exemplos simples.Let's walk through some simple examples.

  1. Crie um aplicativo em branco para um telefone e adicione um controle de Galeria vertical que contém outros controles.Create a blank app for a phone, and add a vertical Gallery control that contains other controls.

    Por padrão, a tela mostra o texto do espaço reservado de uma tabela chamada CustomGallerySample.By default, the screen shows placeholder text from a table named CustomGallerySample. A propriedade Itens do controle de Galeria da tela é definida automaticamente como essa tabela.The Items property of the screen's Gallery control is automatically set to that table.

    Observação

    Alguns controles foram reorganizados e ampliados para fins de ilustração.Some controls have been rearranged and enlarged for illustration purposes.

  2. Em vez de definir a propriedade Itens como o nome de uma tabela, defina-a como uma fórmula que inclui o nome da tabela como um argumento, como neste exemplo:Instead of setting the Items property to the name of a table, set it to a formula that includes the name of the table as an argument, as in this example:

    Sort(CustomGallerySample; SampleHeading; Descending)

    Esta fórmula incorpora a função Classificar , que usa o nome de uma tabela como seu primeiro argumento e o nome de uma coluna nessa tabela como seu segundo argumento.This formula incorporates the Sort function, which takes the name of a table as its first argument and the name of a column in that table as its second argument. A função também dá suporte a um terceiro argumento opcional, que estipula que você deseja classificar os dados em ordem decrescente.The function also supports an optional third argument, which stipulates that you want to sort the data in descending order.

  3. Defina a propriedade Itens como uma fórmula que usa a fórmula da etapa anterior como um argumento e retorna uma tabela, como neste exemplo:Set the Items property to a formula that takes the formula from the previous step as an argument and returns a table, as in this example:

    FirstN(Sort(CustomGallerySample; SampleHeading; Descending); 2)

    Nesta fórmula, use a função FirstN para mostrar um determinado número de registros em uma tabela.In this formula, you use the FirstN function to show a particular number of records in a table. Você usa a função Classificar como o primeiro argumento para FirstN e um número (nesse caso, 2) como o segundo argumento, que especifica quantos registros devem ser exibidos.You use the Sort function as the first argument to FirstN and a number (in this case, 2) as the second argument, which specifies how many records to show.

    Toda a fórmula retorna uma tabela que contém os dois primeiros registros da tabela CustomGallerySample, classificados pela coluna SampleHeading em ordem decrescente.The entire formula returns a table that contains the first two records of the CustomGallerySample table, sorted by the SampleHeading column in descending order.

Funções de tabela e propriedades de controleTable functions and control properties

Considere a função Lower .Consider the Lower function. Se a variável Welcome contiver a cadeia de caracteres de texto "Olá, mundo" , a fórmula menor (bem-vindo) retornará "Olá, mundo" .If the variable welcome contains the text string "Hello, World", the formula Lower( welcome ) returns "hello, world". Em qualquer forma, essa função não altera o valor nessa variável.This function doesn't, in any way, change the value in that variable. Lower é uma função pura, pois só processa entrada e produz a saída.Lower is a pure function in that it only processes input and produces output. Tudo isso; Ele não tem efeitos colaterais.That's all; it has no side effects. Todas as funções no Excel e a maioria das funções no PowerApps são funções puras, que permitem que a pasta de trabalho ou o aplicativo seja recalculado automaticamente.All functions in Excel and most functions in PowerApps are pure functions, which allow the workbook or the app to be recalculated automatically.

O PowerApps oferece um conjunto de funções que operam em tabelas da mesma maneira.PowerApps offers a set of functions that operate on tables in the same manner. Essas funções usam tabelas como entrada e filtro, classificação, transformação, redução e Resumo de tabelas inteiras de dados.These functions take tables as input and filter, sort, transform, reduce, and summarize entire tables of data. Na verdade, menor e muitas outras funções que normalmente usam um único valor também podem pegar uma tabela de coluna única como entrada.In fact, Lower and many other functions that typically take a single value can also take a single-column table as input.

  • Classificar , Filtrar – classifica e filtra registros.Sort, Filter - Sorts and filters records.
  • FirstN , LastN – retorna os N primeiros ou os N últimos registros da tabela.FirstN, LastN - Returns the first N or last N records of the table.
  • Abs , Sqrt , Round , RoundUp , RoundDown – operações aritméticas em cada registro de uma tabela de coluna única, resultando em uma tabela de resultados de coluna única.Abs, Sqrt, Round, RoundUp, RoundDown - Arithmetic operations on each record of a single-column table, resulting in a single-column table of results.
  • Left , Mid , Right , Replace , Substitute , Trim , Lower , Upper , Proper – manipulações de cadeia de caracteres em cada registro de tabela de coluna única, resultando em uma tabela de cadeia de caracteres de coluna única.Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - String manipulations on each record of a single-column table, resulting in a single-column table of strings.
  • Len – para uma coluna de cadeias de caracteres, retorna uma tabela de coluna única que contém o comprimento de cada cadeia de caracteres.Len - For a column of strings, returns a single-column table that contains the length of each string.
  • Concatenar – concatena várias colunas de cadeias de caracteres, resultando em uma tabela de coluna única de cadeias de caracteres.Concatenate - Concatenates multiple columns of strings, resulting in a single-column table of strings.
  • AdicionarColunas , DropColumns , RenameColumns , MostrarColunas – manipulação de coluna da tabela, resultando em uma nova tabela com colunas diferentes.AddColumns, DropColumns, RenameColumns, ShowColumns - Column manipulation of the table, resulting in a new table with different columns.
  • Distinto – remove registros duplicados.Distinct - Removes duplicates records.
  • Embaralhar – mistura os registros em ordem aleatória.Shuffle - Shuffles records into a random order.
  • HashTags – pesquisa hashtags em uma cadeia de caracteres.HashTags - Searches for hashtags in a string.
  • Erros – fornece informações de erros quando você trabalha com uma fonte de dados.Errors - Provides error information when you work with a data source.

Muitas dessas funções usam uma tabela de coluna única como entrada.Many of these functions take a single-column table as their input. Se uma tabela inteira tiver apenas uma coluna, você poderá especificá-la por nome.If an entire table has only one column, you can specify it by name. Se uma tabela tiver várias colunas, você poderá especificar uma dessas colunas usando a sintaxe Table. Column .If a table has multiple columns, you can specify one of those columns by using Table.Column syntax. Por exemplo, Products.Name retorna a tabela de coluna única de apenas valores de nome da tabela Products .For example, Products.Name returns the single-column table of only Name values from the Products table.

Você pode remodelar completamente uma tabela, no entanto, usando as funções AddColumns , RenameColumns , mycolumns ou DropColumns .You can completely reshape a table however you want by using the AddColumns, RenameColumns, ShowColumns, or DropColumns function. Novamente, essas funções alteram apenas sua saída, não sua origem.Again, these functions change only their output, not their source.

As propriedades dos controles também podem ser tabelas:Properties of controls can also be tables:

  • Itens – aplica-se a galerias, caixas de listagem e caixas de combinação.Items - Applies to galleries, list boxes, and combo boxes. Essa propriedade define a tabela que a galeria ou a lista mostra.This property defines the table that the gallery or the list shows.
  • SelectedItems – aplica-se a caixas de listagem e caixas de combinação.SelectedItems - Applies to list boxes and combo boxes. Essa propriedade define a tabela de itens que o usuário selecionou se SelectMultiple estiver habilitado.This property defines the table of items that the user has selected if SelectMultiple is enabled.

Fórmulas comportamentaisBehavioral formulas

Outras funções são projetadas especificamente para modificar dados e ter efeitos colaterais.Other functions are specifically designed to modify data and have side effects. Como essas funções não são puras, você deve criá-las com cuidado e não podem participar de recalcular valores automaticamente no aplicativo.Because these functions aren't pure, you must build them carefully, and they can't participate in automatically recalculating values in the app. Você pode usar essas funções somente dentro de fórmulas comportamentais.You can use these functions only within behavioral formulas.

  • Colete , apague , ClearCollect -cria coleções, limpa-as e adiciona dados a elas.Collect, Clear, ClearCollect - Creates collections, clears them, and adds data to them.
  • Patch – modifica um ou mais campos em um registro.Patch - Modifies one or more fields in a record.
  • Atualizar , AtualizarSe – atualiza registros que correspondem a um ou mais critérios que você especificar.Update, UpdateIf - Updates records that match one or more criteria that you specify.
  • Remover , RemoverSe – exclui registros que correspondem a um ou mais critérios que você especificar.Remove, RemoveIf - Deletes records that match one or more criteria that you specify.

Fórmulas de registroRecord formulas

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.You can also build a formula that calculates data for an individual record, takes an individual record as an argument, and provides an individual record as a return value. Voltando ao nosso exemplo de galeria acima, vamos usar a propriedade Gallery1.Selected para exibir informações de todos os registros que o usuário selecionar nessa galeria.Returning to our gallery example above, let's use the Gallery1.Selected property to display information from whatever record the user selects in that gallery.

  1. Adicione um botãoe defina sua propriedade OnSelect com esta fórmula:Add a Button, and set its OnSelect property to this formula:
    Collect( SelectedRecord; Gallery1.Selected )Collect( SelectedRecord; Gallery1.Selected )

  2. Mantendo a tecla Alt pressionada, selecione o botão.While holding down the Alt key, select the button.

  3. No menu Arquivo, selecione Coleções.In the File menu, select Collections.

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.This formula returns a record that includes not only the data from the record that's currently selected in the gallery but also each control in that gallery. 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.For example, the record contains both a SampleText column, which matches the SampleText column in the original table, and a Subtitle1 column, which represents the label that shows the data from that column. Selecione o ícone de tabela na coluna Subtitle1 para analisar esses dados.Select the table icon in the Subtitle1 column to drill into that data.

Observação

A coluna Subtitle1 pode ser nomeada Subtitle2 ou algo semelhante caso você tenha adicionado elementos que não sejam aqueles especificados por este tópico.The Subtitle1 column might be named Subtitle2 or similar if you've added elements other than those that this topic specifies.

Agora que você tem o registro selecionado, é possível extrair campos individuais dele com o operador .Now that you have the selected record, you can extract individual fields from it with the . .operator.

  1. Adicione um controle de Rótulo e, em seguida, mova-o para a galeria e o botão.Add a Label control, and then move it under the gallery and the button.

  2. Defina a propriedade Text do rótulo como esta expressão:Set the label's Text property to this expression:
    "Selected: " & Gallery1.Selected.SampleHeading"Selected: " & Gallery1.Selected.SampleHeading

Você usou a propriedade Selected, que é um registro, e extraiu a propriedade SampleHeading dela.You've taken the Selected property, which is a record, and extracted the SampleHeading property from it.

Também é possível usar um registro como um contêiner de finalidade geral para valores nomeados relacionados.You can also use a record as a general-purpose container for related named values.

  • Se criar uma fórmula em torno das funções AtualizarContexto e Navegar , use um registro para coletar as variáveis de contexto que deseja atualizar.If you build a formula around the UpdateContext and Navigate functions, use a record to gather the context variables that you want to update.
  • Use a propriedade Atualizações em um controle Editar formulário para coletar as alterações que foram feitas pelo usuário em um formulário.Use the Updates property on an Edit form control to gather the changes that have been made by the user in a form.
  • Use a função Patch para atualizar uma fonte de dados, mas também para mesclar registros.Use the Patch function to update a data source but also to merge records.

Nesses casos, o registro nunca foi uma parte de uma tabela.In these cases, the record was never a part of a table.

Funções de registro e propriedades de controleRecord functions and control properties

Funções que retornam registros:Functions that return records:

  • FirstN , LastN – retorna o primeiro ou último registro ou registros da tabela.FirstN, LastN - Returns the first or last record or records of the table.
  • Pesquisa – retorna o primeiro registro de uma tabela que corresponde a um ou mais critérios.Lookup - Returns the first record from a table that matches one or more criteria.
  • Patch – atualiza uma fonte de dados ou mescla registros.Patch - Updates a data source or merges records.
  • Padrões – retorna os valores padrão para uma fonte de dados.Defaults - Returns the default values for a data source.

Propriedades que retornam registros:Properties that return records:

  • Selecionado – aplica-se a galerias e caixas de listagem.Selected - Applies to galleries and list boxes. Retorna o registro selecionado atualmente.Returns the currently selected record.
  • Atualizações – aplica-se a galerias.Updates - Applies to galleries. Reúne todas as alterações feitas pelo usuário em um formulário de entrada de dados.Pulls together all the changes that a user makes in a data-entry form.
  • Atualizar – aplica-se a controles de entrada como controles de entrada de texto e controles deslizantes.Update - Applies to input controls such as text-input controls and sliders. Define as propriedades individuais da galeria para reunir.Sets up individual properties for the gallery to pull together.

Escopo do registroRecord scope

Algumas funções operam avaliando uma fórmula em todos os registros de uma tabela individualmente.Some functions operate by evaluating a formula across all the records of a table individually. O resultado da fórmula é usado de várias maneiras:The formula's result is used in various ways:

  • AdicionarColunas – fórmula que fornece o valor do campo adicionado.AddColumns - Formula provides the value of the added field.
  • Média, Max, Min, Sum, StdevP, VarP – fórmula que fornece o valor a ser agregado.Average, Max, Min, Sum, StdevP, VarP - Formula provides the value to aggregate.
  • Filtrar, Pesquisa – a fórmula que determina se o registro deve ser incluído na saída.Filter, Lookup - Formula determines if the record should be included in the output.
  • Concat – fórmula que determina as cadeias de caracteres para se concatenar.Concat - Formula determines the strings to concatenate together.
  • Distinto – fórmula que retorna um valor usada para identificar registros duplicados.Distinct - Formula returns a value, used to identify duplicate records.
  • ForAll -a fórmula pode retornar qualquer valor, potencialmente com efeitos colaterais.ForAll - Formula can return any value, potentially with side effects.
  • Classificar – fórmula que fornece o valor pelo qual classificar os registros.Sort - Formula provides the value to sort the records on.
  • With -Formula pode retornar qualquer valor, potencialmente com efeitos colaterais.With - Formula can return any value, potentially with side effects.

Dentro dessas fórmulas, você pode fazer referência aos campos do registro que está sendo processado.Inside these formulas, you can reference the fields of the record being processed. Cada uma dessas funções cria um "escopo de registro" em que a fórmula é avaliada, no qual os campos do registro estão disponíveis como identificadores de nível superior.Each of these functions creates a "record scope" in which the formula is evaluated, where the fields of the record are available as top-level identifiers. Também é possível fazer referência a propriedades de controle e a outros valores de todo o seu aplicativo.You can also reference control properties and other values from throughout your app.

Por exemplo, use uma tabela de Produtos:For example, take a table of Products:

Para criar essa tabela de exemplo em seu aplicativo, insira um botão, defina sua propriedade OnSelect como esta fórmula e, em seguida, selecione o botão (clique nele enquanto mantém pressionada a tecla Alt em PowerApps Studio):To create this example table in your app, insert a button, set its OnSelect property to this formula, and then select the button (click it while you hold down the Alt key in PowerApps 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 determinar se algum desses produtos tinha mais solicitação do que está disponível:To determine whether any of any of these products had more requested than is available:

Filter( Products; 'Quantity Requested' > 'Quantity Available' )

O primeiro argumento para filtrar é a tabela de registros na qual operar e o segundo argumento é uma fórmula.The first argument to Filter is the table of records to operate on, and the second argument is a formula. Filtrar cria um escopo de registro para avaliar esta fórmula na qual os campos de cada registro estão disponíveis, nesse caso Produto, Quantidade Solicitada e Quantidade Disponível.Filter creates a record scope for evaluating this formula in which the fields of each record are available, in this case Product, Quantity Requested, and Quantity Available. O resultado da comparação determina se cada registro deve ser incluído no resultado da função:The result of the comparison determines if each record should be included in the result of the function:

Ao adicionar a este exemplo, podemos calcular quanto de cada produto pedir:Adding to this example, we can calculate how much of each product to order:

AddColumns( 
    Filter( Products; 'Quantity Requested' > 'Quantity Available' ); 
    "Quantity To Order"; 'Quantity Requested' - 'Quantity Available'
)

Aqui, estamos adicionando uma coluna calculada ao resultado.Here we are adding a calculated column to the result. AdicionarColunas tem seu próprio escopo de registro que ele usa para calcular a diferença entre o que foi solicitado e o que está disponível.AddColumns has its own record scope that it uses to calculate the difference between what has been requested and what is available.

Por fim, podemos reduzir a tabela de resultados apenas às colunas que desejamos:Finally, we can reduce the result table to just the columns that we want:

ShowColumns(
    AddColumns(
        Filter( Products; 'Quantity Requested' > 'Quantity Available' );
        "Quantity To Order"; 'Quantity Requested' - 'Quantity Available'
    );
    "Product";
    "Quantity To Order"
)

Observe que, nos itens acima, usamos aspas duplas (") em alguns lugares e aspas simples (') em outros lugares.Note that in the above, we used double quotes (") in some places and single quotes (') in other places. Aspas simples são necessárias ao referenciar o valor de um objeto, como um campo ou uma tabela, em que o nome do objeto contém um espaço.Single quotes are required when referencing the value of an object, such as a field or table, in which the name of the object contains a space. Aspas duplas são usadas quando não estamos fazendo referência ao valor de um objeto, mas, apenas falando dele, especialmente em situações em que o objeto ainda não existe, como no caso de AdicionarColunas.Double quotes are used when we are not referencing the value of an object but instead talking about it, especially in situations in which the object does not yet exist, as in the case of AddColumns.

DesambiguidadeDisambiguation

Os nomes de campo adicionados com o escopo de registro substituem os mesmos nomes de outro lugar no aplicativo.Field names added with the record scope override the same names from elsewhere in the app. Quando isso acontece, ainda é possível acessar os valores de fora do escopo de registro com o operador de desambiguidade @ :When this happens, you can still access values from outside the record scope with the @ disambiguation operator:

  • Para acessar valores de escopos de registro aninhados, use o operador @ com o nome da tabela que está sendo operada usando este padrão:To access values from nested record scopes, use the @ operator with the name of the table being operated upon using this pattern:
    Table [@ FieldName ]Table[@FieldName]
  • Para acessar valores globais, como fontes de dados, coleções e variáveis de contexto, use o padrão [@ ObjectName ] (sem uma designação de tabela).To access global values, such as data sources, collections, and context variables, use the pattern [@ObjectName] (without a table designation).

Se a tabela que está sendo operada for uma expressão, como Filter( Table , ... ) , o operador de desambiguidade não poderá ser usado.If the table being operated upon is an expression, such as Filter( Table, ... ), then the disambiguation operator cannot be used. Apenas o escopo interno do registro pode acessar os campos de expressão dessa tabela ao não utilizar o operador de desambiguidade.Only the innermost record scope can access fields from this table expression, by not using the disambiguation operator.

Por exemplo, imagine ter uma coleção X:For example, imagine having a collection X:

Você pode criar essa coleção com ClearCollect( X; [1; 2] ) .You can create this collection with ClearCollect( X; [1; 2] ).

E outra coleção Y:And another collection Y:

Você pode criar essa coleção com ClearCollect( Y; ["A"; "B"] ) .You can create this collection with ClearCollect( Y; ["A"; "B"] ).

Além disso, defina uma variável de contexto denominada Value com esta fórmula: Atualizarcontexto ({value: "!"})In addition, define a context variable named Value with this formula: UpdateContext( {Value: "!"} )

Vamos reunir tudo isso.Let's put it all together. Nesse contexto, a fórmula a seguir:In this context, the following formula:

Ungroup(
    ForAll( X;
        ForAll( Y;
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    );
    "Value"
)

produz essa tabela:produces this table:

O que está acontecendo aqui?What is going on here? A função ForAll mais externa define um escopo de registro para X, permitindo o acesso ao campo Valor de cada registro à medida que ele é processado.The outermost ForAll function defines a record scope for X, allowing access to the Value field of each record as it is processed. Para acessá-lo, basta usar a palavra Valor ou usar X [@Value] .It can be accessed by simply using the word Value or by using 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 faz referência ao campo no registro de Y e não mais ao de X. Aqui, para acessar em X o campo Valor, devemos usar a versão mais longa com o operador de desambiguidade.The innermost ForAll function defines another record scope for Y. Since this table also has a Value field defined, using Value here refers to the field in Y's record and no longer the one from X. Here, to access X's Value field, we must use the longer version with the disambiguation operator.

Como Y é o escopo de registro interno, acessar campos dessa tabela não exige desambiguidade, permitindo que usemos esta fórmula com o mesmo resultado:Since Y is the innermost record scope, accessing fields of this table do not require disambiguation, allowing us to use this formula with the same result:

Ungroup(
    ForAll( X;
        ForAll( Y;
            Value & Text( X[@Value] ) & [@Value]
        )
    );
    "Value"
)

Todos os escopos do registro ForAll substituem o escopo global.All the ForAll record scopes override the global scope. A variável de contexto de valor que definimos não está disponível por nome sem o operador de desambiguidade.The Value context variable we defined isn't available by name without the disambiguation operator. Para acessar esse valor, use [@Value] .To access this value, use [@Value].

Desagrupar nivela o resultado porque as funções ForAll aninhadas resultam em uma tabela de resultados aninhados.Ungroup flattens the result because nested ForAll functions result in a nested result table.

Tabelas de coluna únicaSingle-column tables

Para operar em uma única coluna a partir de uma tabela, use a função bem colunas como neste exemplo:To operate on a single column from a table, use the ShowColumns function as in this example:

ShowColumns( Products; "Product" )

Esta fórmula produz esta tabela de coluna única:This formula produces this single-column table:

Para uma alternativa mais curta, especifique Table. Column, que extrai a tabela de coluna única de apenas coluna da tabela.For a shorter alternative, specify Table.Column, which extracts the single-column table of just Column from Table. Por exemplo, essa fórmula produz exatamente o mesmo resultado que usar as colunas.For example, this formula produces exactly the same result as using ShowColumns.

Products.Product

Registros embutidosInline records

Você pode expressar registros usando chaves que contêm valores de campos nomeados.You express records by using curly braces that contain named field values. Por exemplo, você pode expressar o primeiro registro na tabela no início deste tópico usando esta fórmula:For example, you can express the first record in the table at the start of this topic by using this formula:

{ 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:You can also embed formulas within other formulas, as this example shows:

{ Name: First(Products).Name; Price: First(Products).Price * 1,095 }

Você pode aninhar registros aninhando entre chaves, como demonstrado neste exemplo:You can nest records by nesting curly braces, as this example shows:

{ '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.Enclose each column name that contains a special character, such as a space or a colon, in single quotes. Para usar uma aspa simples em um nome de coluna, clique duas vezes nele.To use a single quote within a column name, double it.

Observe que o valor na coluna Preço não inclui o símbolo da moeda, como um sinal de cifrão.Note that the value in the Price column doesn't include a currency symbol, such as a dollar sign. Essa formatação será aplicada quando o valor é exibido.That formatting will be applied when the value is displayed.

Tabelas embutidasInline tables

Você pode criar uma tabela usando a função Tabela e um conjunto de registros.You can create a table by using the Table function and a set of records. Você pode expressar a tabela no início deste tópico usando esta fórmula:You can express the table at the start of this topic by using this formula:

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:You can also nest tables:

Table( 
    { Name: "Chocolate"; 
      'Quantity History': Table( { Quarter: "Q1"; OnHand: 10; OnOrder: 10 };
                                 { Quarter: "Q2"; OnHand: 18; OnOrder: 0 } ) 
    }
)

Tabelas de valor embutidoInline value tables

Você pode criar tabelas de coluna única especificando valores entre colchetes.You can create single-column tables by specifying values in square brackets. A tabela resultante tem uma única coluna, chamada Valor.The resulting table has a single column, named Value.

Por exemplo, [ 1; 2; 3; 4 ] é equivalente a Table( { Value: 1 }; { Value: 2 }; { Value: 3 }; { Value: 4 } ) e retorna esta tabela:For example, [ 1; 2; 3; 4 ] is equivalent to Table( { Value: 1 }; { Value: 2 }; { Value: 3 }; { Value: 4 } ) and returns this table: