Uso delle relazioni in Power Apps

Completato

Power Apps offre di fatto un ricco set di funzioni e controlli su misura per stabilire relazioni e usarle all'interno delle proprie app. Le relazioni trovano in genere due applicazioni principali nella maggior parte delle app.

In primo luogo, come discusso in precedenza, si usano le relazioni per mettere in connessione dati precedentemente archiviati in più tabelle. Questa unità illustra come connettere le tabelle, ad esempio le tabelle clienti e fatture, e dimostra come creare associazioni significative tra loro.

In secondo luogo, le relazioni vengono spesso usate per recuperare informazioni dal record padre quando si accede direttamente al record figlio. In questo caso, l'unità illustra come recuperare il nome di un cliente mentre si lavora nel contesto di un record di fattura. Questa funzionalità consente di accedere in modo efficiente a informazioni rilevanti da record correlati e di visualizzarle in modo altrettanto efficiente, migliorando così l'usabilità e la chiarezza dell'app.

Connessione di una tabella padre e una tabella figlio in Power Apps

Questo esempio illustra come fare riferimento a una relazione tra un elemento padre e un elemento figlio usando il filtro e la funzione LookUp di Power Apps.

La tabella Customer è l'elemento padre in questa relazione, il che significa che un cliente può avere molte fatture. Si noti che nella tabella Customer non sono presenti riferimenti alla tabella Invoice. Nell'esempio, il nome dell'origine dati per questa tabella è CustomerTable. La tabella ha un aspetto simile al seguente.

ID CustomerName CustomerPhoneNumber
1 Contoso 513-555-1212
2 Fabrikam 206-555-1313
3 Tailspin Toys 404-555-1414

La tabella Invoice è l'elemento figlio della relazione. Nell'esempio, il nome dell'origine dati per questa tabella è InvoiceTable. La tabella ha un aspetto simile al seguente.

ID InvoiceDate InvoiceDescription InvoiceAmount CustomerID
1 16/05/2020 Parts 412,33 1
2 01/05/2020 Service 205,44 3
3 06/05/2020 Travel 132,98 1
4 31/05/2020 Parts 75,55 2

In Power Apps, se queste tabelle sono create come origini dati, è possibile usare un controllo Raccolta per visualizzare il contenuto della tabella Customer. Usare il controllo Raccolta con i passaggi seguenti:

  1. Aggiungere un controllo Raccolta nel canvas.

  2. Impostare la proprietà Items su CustomerTable.

La raccolta mostra un elenco di tutti i record di clienti nella tabella, ovvero Gallery1.

Per visualizzare l'intero contenuto di InvoiceTable, effettuare i seguenti passaggi:

  1. Aggiungere un controllo Raccolta nel canvas.

  2. È possibile impostare la proprietà Items su InvoiceTable.

La raccolta mostra un elenco di tutti i record di fatture nella tabella, ovvero Gallery2.

A questo punto, per visualizzare solo le fatture relative al cliente selezionato in Gallery1, è necessario modificare la proprietà Items di Gallery2 con una formula simile a questa:

Filter(InvoiceTable, CustomerID = Gallery1.Selected.ID)

La formula fa quanto segue.

Argomento della formula Input della formula Note
source InvoiceTable
logical_test CustomerID = Gallery1.Selected.ID CustomerID è il nome della colonna di InvoiceTable. Gallery1.Selected. L'ID è il valore della colonna ID per il record selezionato nella raccolta.

La formula indica a Gallery2 di mostrare solo i record delle fatture per il cliente selezionato in Gallery1.

Ricerca delle informazioni archiviate nella tabella padre dalla tabella figlio

A volte sorge la necessità di scorrere verso l'alto o "dal basso verso l'alto" da un record figlio al record padre associato. Nello scenario in cui si stanno esaminando i dettagli di un record di fattura, ad esempio con un ID pari a 2, e in cui si è a conoscenza della sua associazione al cliente con ID pari a 3, è possibile che si voglia estrarre più dettagli dalla tabella padre.

In questo caso, è possibile usare la relazione tra le tabelle per recuperare informazioni relative al cliente, come il nome o il numero di telefono, facendo riferimento ai record associati nella tabella padre. Questa tecnica consente di raccogliere dettagli pertinenti dai record collegati nella tabella padre in base alle informazioni disponibili nel record figlio, offrendo così una visualizzazione completa e facilitando i riferimenti incrociati tra i dati correlati. In Power Apps, è possibile usare la funzione LookUp per ottenere questo risultato.

La funzione LookUp consente di eseguire query su un'origine dati per trovare un singolo record che soddisfa i criteri di valutazione. Nell'esempio che segue si usano le stesse tabelle dell'esempio precedente, ma si inizia con una schermata vuota per evitare confusione.

Per visualizzare l'intero contenuto di InvoiceTable, effettuare i seguenti passaggi:

  1. Aggiungere un controllo Raccolta nel canvas.

  2. Impostare la proprietà Items su InvoiceTable.

  3. Impostare Layout su Titolo, Sottotitolo e Corpo.

  4. Nel riquadro Dati impostare Titolo su InvoiceDate, Sottotitolo su InvoiceAmount e Corpo su CustomerID.

La raccolta mostra un elenco di tutti i record di fatture nella tabella, Per impostare i campi di data come nell'immagine seguente, modificare il campo Titolo in questo modo: Text(ThisItem.InvoiceDate,DateTimeFormat.ShortDate). Questa è Gallery3.

Screenshot della raccolta con un elenco di tutti i record delle fatture.

La visualizzazione del valore dell'ID per ogni cliente non fornisce molte informazioni all'utente dell'app. Quindi, per visualizzare il nome del cliente invece dell'ID, è possibile procedere come segue:

In Gallery3 selezionare l'etichetta per Corpo e impostare la proprietà Text su:

LookUp(CustomerTable, ID = ThisItem.CustomerID, CustomerName)

La formula fa quanto segue:

Argomento della formula Input della formula Note
source CustomerTable
logical_test ID = ThisItem.CustomerID ID è il nome della colonna di CustomerTable. ThisItem.CustomerID è il valore della colonna CustomerID per il record corrente nella raccolta.
result CustomerName Questa è la colonna che viene restituita per i record che soddisfano logical_test.

Apportata tale modifica, Gallery3 ora specifica il nome del fornitore.

Screenshot della raccolta descrittiva con l'elenco dei record delle fatture.

Note sulle prestazioni

L'esecuzione di ricerche da un record figlio al relativo record padre all'interno di una Raccolta può avere implicazioni significative sulle prestazioni. Nello scenario della dimostrazione, l'utilizzo della funzione LookUp all'interno di una Raccolta attiverebbe più volte le query sull'origine dati, una per ogni record in InvoiceTable.

Si consideri che se InvoiceTable contenesse centinaia di record, la funzione LookUp verrebbe eseguita altrettante volte. Ciò significa che potrebbero verificarsi centinaia di chiamate separate all'origine dati. Di conseguenza, il traffico di rete aumenterebbe e i tempi di elaborazione si allungherebbero, producendo così un impatto negativo sulle prestazioni dell'app.

Prima di implementare le chiamate all'origine dati, soprattutto all'interno di una Raccolta in cui vengono elaborati più record, è fondamentale soppesare i compromessi in termini di prestazioni. L'ottimizzazione di queste query, magari memorizzando i dati nella cache o ristrutturando la logica per ridurre al minimo le chiamate ripetitive, è essenziale per mantenere le prestazioni dell'app a livello ottimale. Si consideri sempre la portata dei dati e il potenziale impatto sulle prestazioni quando si implementano tali operazioni all'interno del contesto di una Raccolta.

Un'opzione migliore da considerare per questo scenario prevede di usare una raccolta o altri metodi per eseguire le query e archiviare tutti i record dei clienti, quindi di eseguire la ricerca nella raccolta. Per altre informazioni sulle prestazioni dei dati, consultare il post del blog su Considerazioni sulle prestazioni con Power Apps.

L'unità successiva spiega in che modo Microsoft Dataverse rimuove tutti i problemi associati ai dati correlati eseguendo automaticamente il drill-down.