Informazioni sulle tabelle e sui record delle app canvas in PowerAppsUnderstand canvas-app tables and records in PowerApps

In PowerApps è possibile creare un'app canvas che accede alle informazioni in Microsoft Excel, SharePoint, SQL Server e diverse altre origini che archiviano dati in record e tabelle.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. Per usare questa tipologia di dati in modo ottimale, esaminare i concetti alla base di queste strutture.To work most effectively with this kind of data, review the concepts that underlie these structures.

  • Un record contiene una o più categorie di informazioni su una persona, un luogo o un oggetto.A record contains one or more categories of information about a person, a place, or a thing. Un record può ad esempio contenere il nome, l'indirizzo di posta elettronica e il numero di telefono di un singolo cliente.For example, a record might contain the name, the email address, and the phone number of a single customer. Altri strumenti fanno riferimento a un record con i termini "riga" o "elemento".Other tools refer to a record as a "row" or an "item."
  • Una tabella contiene uno o più record contenenti le stesse categorie di informazioni.A table holds one or more records that contain the same categories of information. Una tabella può ad esempio contenere i nomi, gli indirizzi di posta elettronica e i numeri di telefono di 50 clienti.For example, a table might contain the names, the email addresses, and the phone numbers of 50 customers.

Nell'app si useranno le formule per creare, aggiornare e modificare record e tabelle.In your app, you'll use formulas to create, update, and manipulate records and tables. I dati verranno probabilmente letti e scritti in un'origine dati esterna, ovvero una tabella estesa.You'll probably read and write data to an external data source, which is an extended table. È anche possibile creare una o più tabelle interne denominate raccolte.In addition, you might create one or more internal tables, which are called collections.

È possibile creare un'ampia gamma di formule che usano il nome di una tabella come argomento, proprio come una formula in Excel usa uno o più riferimenti di cella come argomenti.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. Alcune formule in PowerApps restituiscono una tabella che riflette gli altri argomenti specificati.Some formulas in PowerApps return a table that reflects the other arguments that you specify. È ad esempio possibile creare una formula:For example, you might create a formula:

  • per aggiornare un record in una tabella specificando tale tabella come uno di più argomenti per la funzione Patchto update a record in a table by specifying that table as one of multiple arguments for the Patch function
  • per aggiungere, rimuovere e rinominare le colonne in una tabella specificando tale tabella come argomento per la funzione AddColumns , DropColumns o RenameColumns .to add, remove, and rename columns in a table by specifying that table as an argument for the AddColumns, DropColumns, or RenameColumns function. Nessuna di tali funzioni modifica la tabella originale.None of those functions modifies the original table. La funzione restituisce invece un'altra tabella basata sugli altri argomenti specificati.Instead, the function returns another table based on the other arguments that you specify.

Elementi di una tabellaElements of a table

RecordRecords

Ogni record contiene almeno una categoria di informazioni per una persona, un luogo o un oggetto.Each record contains at least one category of information for a person, a place, or a thing. L'esempio precedente illustra un record per ogni prodotto (Chocolate, Bread e Water) e una colonna per ogni categoria di informazioni (Price, Quantity on Hand e Quantity on Order).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).

In una formula è possibile fare riferimento a un record a sé, fuori dal contesto di una tabella, usando le parentesi graffe.In a formula, you can refer to a record by itself, outside of a table's context, by using curly braces. Ad esempio, questo record {nome: "Fragole"; Prezzo: 7;99} non è associato a una tabella.For example, this record { Name: "Strawberries"; Price: 7,99 } isn't associated with a table. Si noti che i nomi dei campi, come Name e Price nell'esempio, non sono racchiusi tra virgolette doppie.Note that field names, such as Name and Price in that example, aren't enclosed in double quotation marks.

CampiFields

Un campo rappresenta un'informazione in un record.A field is an individual piece of information in a record. È possibile visualizzare questo tipo di campo come valore di una colonna per un record specifico.You can visualize this sort of field as a value in a column for a particular record.

Come con un controllo, si fa riferimento a un campo di un record usando .Just as with a control, you refer to a field of a record by using the . come operatore nel record.operator on the record. Ad esempio, First(Products).Name restituisce il campo Name del primo record nella tabella Products.For example, First(Products).Name returns the Name field for the first record in the Products table.

Un campo può contenere un altro record o un'altra tabella, come illustrato nell'esempio per la funzione GroupBy .A field can contain another record or table, as the example for the GroupBy function shows. È possibile annidare tutti i livelli di record e tabelle desiderati.You can nest as many levels of records and tables as you want.

ColonneColumns

Una colonna si riferisce allo stesso campo di uno o più record in una tabella.A column refers to the same field for one or more records in a table. Nell'esempio precedente, ogni prodotto ha un campo di prezzo e il prezzo si trova nella stessa colonna per tutti i prodotti.In the above example, each product has a price field, and that price is in the same column for all products. La tabella precedente ha quattro colonne, disposte orizzontalmente nella parte superiore:The above table has four columns, shown horizontally across the top:

  • NameName
  • PricePrice
  • Quantity on HandQuantity on Hand
  • Quantity on OrderQuantity on Order

Il nome della colonna riflette i campi in tale colonna.The column's name reflects the fields in that column.

Tutti i valori all'interno di una colonna sono dello stesso tipo di dati.All values within a column are of the same data type. Nell'esempio precedente, la colonna "Quantity on Hand" contiene sempre un numero e non può contenere una stringa, ad esempio "12 unità", per un record.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. Il valore di un campo può anche essere vuoto.The value of any field may also be blank.

Le colonne possono essere denominate "campi" in altri strumenti.You may have referred to columns as "fields" in other tools.

Nota

Per origini dati SharePoint o Excel che contengono nomi di colonna con spazi, PowerApps sostituirà gli spazi con "_x0020_" .For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". Ad esempio, "Nome colonna" in SharePoint o Excel verrà visualizzato come "Nome_x0020_colonna" in PowerApps quando viene visualizzato nel layout di dati o usato in una formula.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.

TabellaTable

Una tabella è costituita da uno o più record, ognuno con più campi con nomi coerenti tra i record.A table comprises one or more records, each with multiple fields that have consistent names across the records.

Qualsiasi tabella archiviata in un'origine dati o in una raccolta ha un nome che viene usato per fare riferimento alla tabella e passarla a funzioni che usano le tabelle come argomenti.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. Le tabelle possono anche essere il risultato di una funzione o una formula.Tables can also be the result of a function or a formula.

Come nell'esempio seguente, è possibile esprimere una tabella in una formula usando la funzione Table con un set di record, usando le parentesi graffe: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" } )

È anche possibile definire una tabella a colonna singola con parentesi quadre.You can also define a single-column table with square brackets. Un modo equivalente per scrivere la formula precedente è il seguente:An equivalent way to write the above:

[ "Strawberry"; "Vanilla" ]

Formule delle tabelleTable formulas

In Excel e PowerApps, le formule vengono usate per modificare i numeri e le stringhe di testo in modo simile:In Excel and PowerApps, you use formulas to manipulate numbers and strings of text in similar ways:

  • In Excel digitare un valore, ad esempio 42, nella cella A1 e quindi digitare una formula, ad esempio A1+2, in un'altra cella per visualizzare il valore di 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.
  • In PowerApps impostare la proprietà Default di Slider1 su 42 e la proprietà Text di un'etichetta su Slider1.Value + 2 per visualizzare il valore di 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.

In entrambi i casi, il valore calcolato cambia automaticamente se si modificano i valori degli argomenti, ad esempio il numero nella cella A1 o il valore di 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).

Analogamente è possibile usare le formule per accedere ai dati e modificarli in tabelle e record.Similarly, you can use formulas to access and manipulate data in tables and records. È possibile usare i nomi delle tabelle come argomenti in alcune formule, ad esempio Min(Catalog; Price) per visualizzare il valore più basso nella colonna Price della tabella Catalog.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. Altre formule restituiscono come valori intere tabelle, ad esempio RenameColumns(Catalog; "Price"; "Cost") restituisce tutti i record della tabella Catalog, ma modifica il nome della tabella Price in Cost.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.

Come con i numeri, le formule che includono tabelle e record vengono ricalcolate automaticamente in caso di modifica della tabella o del record sottostante.Just as with numbers, formulas that involve tables and records are automatically recalculated as the underlying table or record changes. Se il costo di un prodotto nella tabella Catalog scende al di sotto del valore minimo precedente, il valore restituito dalla formula Min verrà automaticamente modificato in modo che corrisponda.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.

Verranno ora illustrati alcuni semplici esempi.Let's walk through some simple examples.

  1. Creare un app vuota per un telefono e aggiungere un controllo Raccolta verticale che contiene altri controlli.Create a blank app for a phone, and add a vertical Gallery control that contains other controls.

    Per impostazione predefinita, sullo schermo viene visualizzato il testo segnaposto di una tabella denominata CustomGallerySample.By default, the screen shows placeholder text from a table named CustomGallerySample. La proprietà Items del controllo Raccolta viene impostata automaticamente su tale tabella.The Items property of the screen's Gallery control is automatically set to that table.

    Nota

    Alcuni controlli sono stati riorganizzati e ingranditi a scopo illustrativo.Some controls have been rearranged and enlarged for illustration purposes.

  2. Invece di impostare la proprietà Items sul nome di una tabella, impostarla su una formula che include il nome della tabella come argomento, come nell'esempio seguente: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)

    Questa formula include la funzione Sort che usa il nome di una tabella come primo argomento e il nome di una colonna della tabella come secondo argomento.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. La funzione supporta anche un terzo argomento facoltativo, che indica che si vogliono ordinare i dati in ordine decrescente.The function also supports an optional third argument, which stipulates that you want to sort the data in descending order.

  3. Impostare la proprietà Items su una formula che usa la formula del passaggio precedente come argomento e restituisce una tabella, come nell'esempio seguente: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)

    In questa formula si usa la funzione FirstN per visualizzare un determinato numero di record in una tabella.In this formula, you use the FirstN function to show a particular number of records in a table. Si usa la funzione Sort come primo argomento per FirstN e un numero (in questo caso 2) come secondo argomento per specificare il numero di record da visualizzare.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.

    L'intera formula restituisce una tabella contenente i primi due record della tabella CustomGallerySample, ordinati in base alla colonna SampleHeading in ordine 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.

Funzioni delle tabelle e proprietà di controlloTable functions and control properties

Prendere in considerazione la funzione Lower .Consider the Lower function. Se la variabile Welcome contiene la stringa di testo "Hello, World" , la formula Lower (Welcome) restituisce "Hello, World" .If the variable welcome contains the text string "Hello, World", the formula Lower( welcome ) returns "hello, world". Questa funzione non modifica in alcun modo il valore della variabile.This function doesn't, in any way, change the value in that variable. Lower è una funzione pura in quanto elabora solo l'input e produce l'output.Lower is a pure function in that it only processes input and produces output. Questo è tutto. non ha effetti collaterali.That's all; it has no side effects. Tutte le funzioni in Excel e la maggior parte delle funzioni in PowerApps sono funzioni pure che consentono di ricalcolare automaticamente la cartella di lavoro o l'app.All functions in Excel and most functions in PowerApps are pure functions, which allow the workbook or the app to be recalculated automatically.

PowerApps offre un set di funzioni che operano sulle tabelle nello stesso modo.PowerApps offers a set of functions that operate on tables in the same manner. Queste funzioni accettano tabelle come input e filtro, ordinamento, trasformazione, riduzione e Riepilogo di intere tabelle di dati.These functions take tables as input and filter, sort, transform, reduce, and summarize entire tables of data. In realtà, le funzioni Lower e many che in genere accettano un singolo valore possono anche assumere come input una tabella a colonna singola.In fact, Lower and many other functions that typically take a single value can also take a single-column table as input.

  • Sort , Filter : ordina e filtra i record.Sort, Filter - Sorts and filters records.
  • FirstN , LastN : restituisce i primi o gli ultimi N record della tabella.FirstN, LastN - Returns the first N or last N records of the table.
  • Abs , Sqrt , Round , RoundUp , RoundDown : operazioni aritmetiche su ogni record di una tabella a colonna singola, che restituiscono una tabella di risultati a colonna singola.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 : manipolazioni di stringa su ogni record di una tabella a colonna singola, che restituiscono una tabella di stringhe a colonna singola.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 : per una colonna di stringhe, restituisce una tabella a colonna singola che contiene la lunghezza di ogni stringa.Len - For a column of strings, returns a single-column table that contains the length of each string.
  • Concatenate : concatena più colonne di stringhe e restituisce una tabella di stringhe a colonna singola.Concatenate - Concatenates multiple columns of strings, resulting in a single-column table of strings.
  • AddColumns , DropColumns , RenameColumns , ShowColumns : manipolazioni delle colonne della tabella che restituiscono una nuova tabella con colonne diverse.AddColumns, DropColumns, RenameColumns, ShowColumns - Column manipulation of the table, resulting in a new table with different columns.
  • Distinct : rimuove i record duplicati.Distinct - Removes duplicates records.
  • Shuffle : sposta i record in un ordine casuale.Shuffle - Shuffles records into a random order.
  • HashTags : cerca gli hashtag in una stringa.HashTags - Searches for hashtags in a string.
  • Errors : offre informazioni sugli errori quando si usa un'origine dati.Errors - Provides error information when you work with a data source.

Molte di queste funzioni accettano una tabella a colonna singola come input.Many of these functions take a single-column table as their input. Se un'intera tabella contiene una sola colonna, è possibile specificarla in base al nome.If an entire table has only one column, you can specify it by name. Se una tabella include più colonne, è possibile specificare una di queste colonne utilizzando la sintassi Table. Column .If a table has multiple columns, you can specify one of those columns by using Table.Column syntax. Ad esempio, Products.Name restituisce la tabella a colonna singola solo dei valori di nome della tabella Products .For example, Products.Name returns the single-column table of only Name values from the Products table.

È possibile modificare completamente la struttura di una tabella, ma si vuole usare la funzione ADDCOLUMNS , RenameColumns , ShowColumns o DropColumns .You can completely reshape a table however you want by using the AddColumns, RenameColumns, ShowColumns, or DropColumns function. Anche in questo caso, queste funzioni modificano solo l'output, non la loro origine.Again, these functions change only their output, not their source.

Le proprietà dei controlli possono anche essere tabelle:Properties of controls can also be tables:

  • Items : si applica a raccolte, caselle di riepilogo e caselle combinate.Items - Applies to galleries, list boxes, and combo boxes. Questa proprietà definisce la tabella visualizzata nella raccolta o nell'elenco.This property defines the table that the gallery or the list shows.
  • SelectedItems : si applica alle caselle di riepilogo e alle caselle combinate.SelectedItems - Applies to list boxes and combo boxes. Questa proprietà definisce la tabella di elementi che l'utente ha selezionato se SelectMultiple è abilitato.This property defines the table of items that the user has selected if SelectMultiple is enabled.

Formule comportamentaliBehavioral formulas

Altre funzioni sono progettate in modo specifico per modificare i dati e avere effetti collaterali.Other functions are specifically designed to modify data and have side effects. Poiché queste funzioni non sono pure, è necessario compilarle con attenzione e non possono partecipare al ricalcolo automatico dei valori nell'app.Because these functions aren't pure, you must build them carefully, and they can't participate in automatically recalculating values in the app. È possibile utilizzare queste funzioni solo all'interno di formule comportamentali.You can use these functions only within behavioral formulas.

  • Collect , Clear , ClearCollect : crea raccolte, li cancella e vi aggiunge dati.Collect, Clear, ClearCollect - Creates collections, clears them, and adds data to them.
  • Patch : modifica uno o più campi in un record.Patch - Modifies one or more fields in a record.
  • Update , UpdateIf : aggiorna i record che corrispondono a uno o più criteri specificati.Update, UpdateIf - Updates records that match one or more criteria that you specify.
  • Remove , RemoveIf : elimina i record che corrispondono a uno o più criteri specificati.Remove, RemoveIf - Deletes records that match one or more criteria that you specify.

Formule dei recordRecord formulas

È anche possibile compilare una formula che calcola i dati per un singolo record, usa un singolo record come argomento e fornisce un singolo record come valore restituito.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. Tornando all'esempio di raccolta precedente, si userà la proprietà Gallery1.Selected per visualizzare le informazioni di un record qualsiasi selezionato dall'utente in tale raccolta.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. Aggiungere un pulsantee impostarne la proprietà onselect sulla formula seguente:Add a Button, and set its OnSelect property to this formula:
    Collect( SelectedRecord; Gallery1.Selected )Collect( SelectedRecord; Gallery1.Selected )

  2. Selezionare il pulsante tenendo premuto ALT.While holding down the Alt key, select the button.

  3. Nel menu File selezionare Raccolte.In the File menu, select Collections.

Questa formula restituisce un record che include non solo i dati del record selezionato nella raccolta, ma anche ogni controllo in tale raccolta.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. Il record contiene ad esempio sia una colonna SampleText, che corrisponde alla colonna SampleText della tabella originale, che una colonna Subtitle1 che rappresenta l'etichetta che illustra i dati di tale colonna.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. Selezionare l'icona della tabella nella colonna Subtitle1 per esaminare i dati.Select the table icon in the Subtitle1 column to drill into that data.

Nota

La colonna Subtitle1 può essere denominata Subtitle2 o similare se sono stati aggiunti elementi diversi da quelli specificati in questo argomento.The Subtitle1 column might be named Subtitle2 or similar if you've added elements other than those that this topic specifies.

Dopo avere selezionato il record è possibile estrarne i singoli campi con l'operatore .Now that you have the selected record, you can extract individual fields from it with the . .operator.

  1. Aggiungere un controllo Etichetta e spostarlo sotto la raccolta e il pulsante.Add a Label control, and then move it under the gallery and the button.

  2. Impostare la proprietà Text dell'etichetta in modo da visualizzare questa espressione:Set the label's Text property to this expression:
    "Selected: " & Gallery1.Selected.SampleHeading"Selected: " & Gallery1.Selected.SampleHeading

È stata usata la proprietà Selected, un record, quindi ne è stata estratta la proprietà SampleHeading.You've taken the Selected property, which is a record, and extracted the SampleHeading property from it.

È anche possibile usare un record come contenitore per utilizzo generico per valori denominati correlati.You can also use a record as a general-purpose container for related named values.

  • Se si compila una formula con le funzioni UpdateContext e Navigate , usare un record per raccogliere le variabili di contesto che si vogliono aggiornare.If you build a formula around the UpdateContext and Navigate functions, use a record to gather the context variables that you want to update.
  • Usare la proprietà Updates in un controllo Modifica modulo per raccogliere le modifiche apportate dall'utente in un modulo.Use the Updates property on an Edit form control to gather the changes that have been made by the user in a form.
  • Usare la funzione Patch per aggiornare un'origine dati e anche per unire i record.Use the Patch function to update a data source but also to merge records.

In questi casi, il record non ha mai fatto parte di una tabella.In these cases, the record was never a part of a table.

Funzioni dei record e proprietà di controlloRecord functions and control properties

Funzioni che restituiscono record:Functions that return records:

  • FirstN , LastN : restituisce i primi o gli ultimi record della tabella.FirstN, LastN - Returns the first or last record or records of the table.
  • Lookup : restituisce il primo record di una tabella che corrisponde a uno o più criteri.Lookup - Returns the first record from a table that matches one or more criteria.
  • Patch : aggiorna un'origine dati o unisce i record.Patch - Updates a data source or merges records.
  • Defaults : restituisce i valori predefiniti per un'origine dati.Defaults - Returns the default values for a data source.

Proprietà che restituiscono record:Properties that return records:

  • Selected: si applica alle raccolte e agli elenchi a discesa.Selected - Applies to galleries and list boxes. Restituisce il record attualmente selezionato.Returns the currently selected record.
  • Updates: si applica alle raccolte.Updates - Applies to galleries. Incorpora tutte le modifiche apportate da un utente in un modulo di immissione dati.Pulls together all the changes that a user makes in a data-entry form.
  • Update : si applica ai controlli di input, ad esempio a controlli di input di testo e dispositivi di scorrimento.Update - Applies to input controls such as text-input controls and sliders. Imposta singole proprietà per la raccolta.Sets up individual properties for the gallery to pull together.

Ambito dei recordRecord scope

Alcune funzioni valutano una formula in tutti i record di una tabella singolarmente.Some functions operate by evaluating a formula across all the records of a table individually. Il risultato della formula viene usato in vari modi:The formula's result is used in various ways:

  • AddColumns: la formula restituisce il valore del campo aggiunto.AddColumns - Formula provides the value of the added field.
  • Average, Max, Min, Sum, StdevP, VarP: la formula restituisce il valore da aggregare.Average, Max, Min, Sum, StdevP, VarP - Formula provides the value to aggregate.
  • Filter, Lookup: la formula determina se il record deve essere incluso nell'output.Filter, Lookup - Formula determines if the record should be included in the output.
  • Concat: la formula determina le stringhe da concatenare.Concat - Formula determines the strings to concatenate together.
  • Distinct: la formula restituisce un valore usato per identificare i record duplicati.Distinct - Formula returns a value, used to identify duplicate records.
  • ForAll -formula può restituire qualsiasi valore, potenzialmente con effetti collaterali.ForAll - Formula can return any value, potentially with side effects.
  • Sort: la formula indica il valore in base al quale ordinare i record.Sort - Formula provides the value to sort the records on.
  • With -formula può restituire qualsiasi valore, potenzialmente con effetti collaterali.With - Formula can return any value, potentially with side effects.

All'interno di queste formule è possibile fare riferimento ai campi del record in fase di elaborazione.Inside these formulas, you can reference the fields of the record being processed. Ognuna di queste funzioni crea un "ambito dei record" in cui viene valutata la formula, dove i campi del record sono disponibili come identificatori di primo livello.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. È anche possibile fare riferimento alle proprietà del controllo e ad altri valori in tutta l'app.You can also reference control properties and other values from throughout your app.

Ad esempio per una tabella Products:For example, take a table of Products:

Per creare questa tabella di esempio nell'app, inserire un pulsante, impostarne la proprietà onselect su questa formula, quindi selezionare il pulsante (facendo clic su di esso mentre si tiene premuto il tasto Alt in 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 }
    )
)

Per determinare se uno qualsiasi di questi prodotti avesse più richieste di quanto sia disponibile:To determine whether any of any of these products had more requested than is available:

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

Il primo argomento per Filter è la tabella di record su cui operare, mentre il secondo argomento è una formula.The first argument to Filter is the table of records to operate on, and the second argument is a formula. Filter crea un ambito dei record per la valutazione di questa formula in cui sono disponibili i campi di ogni record, in questo caso Product, Quantity Requested e Quantity Available.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. Il risultato del confronto determina se ogni record debba essere incluso nel risultato della funzione:The result of the comparison determines if each record should be included in the result of the function:

Eseguendo un'operazione di aggiunta a questo esempio è possibile calcolare la quantità da ordinare per ogni prodotto: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'
)

Qui si aggiunge una colonna calcolata al risultato.Here we are adding a calculated column to the result. AddColumns ha il proprio ambito dei record che viene usato per calcolare la differenza tra la domanda e la disponibilità.AddColumns has its own record scope that it uses to calculate the difference between what has been requested and what is available.

Infine, è possibile ridurre la tabella dei risultati solo alle colonne desiderate: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"
)

Si noti che nell'esempio precedente sono state usate le virgolette doppie (") in alcuni punti e le virgolette singole (') in altri.Note that in the above, we used double quotes (") in some places and single quotes (') in other places. Le virgolette singole sono necessarie quando si fa riferimento al valore di un oggetto, ad esempio un campo o una tabella, in cui il nome dell'oggetto contiene uno spazio.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. Le virgolette doppie vengono usate quando non si fa espressamente riferimento al valore di un oggetto, specialmente in situazioni in cui l'oggetto non esiste ancora, come nel caso di AddColumns.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.

Risoluzione dell'ambiguitàDisambiguation

I nomi di campo aggiunti con l'ambito dei record sostituiscono gli stessi nomi presenti in un'altra posizione dell'app.Field names added with the record scope override the same names from elsewhere in the app. In questo caso è comunque possibile accedere ai valori dall'esterno dell'ambito dei record con l'operatore @ di risoluzione dell'ambiguità:When this happens, you can still access values from outside the record scope with the @ disambiguation operator:

  • Per accedere ai valori da ambiti dei record nidificati, usare l'operatore @ con il nome della tabella su cui si opera usando il pattern seguente: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]
  • Per accedere ai valori globali, ad esempio origini dati, raccolte e variabili di contesto, usare il pattern [@ ObjectName ] (senza una definizione di tabella).To access global values, such as data sources, collections, and context variables, use the pattern [@ObjectName] (without a table designation).

Se la tabella in cui si opera è un'espressione, ad esempio Filter( Table , ... ) , l'operatore di risoluzione dell'ambiguità non può essere usato.If the table being operated upon is an expression, such as Filter( Table, ... ), then the disambiguation operator cannot be used. Solo l'ambito dei record più interno può accedere ai campi di questa espressione di tabella, non usando l'operatore di risoluzione dell'ambiguità.Only the innermost record scope can access fields from this table expression, by not using the disambiguation operator.

Si supponga ad esempio di avere una raccolta X:For example, imagine having a collection X:

È possibile creare questa raccolta con ClearCollect( X; [1; 2] ) .You can create this collection with ClearCollect( X; [1; 2] ).

E un'altra raccolta Y:And another collection Y:

È possibile creare questa raccolta con ClearCollect( Y; ["A"; "B"] ) .You can create this collection with ClearCollect( Y; ["A"; "B"] ).

Definire inoltre una variabile di contesto denominata value con questa formula: UpdateContext ({value: "!"})In addition, define a context variable named Value with this formula: UpdateContext( {Value: "!"} )

Riunendo tutti gli elementi,Let's put it all together. in questo contesto la formula seguente:In this context, the following formula:

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

produce la tabella:produces this table:

Si noti cheWhat is going on here? la funzione ForAll più esterna definisce un ambito dei record per X, consentendo l'accesso al campo Value di ogni record nel momento in cui viene elaborato.The outermost ForAll function defines a record scope for X, allowing access to the Value field of each record as it is processed. È possibile accedervi semplicemente usando il termine Value oppure X[@Value] .It can be accessed by simply using the word Value or by using X[@Value].

La funzione ForAll più interna definisce un altro ambito dei record per Y. Poiché per questa tabella è stato definito anche un campo Value, l'uso di Value si riferisce in questo caso al campo nel record di Y e non più a quello di X. Per accedere al campo Value di X, in questo caso è necessario usare la versione più estesa con l'operatore di risoluzione dell'ambiguità.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.

Dato che Y è l'ambito dei record più interno, l'accesso ai campi di questa tabella non richiede la risoluzione dell'ambiguità, consentendo di usare questa formula con lo stesso risultato: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"
)

Tutti gli ambiti dei record ForAll sostituiscono l'ambito globale.All the ForAll record scopes override the global scope. La variabile di contesto del valore definita non è disponibile in base al nome senza l'operatore di risoluzione dell'ambiguità.The Value context variable we defined isn't available by name without the disambiguation operator. Per accedere a questo valore, usare [@Value] .To access this value, use [@Value].

Ungroup rende flat il risultato perché le funzioni ForAll annidate generano una tabella dei risultati nidificata.Ungroup flattens the result because nested ForAll functions result in a nested result table.

Tabelle a colonna singolaSingle-column tables

Per operare su una singola colonna di una tabella, usare la funzione ShowColumns come in questo esempio:To operate on a single column from a table, use the ShowColumns function as in this example:

ShowColumns( Products; "Product" )

Questa formula produce questa tabella a colonna singola:This formula produces this single-column table:

Per un'alternativa più breve, specificare Table. Column, che estrae la tabella a colonna singola solo della colonna dalla tabella.For a shorter alternative, specify Table.Column, which extracts the single-column table of just Column from Table. Questa formula, ad esempio, produce esattamente lo stesso risultato dell'uso di ShowColumns.For example, this formula produces exactly the same result as using ShowColumns.

Products.Product

Record InlineInline records

I record vengono espressi usando parentesi graffe che contengono valori di campo denominati.You express records by using curly braces that contain named field values. È ad esempio possibile esprimere il primo record della tabella all'inizio di questo argomento usando la formula seguente: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 }

È anche possibile incorporare formule all'interno di altre formule, come nell'esempio seguente:You can also embed formulas within other formulas, as this example shows:

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

È possibile annidare i record annidando le parentesi graffe, come nell'esempio seguente:You can nest records by nesting curly braces, as this example shows:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand; 'OnOrder': ThisItem.QuantOnOrder } }

Racchiudere tra virgolette singole ogni nome di colonna che contiene un carattere speciale, ad esempio uno spazio o un virgola.Enclose each column name that contains a special character, such as a space or a colon, in single quotes. Per usare una virgoletta singola all'interno di un nome di colonna è necessario raddoppiarla.To use a single quote within a column name, double it.

Si noti che il valore nella colonna Price non include un simbolo di valuta, ad esempio un simbolo di dollaro.Note that the value in the Price column doesn't include a currency symbol, such as a dollar sign. Tale formattazione verrà applicata quando viene visualizzato il valore.That formatting will be applied when the value is displayed.

Tabelle inlineInline tables

È possibile creare una tabella usando la funzione Table e un set di record.You can create a table by using the Table function and a set of records. È possibile esprimere la tabella all'inizio di questo argomento usando la formula seguente: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 } 
)

È anche possibile annidare le tabelle:You can also nest tables:

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

Tabelle del valore inlineInline value tables

È possibile creare tabelle a colonna singola specificando i valori in parentesi quadre.You can create single-column tables by specifying values in square brackets. La tabella risultante ha una singola colonna denominata Value.The resulting table has a single column, named Value.

Ad esempio, [ 1; 2; 3; 4 ] equivale a Table( { Value: 1 }; { Value: 2 }; { Value: 3 }; { Value: 4 } ) e restituisce la tabella seguente:For example, [ 1; 2; 3; 4 ] is equivalent to Table( { Value: 1 }; { Value: 2 }; { Value: 3 }; { Value: 4 } ) and returns this table: