La delega nelle app canvasUnderstand delegation in a canvas app

PowerApps include un potente set di funzioni per l'applicazione di filtri, ordinamento e strutturazione delle tabelle di dati in un'app canvas: Filtro, ordinamento, e AddColumns funzioni per citarne solo alcuni.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data in a canvas app: Filter, Sort, and AddColumns functions to name just a few. Con queste funzioni è possibile offrire agli utenti un accesso mirato alle informazioni di cui necessitano.With these functions, you can provide your users with focused access to the information they need. Per chi è abituato a lavorare con i database, usare queste funzioni equivale a scrivere una query di database.For those with a database background, using these functions is the equivalent of writing a database query.

La chiave per la creazione di applicazioni efficienti è ridurre al minimo la quantità di dati che si devono trasferire al dispositivo.The key to building efficient apps is to minimize the amount of data that must be brought to your device. In alcuni casi, sono necessari solo alcuni dei milioni di record gestiti oppure un singolo valore aggregato può rappresentare migliaia di record.Perhaps you need only a handful of records from a sea of million, or a single aggregate value can represent thousands of records. O forse si può recuperare solo il primo set di record e lasciare da parte il resto finché l'utente non dimostra di volerne altri.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Limitare il campo di azione può ridurre notevolmente la potenza di elaborazione, la memoria e la larghezza di banda della rete necessarie per l'app e, di conseguenza, ottimizzare i tempi di risposta per gli utenti, anche su telefoni connessi attraverso una rete mobile.Being focused can dramatically reduce the processing power, memory, and network bandwidth that your app needs, resulting in snappier response times for your users, even on phones connected via a cellular network.

La delega è il punto di incontro tra la "capacità espressiva" delle formule di PowerApps e la necessità di ridurre la quantità di dati in movimento sulla rete.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. In breve, PowerApps delega l'elaborazione dei dati all'origine dati, anziché spostare i dati nell'app per l'elaborazione locale.In short, PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

Quando il processo diventa complicato, ed è il motivo per cui esiste questo articolo, significa che non tutto ciò che si può esprimere in una formula di PowerApps può essere delegato a ogni origine dati.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. Il linguaggio di PowerApps simula il linguaggio delle formule di Excel, progettato con accesso completo e immediato a una cartella di lavoro completa in memoria, con un'ampia gamma di funzioni numeriche e di modifica del testo.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. Di conseguenza, il linguaggio di PowerApps è molto più ricco rispetto a quello che la maggior parte delle origini dati è in grado di supportare, inclusi potenti motori di database come SQL Server.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

L'uso di grandi set di dati richiede l'uso di origini dati e formule che si possono delegare.Working with large data sets requires using data sources and formulas that can be delegated. È l'unico modo per garantire un funzionamento sempre corretto dell'app e la possibilità per gli utenti di accedere a tutte le informazioni necessarie.It's the only way to keep your app performing well and ensure users can access all the information they need. Fare attenzione agli avvisi di delega, che identificano le posizioni in cui la delega non è possibile.Take heed of delegation warnings that identify places where delegation isn't possible. Se si usano set di dati di piccole dimensioni (meno di 500 record), è possibile usare qualsiasi origine dati e qualsiasi formula, perché, se la formula non può essere delegata, l'app è in grado di elaborare i dati localmente.If you're working with small data sets (fewer than 500 records), you can use any data source and formula because the app can process data locally if the formula can't be delegated.

Nota

Gli avvisi di delega in precedenza erano contrassegnati in PowerApps come suggerimenti "punto blu", ma in seguito i suggerimenti di delega sono stati riclassificati come avvisi.Delegation warnings were previously flagged in PowerApps as "blue dot" suggestions, but delegation suggestions have since been re-classified as warnings. Se il numero di record dei dati dell'origine è superiore a 500 e la delega di una funzione non è possibile, PowerApps potrebbe non essere in grado di recuperare tutti i dati e i risultati visualizzati dall'app potrebbero non essere corretti.If the data in your data source exceeds 500 records and a function can't be delegated, PowerApps might not be able to retrieve all of the data, and your app may have wrong results. Gli avvisi di delega consentono di gestire l'app in modo che i dati di questa siano corretti.Delegation warnings help you manage your app so that it has correct results.

Origini dati delegabiliDelegable data sources

La delega è supportata solo determinate origini dati tabulari.Delegation is supported for certain tabular data sources only. Se un'origine dati supporta la delega, relativi documentazione dei connettori illustra tale supporto.If a data source supports delegation, its connector documentation outlines that support. Ad esempio, queste origini dati tabulari sono quelli più diffusi e supportano la delega:For example, these tabular data sources are the most popular, and they support delegation:

Importare le cartelle di lavoro di Excel (con il aggiunge dati statici all'app origine dati), raccolte e le tabelle archiviate in variabili di contesto non richiedono la delega.Imported Excel workbooks (using the Add static data to your app data source), collections, and tables stored in context variables don't require delegation. Tutti questi dati sono già in memoria e può essere applicato il linguaggio di PowerApps completo.All of this data is already in memory, and the full PowerApps language can be applied.

Funzioni delegabiliDelegable functions

Il passaggio successivo è usare solo le formule che si possono delegare.The next step is to use only those formulas that can be delegated. Sono inclusi gli elementi delle formule che possono essere delegati.Included here are the formula elements that could be delegated. Tuttavia, ogni origine dati è diversa e non tutte supportano tutti questi elementi.However, every data source is different, and not all of them support all of these elements. Controllare gli avvisi di delega in ogni formula specifica.Check for delegation warnings in your particular formula.

Questi elenchi cambiano nel tempo.These lists will change over time. Stiamo lavorando per supportare altre funzioni e operatori con la delega.We're working to support more functions and operators with delegation.

Funzioni di filtroFilter functions

Filter, Search e LookUp possono essere delegate.Filter, Search, and LookUp can be delegated.

All'interno delle funzioni Filter e LookUp è possibile selezionare i record appropriati usando gli elementi seguenti con le colonne della tabella:Within the Filter and LookUp functions, you can use these with columns of the table to select the appropriate records:

È anche possibile usare le parti della formula che restituiscono un valore costante per tutti i record.You can also use portions of your formula that evaluate to a constant value for all records. Ad esempio, Left (Language (), 2), data (2019, 3, 31), e Today () non dipendono da tutte le colonne del record e, di conseguenza, restituiscono lo stesso valore per tutti i record.For example, Left( Language(); 2 ), Date( 2019; 3; 31 ), and Today() don't depend on any columns of the record and, therefore, return the same value for all records. Questi valori possono essere inviati all'origine dati come una costante e non si blocchino la delega.These values can be sent to the data source as a constant and won't block delegation.

L'elenco precedente non include questi elementi importanti:The previous list doesn't include these notable items:

Funzioni di ordinamentoSorting functions

Sort e SortByColumns si possono delegare.Sort and SortByColumns can be delegated.

In Sort la formula può solo essere il nome di una singola colonna e non può includere altri operatori o funzioni.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Funzioni di aggregazioneAggregate functions

È possibile delegare le funzioni Sum, Average, Min e Max.Sum, Average, Min, and Max can be delegated. Questa delega è attualmente supportata solo da un numero limitato di origini dati. Per i dettagli, vedere l'elenco di deleghe.Only a limited number of data sources support this delegation at this time; check the delegation list for details.

Non è possibile delegare le funzioni di conteggio, come CountRows, CountA e Count.Counting functions such as CountRows, CountA, and Count can't be delegated.

Non è possibile delegare altre funzioni di aggregazione, come StdevP e VarP.Other aggregate functions such as StdevP and VarP can't be delegated.

Funzioni di trasformazione della tabellaTable shaping functions

AddColumns, DropColumns, RenameColumns, e ShowColumns parzialmente supportano la delega.AddColumns, DropColumns, RenameColumns, and ShowColumns partially support delegation. Le formule nei relativi argomenti possono essere delegate.Formulas in their arguments can be delegated. Tuttavia, l'output di queste funzioni sono soggetti al limite di record non di delega.However, the output of these functions are subject to the non-delegation record limit.

Come in questo esempio, usano spesso Maker AddColumns e ricerca per unire le informazioni da una tabella in un altro, noto come un Join in termini di database:As in this example, makers often use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance:

AddColumns( Products; 
    "Supplier Name"; 
    LookUp( Suppliers; Suppliers.ID = Product.SupplierID ).Name 
)

Sebbene prodotti e Suppliers possono essere origini dati delegabili e ricerca è una funzione delegabile, l'output del AddColumnsfunzione non può essere delegata.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the output of the AddColumns function isn't delegable. Il risultato dell'intera formula è limitato per la prima parte del prodotti zdroj dat.The result of the entire formula is limited to the first portion of the Products data source. Poiché la funzione LookUp e la relativa origine dati sono delegabili, è possibile trovare una corrispondenza per Suppliers ovunque nell'origine dati, anche se è di grandi dimensioni.Because the LookUp function and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it's large.

Se si usa AddColumns in questo modo LookUp devono effettuare chiamate separate all'origine dati per ognuno dei primi record in prodotti, in modo che una grande quantità di rete CHATTER.If you use AddColumns in this manner, LookUp must make separate calls to the data source for each of those first records in Products, which causes a lot of network chatter. Se Suppliers è abbastanza piccola e non cambia spesso, è possibile chiamare le raccogliere funzionano in OnStart per memorizzare nella cache i dati origine nell'app all'avvio.If Suppliers is small enough and doesn't change often, you could call the Collect function in OnStart to cache the data source in your app when it starts. In alternativa, è Impossibile ristrutturare l'app in modo che inserire i record correlati solo quando l'utente li richiede.As an alternative, you could restructure your app so that you pull in the related records only when the user asks for them.

Funzioni non delegabiliNon-delegable functions

Tutte le altre funzioni non supportano la delega, incluse queste funzioni importanti:All other functions don't support delegation, including these notable functions:

Limiti non delegabiliNon-delegable limits

Le formule che non possono essere delegate verranno elaborate in locale.Formulas that can't be delegated will be processed locally. Ciò consente di sfruttare il linguaggio delle formule di PowerApps in tutta la sua ampiezza.This allows for the full breadth of the PowerApps formula language to be used. Ma a un prezzo: tutti i dati devono prima essere trasferiti nel dispositivo e questo potrebbe richiedere il recupero di una grande quantità di dati sulla rete.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. L'operazione può richiedere tempo, dando l'impressione che l'applicazione sia lenta o si sia arrestata in modo anomalo.That can take time, giving the impression that your app is slow or possibly crashed.

Per evitare questo problema, PowerApps impone un limite sulla quantità di dati che possono essere elaborati localmente: 500 record per impostazione predefinita.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records by default. Abbiamo scelto questo numero in modo che sia comunque possibile accedere ai set di dati di piccole dimensioni e circoscrivere l'uso dei set di dati di dimensioni maggiori visualizzando i risultati parziali.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Ovviamente è necessario fare attenzione quando si usa questo servizio perché può generare confusione per gli utenti.Obviously care must be taken when using this facility because it can confuse users. Si consideri ad esempio una funzione Filter con una formula di selezione che non può essere delegata, per un'origine dati contenente un milione di record.For example, consider a Filter function with a selection formula that can't be delegated, over a data source that contains a million records. Poiché il filtro viene applicato in locale, vengono analizzati solo i primi 500 record.Because the filtering is done locally, only the first 500 records are scanned. Se il record che interessa è il numero 501 o 500.001, non viene considerato né restituito da Filter.If the desired record is record 501 or 500,001, it isn't considered or returned by Filter.

Anche le funzioni di aggregazione possono provocare confusione.Aggregate functions can also cause confusion. Si supponga di usare Average per una colonna della stessa origine dati con un milione di record.Take Average over a column of that same million-record data source. La delega di Average non è ancora possibile e quindi la media viene calcolata solo per i primi 500 record.Average can't yet be delegated, so only the first 500 records are averaged. Se non si presta attenzione, un utente dell'applicazione può interpretare una risposta parziale come risposta completa.If you're not careful, a partial answer could be misconstrued as a complete answer by a user of your app.

Modifica del limiteChanging the limit

il numero predefinito di record è 500, ma è possibile modificare questo numero per un'intera app:500 is the default number of records, but you can change this number for an entire app:

  1. Scegliere Impostazioni app nella schedaFile.On the File tab, select App settings.
  2. In Funzionalità sperimentali modificare l'impostazione Limite per le righe di dati per le query non delegabili da 1 a 2000.Under Experimental features, change the Data row limit for non-delegable queries setting from 1 to 2000.

In alcuni casi, un valore pari a 2.000 (o 1.000 oppure 1.500) è sufficiente per le esigenze dello scenario specifico.In some cases, you'll know that 2,000 (or 1,000 or 1,500) will satisfy the needs of your scenario. Con un po' di attenzione è possibile incrementare questo numero per adattarlo allo scenario specifico.With care, you can increase this number to fit your scenario. Man mano che si incrementa questo numero, le prestazioni dell'app possono peggiorare, in particolare per tabelle di grandi dimensioni con molte colonne.As you increase this number, your app's performance may degrade, especially for wide tables with lots of columns. La risposta migliore è comunque delegare quanto più possibile.Still, the best answer is to delegate as much as you can.

Per assicurarsi che sia possibile ridimensionare l'app per adattarla a set di dati di grandi dimensioni, ridurre questa impostazione a 1.To ensure that your app can scale to large data sets, reduce this setting down to 1. Eventuali elementi che non possono essere delegati restituiscono un singolo record, che dovrebbe essere facile da individuare durante il test dell'app.Anything that can't be delegated returns a single record, which should be easy to detect when testing your app. Ciò può contribuire a evitare eventi imprevisti quando si prova a passare in produzione un'app modello di verifica.This can help avoid surprises when trying to take a proof-of-concept app to production.

Avvisi di delegaDelegation warnings

Per capire più facilmente per quali elementi è attiva la delega e per quali non lo è, PowerApps visualizza un avviso (triangolo giallo) quando si crea una formula che contiene un elemento che non può essere delegato.To make it easier to know what is and isn't being delegated, PowerApps provides warning (yellow triangle) when you create a formula that contains something that can't be delegated.

Gli avvisi di delega vengono visualizzati solo per le formule che interessano origini dati delegabili.Delegation warnings appear only on formulas that operate on delegable data sources. Se non viene visualizzato un avviso e si ritiene che la formula non sia correttamente delegata, verificare che il tipo di origine dati sia presente nell'elenco delle origini dati delegabili riportato in precedenza in questo argomento.If you don't see a warning and you believe your formula isn't being properly delegated, check the type of data source against the list of delegable data sources earlier in this topic.

EsempiExamples

Per questo esempio, verrà generata automaticamente un'app di tre schermate basata su una tabella SQL Server denominata [dbo].[Fruit].For this example, you'll automatically generate a three-screen app based on a SQL Server table named [dbo].[Fruit]. Per informazioni su come generare l'app, è possibile applicare i principi analoghi nel argomento su Common Data Service a SQL Server.For information about how to generate the app, you can apply similar principles in the topic about Common Data Service to SQL Server.

App con tre schermate

La proprietà Items della raccolta è impostata su una formula che contiene le funzioni SortByColumns e Search, che possono essere entrambe delegate.The gallery's Items property is set to a formula that contains SortByColumns and Search functions, both of which can be delegated.

Nella casella di ricerca, digitare "Apple".In the search box, type "Apple".

Nella parte superiore della schermata vengono visualizzati temporaneamente alcuni punti mentre l'app comunica con SQL Server per elaborare la richiesta di ricerca.Marching dots appear momentarily near the top of the screen as the app communicates with SQL Server to process the search request. Vengono visualizzati tutti i record che soddisfano i criteri di ricerca, anche se l'origine dati contiene milioni di record.All records that meet the search criteria appear, even if the data source contains millions of records.

Controllo Search text-input

I risultati della ricerca includono "Apples", "Crab apples" e "Pineapple", perché la funzione Search cerca ovunque all'interno di una colonna di testo.The search results include "Apples", "Crab apples", and "Pineapple" because the Search function looks everywhere in a text column. Se si vogliono individuare solo i record che contengono il termine di ricerca all'inizio del nome del frutto, è possibile usare un'altra funzione delegabile, Filter, con un termine di ricerca più complesso.If you wanted to find only records that contain the search team at the start of the fruit's name, you can use another delegable function, Filter, with a more complicated search term. Per maggiore semplicità, rimuovere la chiamata a SortByColumns.(For simplicity, remove the SortByColumns call.)

Rimozione della chiamata a SortByColumns

I nuovi risultati includono "Apples" ma non "Crab apples" e "Pineapple".The new results include "Apples" but not "Crab apples" or "Pineapple". Un triangolo giallo, tuttavia, compare accanto alla raccolta (e nell'anteprima della schermata se la barra di spostamento a sinistra visualizza le anteprime) e sotto una parte della formula viene visualizzata una linea ondulata di colore blu.However, a yellow triangle appears next to the gallery (and in the screen thumbnail if the left navigation bar shows thumbnails), and a blue, wavy line appears under a portion of the formula. Ognuno di questi elementi indica un avviso.Each of these elements indicate a warning. Se si posiziona il puntatore del mouse sul triangolo giallo accanto alla raccolta, viene visualizzato questo messaggio:If you hover over the yellow triangle next to the gallery, this message appears:

Hover over delegation warning (Passaggio del mouse su un avviso di delega)

SQL Server è un'origine dati delegabile e Filter è una funzione delegabile. Mid e Len, tuttavia, non possono essere delegate ad alcuna origine dati.SQL Server is a delegable data source, and Filter is a delegable function, However, Mid and Len can't be delegated to any data source.

Ma ha funzionato, no?But it worked, didn't it? In un certo senso.Well, kind of. Ecco perché è visualizzato un avviso e non una linea rossa ondulata.And that is why this is a warning and not a red, wavy squiggle.

  • Se la tabella contiene meno di 500 record, la formula funziona perfettamente.If the table contains fewer than 500 records, the formula worked perfectly. Tutti i record vengono aggiunti al dispositivo e la funzione Filter viene applicata in locale.All records were brought to the device, and Filter was applied locally.
  • Se la tabella contiene più di 500 record, la formula non restituisce i record successivi al numero 500, neanche se soddisfano i criteri.If the table contains more than 500 records, the formula won't return record 501 or higher, even if it matches the criteria.