Informazioni sulle tabelle e sui record nelle app canvas

In Power Apps puoi 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. Per usare questa tipologia di dati in modo ottimale, esamina i concetti alla base di queste strutture.

  • Un record contiene una o più categorie di informazioni su una persona, un luogo o un oggetto. Un record può ad esempio contenere il nome, l'indirizzo di posta elettronica e il numero di telefono di un singolo cliente. Altri strumenti fanno riferimento a un record con i termini "riga" o "elemento".
  • Una tabella contiene uno o più record contenenti le stesse categorie di informazioni. Una tabella può ad esempio contenere i nomi, gli indirizzi di posta elettronica e i numeri di telefono di 50 clienti.

Nell'app userai le formule per creare, aggiornare e modificare record e tabelle. I dati verranno probabilmente letti e scritti in un'origine dati esterna, ovvero una tabella estesa. Inoltre potresti creare una o più tabelle interne denominate raccolte.

È possibile creare numerose formule che accettano come argomento il nome di una tabella, proprio come una formula in Excel accetta come argomenti uno o più riferimenti di cella. Alcune formule in Power Apps restituiscono una tabella che riflette gli altri argomenti specificati. Ad esempio potresti creare una formula:

  • per aggiornare un record in una tabella specificando tale tabella come uno di più argomenti per la funzione Patch
  • per aggiungere, rimuovere e rinominare le colonne in una tabella specificando tale tabella come argomento per la funzione AddColumns, DropColumns o RenameColumns. Nessuna di queste funzioni modifica la tabella originale. La funzione restituisce invece un'altra tabella basata sugli altri argomenti specificati.

Elementi di una tabella

Elementi della tabella.

Record

Ogni record contiene almeno una categoria di informazioni relative a una persona, un luogo o un oggetto. 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).

In una formula puoi fare riferimento a un record da se stesso, fuori dal contesto di una tabella, usando le parentesi graffe. Ad esempio, il record { Name: "Strawberries", Price: 7.99 } non è associato a una tabella. Nota che i nomi dei campi, come Name e Price nell'esempio, non sono racchiusi tra virgolette doppie.

Campi

Un campo rappresenta un'informazione in un record. Puoi visualizzare questo tipo di campo come valore di una colonna per un record specifico.

Come con un controllo, fai riferimento a un campo di un record usando . come operatore nel record. Ad esempio, First(Products).Name restituisce il campo Name del primo record nella tabella Products.

Un campo può contenere un altro record o un'altra tabella, come illustrato nell'esempio per la funzione GroupBy. Puoi annidare tutti i livelli di record e tabelle desiderati.

Colonne

Una colonna si riferisce allo stesso campo di uno o più record in una tabella. Nell'esempio precedente a ogni prodotto è associato un campo prezzo e tale prezzo è presente nella stessa colonna per tutti i prodotti. La tabella precedente include quattro colonne, visualizzate orizzontalmente nella parte superiore:

  • Nome
  • Prezzo
  • Quantità disponibile
  • Quantità ordinata

Il nome della colonna rispecchia i campi presenti in tale colonna.

Tutti i valori all'interno di una colonna appartengono allo stesso tipo di dati. 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. Il valore di un campo può anche essere vuoto.

Le colonne possono essere denominate "campi" in altri strumenti.

Nota

Per origini dati quali riquadri SharePoint, Excel o Power BI che contengono nomi di colonne con spazi, Power Apps sostituirà gli spazi con "_x0020_". Ad esempio, "Nome colonna" in un riquadro SharePoint, Excel o Power BI apparirà come "Nome_x0020_colonna" in Power Apps quando viene visualizzato nel layout dati o usato in una formula.

Table

Una tabella è costituita da uno o più record, ognuno con più campi con nomi coerenti tra i record.

Qualsiasi tabella archiviata in un'origine dati o in una raccolta ha un nome che usi per fare riferimento alla tabella e passarla a funzioni che usano le tabelle come argomenti. Le tabelle possono anche essere il risultato di una funzione o una formula.

Come nell'esempio seguente, puoi esprimere una tabella in una formula usando la funzione Table con un set di record, usando le parentesi graffe:

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

Puoi anche definire una tabella a colonna singola con parentesi quadre. Un modo equivalente per scrivere la formula precedente è il seguente:

[ "Strawberry", "Vanilla" ]

Formule delle tabelle

In Excel e Power Apps, le formule vengono usate per modificare i numeri e le stringhe di testo in modo simile:

  • In Excel digita un valore, ad esempio 42, nella cella A1 e quindi digita una formula, ad esempio A1+2, in un'altra cella per visualizzare il valore di 44.
  • In Power Apps, imposta la proprietà Default di Slider1 su 42 e imposta la proprietà Text di un'etichetta su Slider1.Value + 2 per visualizzare il valore di 44.

In entrambi i casi, il valore calcolato cambia automaticamente se modifichi i valori degli argomenti, ad esempio il numero nella cella A1 o il valore di Slider1.

Analogamente puoi usare le formule per accedere ai dati e modificarli in tabelle e record. Puoi 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. 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.

Come con i numeri, le formule che includono tabelle e record vengono ricalcolate automaticamente in caso di modifica della tabella o del record sottostante. 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.

Esaminiamo alcuni semplici esempi.

  1. Crea un app vuota per un telefono e aggiungi un controllo Raccolta verticale che contiene altri controlli.

    Per impostazione predefinita, sullo schermo viene visualizzato il testo segnaposto di una tabella denominata CustomGallerySample. La proprietà Items del controllo Raccolta viene impostata automaticamente su tale tabella.

    Raccolta.

    Nota

    Alcuni controlli sono stati riorganizzati e ingranditi a scopo illustrativo.

  2. Invece di impostare la proprietà Items sul nome di una tabella, impostala su una formula che include il nome della tabella come argomento, come nell'esempio seguente:

    Sort(CustomGallerySample, SampleHeading, SortOrder.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. La funzione supporta anche un terzo argomento facoltativo, che indica che vuoi ordinare i dati in ordine decrescente.

    Ordinare per raccolta.

  3. Imposta la proprietà Items su una formula che usa la formula del passaggio precedente come argomento e restituisce una tabella, come nell'esempio seguente:

    FirstN(Sort(CustomGallerySample, SampleHeading, SortOrder.Descending), 2)

    In questa formula usi la funzione FirstN per visualizzare un determinato numero di record in una tabella. Usi 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.

    L'intera formula restituisce una tabella contenente i primi due record della tabella CustomGallerySample, ordinati in base alla colonna SampleHeading in ordine decrescente.

    FirstN per la raccolta.

Funzioni delle tabelle e proprietà di controllo

Considera la funzione Lower. Se la variabile welcome contiene la stringa di testo "Hello, World", la formula Lower( welcome ) restituisce "hello, world". Questa funzione non modifica in alcun modo il valore nella variabile. Lower è una funzione pura in quanto elabora solo input e produce output. Non ha effetti collaterali. Tutte le funzioni in Excel e la maggior parte delle funzioni in Power Apps sono funzioni pure che consentono di ricalcolare automaticamente la cartella di lavoro o l'app.

Power Apps offre una serie di funzioni che operano sulle tabelle allo stesso modo. Queste funzioni accettano le tabelle come input e filtrano, ordinano, trasformano, riducono e riepilogano intere tabelle di dati. Infatti, Lower e molte altre funzioni che in genere accettano un singolo valore possono anche accettare una tabella a colonna singola come input.

  • Sort, Filter: ordina e filtra i record.
  • FirstN, LastN: restituisce i primi o gli ultimi N record della tabella.
  • 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.
  • 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.
  • Len: per una colonna di stringhe, restituisce una tabella a colonna singola che contiene la lunghezza di ogni stringa.
  • Concatenate: concatena più colonne di stringhe e restituisce una tabella di stringhe a colonna singola.
  • AddColumns, DropColumns, RenameColumns, ShowColumns: manipolazioni delle colonne della tabella che restituiscono una nuova tabella con colonne diverse.
  • Distinct: rimuove i record duplicati.
  • Shuffle: sposta i record in un ordine casuale.
  • HashTags: cerca gli hashtag in una stringa.
  • Errors: offre informazioni sugli errori quando si usa un'origine dati.

Molte di queste funzioni accettano come input una tabella a colonna singola. Se un'intera tabella ha solo una colonna, è possibile specificarla per nome. Se una tabella ha più colonne, puoi specificare una di quelle colonne utilizzando la sintassi Table.Column. Ad esempio, Products.Name restituisce la tabella a colonna singola dei soli valori Name dalla tabella Products.

Puoi rimodellare completamente una tabella come preferisci usando la funzione AddColumns, RenameColumns, ShowColumns o DropColumns. Ancora una volta, queste funzioni cambiano solo l'output, non l'origine.

Le proprietà dei controlli possono anche essere tabelle:

  • Items: si applica alle raccolte, agli elenchi a discesa e alle caselle combinate. Questa proprietà definisce la tabella mostrata dalla raccolta o dall'elenco.
  • SelectedItems: si applica agli elenchi a discesa e alle caselle combinate. Questa proprietà definisce la tabella degli elementi che l'utente ha selezionato se SelectMultiple è abilitato.

Formule di comportamento

Altre funzioni sono specificamente progettate per modificare i dati e avere effetti collaterali. Poiché queste funzioni non sono pure, devi crearle con attenzione e non possono partecipare al ricalcolo automatico dei valori nell'app. Puoi usare queste funzioni solo nelle formule di comportamento.

  • Collect, Clear, ClearCollect: crea raccolte, le cancella e vi aggiunge i dati.
  • Patch: modifica uno o più campi di un record.
  • Update, UpdateIf: aggiorna i record che corrispondono a uno o più criteri specificati.
  • Remove, RemoveIf: elimina i record che corrispondono a uno o più criteri specificati.

Formule dei record

Puoi anche 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. Tornando all'esempio di raccolta precedente, usi la proprietà Gallery1.Selected per visualizzare le informazioni di un record qualsiasi selezionato dall'utente in tale raccolta.

  1. Aggiungi un pulsante e impostane la proprietà OnSelect su questa formula:
    Collect( SelectedRecord, Gallery1.Selected )

  2. Seleziona il pulsante tenendo premuto il tasto ALT.

  3. Nel menu File seleziona Raccolte.

    Raccolta SelectedRecord.

Questa formula restituisce un record che include non solo i dati del record selezionato nella raccolta, ma anche ogni controllo in tale raccolta. 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. Seleziona l'icona della tabella nella colonna Subtitle1 per esaminare i dati.

Nota

La colonna Subtitle1 può essere denominata Subtitle2 o similare se hai aggiunto elementi diversi da quelli specificati in questo argomento.

Dopo avere selezionato il record puoi estrarne i singoli campi con l'operatore . .

  1. Aggiungi un controllo Etichetta e spostalo sotto la raccolta e il pulsante.

  2. Imposta la proprietà Text dell'etichetta su questa espressione:
    "Selected: " & Gallery1.Selected.SampleHeading

    Proprietà di testo con etichetta aggiornata.

Hai usato la proprietà Selected, un record, quindi hai estratto la proprietà SampleHeading.

Puoi anche usare un record come contenitore per utilizzo generico per valori denominati correlati.

  • Se compili una formula con le funzioni UpdateContext e Navigate, usa un record per raccogliere le variabili di contesto che vuoi aggiornare.
  • Usa la proprietà Updates in un controllo Modulo modifica per raccogliere le modifiche apportate dall'utente in un modulo.
  • Usa la funzione Patch per aggiornare un'origine dati e anche per unire i record.

In questi casi, il record non ha mai fatto parte di una tabella.

Funzioni dei record e proprietà di controllo

Funzioni che restituiscono record:

  • FirstN, LastN: restituisce i primi o gli ultimi record della tabella.
  • Lookup: restituisce il primo record di una tabella che corrisponde a uno o più criteri.
  • Patch: aggiorna un'origine dati o unisce i record.
  • Defaults: restituisce i valori predefiniti per un'origine dati.

Proprietà che restituiscono record:

  • Selected: si applica alle raccolte e agli elenchi a discesa. Restituisce il record attualmente selezionato.
  • Updates: si applica alle raccolte. Incorpora tutte le modifiche apportate da un utente in un modulo di immissione dati.
  • Update: si applica ai controlli di input, ad esempio a controlli Input di testo e dispositivi di scorrimento. Imposta singole proprietà per la raccolta.

Ambito dei record

Alcune funzioni valutano una formula in tutti i record di una tabella singolarmente. Il risultato della formula viene usato in vari modi:

  • AddColumns: la formula restituisce il valore del campo aggiunto.
  • Average, Max, Min, Sum, StdevP, VarP: la formula restituisce il valore da aggregare.
  • Filter, Lookup: la formula determina se il record deve essere incluso nell'output.
  • Concat: la formula determina le stringhe da concatenare.
  • Distinct: la formula restituisce un valore usato per identificare i record duplicati.
  • ForAll: la formula può restituire qualsiasi valore, potenzialmente con effetti collaterali.
  • Sort: la formula indica il valore in base al quale ordinare i record.
  • With: la formula può restituire qualsiasi valore, potenzialmente con effetti collaterali.

All'interno di queste formule puoi fare riferimento ai campi del record in fase di elaborazione. 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. È inoltre possibile fare riferimento alle proprietà di controllo e ad altri valori nell'app.

Ad esempio per una tabella Products:

Esempio di prodotti.

Per creare questa tabella di esempio nella tua app, inserisci un pulsante, imposta la proprietà OnSelect su questa formula, quindi seleziona il pulsante (fai clic mentre tieni premuto il tasto ALT in 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 }
    )
)

Per determinare se per uno qualsiasi di questi prodotti la domanda ecceda la disponibilità:

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

Il primo argomento per Filter è la tabella di record su cui operare, mentre il secondo argomento è una 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. Il risultato del confronto determina se ogni record debba essere incluso nel risultato della funzione:

Tabella filtrata.

Eseguendo un'operazione di aggiunta a questo esempio possiamo calcolare la quantità da ordinare per ogni prodotto:

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

Aggiungi una colonna calcolata al risultato. AddColumns ha il proprio ambito dei record che viene usato per calcolare la differenza tra la domanda e la disponibilità.

Colonne aggiunte.

Puoi infine ridurre la tabella dei risultati alle sole colonne desiderate:

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

Tabella aggiornata.

Nota che nell'esempio precedente sono state usate le virgolette doppie (") in alcuni punti e le virgolette singole (') in altri. 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. 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.

Risoluzione dell'ambiguità

I nomi di campo aggiunti con l'ambito di record eseguono l'override degli stessi nomi da qualsiasi altra posizione nell'app. In questo caso, puoi comunque accedere ai valori dall'esterno dell'ambito di record con l'operatore di risoluzione ambiguità @:

  • Per accedere ai valori da ambiti dei record nidificati, usa l'operatore @ con il nome della tabella su cui si opera usando il pattern seguente:
    Table[@FieldName]
  • Per accedere ai valori globali, ad esempio origini dati, raccolte e variabili di contesto, usa il pattern [@ObjectName] (senza una definizione di tabella).

Se la tabella in cui si opera è un'espressione, ad esempio Filter( Table, ... ), l'operatore di risoluzione dell'ambiguità non può essere usato. Solo l'ambito dei record più interno può accedere ai campi di questa espressione di tabella, non usando l'operatore di risoluzione dell'ambiguità.

Supponi ad esempio di avere una raccolta X:

Raccolta X.

Puoi creare questa raccolta con ClearCollect( X, [1, 2] ).

E un'altra raccolta Y:

Raccolta Y.

Puoi creare questa raccolta con ClearCollect( Y, ["A", "B"] ).

Definisci anche una variabile di contesto denominata Value con questa formula: UpdateContext( {Value: "!"} )

Riuniamo tutti gli elementi, in questo contesto la formula seguente:

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

produce la tabella:

Tabella XY.

Nota che 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. È possibile accedervi semplicemente usando il termine Value oppure X[@Value].

La funzione ForAll più interna definisce un altro ambito del record per Y . Dal momento che questa tabella ha anche un campo Value definito, utilizzando Value qui si fa riferimento al campo nel record di Y e non più a quello di X. Qui, per accedere al campo Value di X dobbiamo usare la versione più lunga con l'operatore di risoluzione ambiguità.

Dato che Y è l'ambito del 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:

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

Tutti gli ambiti dei record ForAll sostituiscono l'ambito globale. La variabile di contesto Value definita non è disponibile in base al nome senza l'operatore di risoluzione dell'ambiguità. Per accedere a questo valore, utilizza [@Value].

Ungroup rende flat il risultato perché le funzioni ForAll annidate producono una tabella di risultati annidata.

Tabelle a colonna singola

Per operare su una singola colonna di una tabella, utilizza la funzione ShowColumns come in questo esempio:

ShowColumns( Products, "Product" )

Questa formula produce questa tabella a colonna singola:

Tabella a colonna singola.

Per un'alternativa più breve, specifica Table.Column, che estrae la tabella a colonna singola di Column da Table. Ad esempio, questa formula produce esattamente lo stesso risultato di ShowColumns.

Products.Product

Record inline

I record vengono espressi usando parentesi graffe che contengono valori di campo denominati. Ad esempio puoi esprimere il primo record della tabella all'inizio di questo argomento usando la formula seguente:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

Puoi anche incorporare formule all'interno di altre formule, come nell'esempio seguente:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Puoi annidare i record annidando le parentesi graffe, come nell'esempio seguente:

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

Racchiudi tra virgolette singole ogni nome di colonna che contiene un carattere speciale, ad esempio uno spazio o un virgola. Per usare una virgoletta singola all'interno di un nome di colonna è necessario raddoppiarla.

Nota che il valore nella colonna Price non include un simbolo di valuta, ad esempio un simbolo di dollaro. Tale formattazione verrà applicata quando viene visualizzato il valore.

Tabelle inline

Puoi creare una tabella usando la funzione Table e un set di record. Puoi esprimere la tabella all'inizio di questo argomento usando la formula seguente:

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 } 
)

Puoi anche annidare le tabelle:

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

Tabelle di valori inline

Puoi creare tabelle a colonna singola specificando i valori in parentesi quadre. La tabella risultante ha una singola colonna denominata Value.

Ad esempio, [ 1, 2, 3, 4 ] è equivalente a Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) e restituisce questa tabella:

Tabella in linea.

Nota

Puoi indicarci le tue preferenze di lingua per la documentazione? Partecipa a un breve sondaggio. (il sondaggio è in inglese)

Il sondaggio richiederà circa sette minuti. Non viene raccolto alcun dato personale (Informativa sulla privacy).