Condividi tramite


Limiti delle query: limiti di delega e query

Comprendere il concetto di delega

Power Apps funziona meglio con un'origine dati back-end quando una query Power Fx si traduce completamente in una query equivalente che viene eseguita sull'origine dati. Power Apps invia una query che l'origine dati riconosce, l'origine dati esegue la query e Power Apps ottiene i risultati. Ad esempio, l'origine dati filtra i dati e restituisce solo le righe che soddisfano i criteri di filtro. Quando funziona, la query viene delegata all'origine dati.

Tuttavia, le query Power Fx non possono sempre essere tradotte in query equivalenti su ogni origine dati. Per esempio, Dataverse supporta più funzionalità di query rispetto a Excel. Dataverse supporta l'operatore di query "in" (appartenenza), ma Excel no. Una query è indelegabile se usa una funzionalità non supportata dall'origine dati. Se una qualsiasi parte di un'espressione di query è indelegabile, Power Apps non delega alcuna parte della query.

Quando una query non è delegabile, Power Apps recupera i primi 500 record dall'origine dati, quindi esegue le azioni nella query. È possibile aumentare questo limite a 2.000 record. Modificare il limitePower Apps limita le dimensioni dei risultati a 500 record per mantenere buone prestazioni dell'app. Set di risultati più grandi possono causare problemi di prestazioni per l'app e Power Apps.

Tuttavia, questa limitazione può essere un problema perché la query potrebbe restituire risultati non corretti se l'origine dati contiene più di 500 o 2.000 record. Ad esempio, se l'origine dati contiene 10 milioni di record e la query deve lavorare sull'ultima parte dei dati, come i cognomi che iniziano con "Z", e la query usa un operatore non delegabile come distinct, si ottengono solo i primi 500 o 2.000 record. Ciò significa che si ottengono risultati errati.

Crea le tue query Power Fx utilizzando le tabelle delegabili per la tua origine dati. Utilizzare solo le funzioni di query che possono essere delegate. È l'unico modo per garantire le prestazioni dell'app e per far sì che gli utenti ottengano le informazioni di cui hanno bisogno.

Presta attenzione agli avvisi relativi alle deleghe che segnalano aree in cui la delega non è possibile. Se utilizzi 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.

Nota

Gli avvisi di delega consentono di gestire l'app in modo che restituisca risultati corretti. Se i dati nell'origine dati superano i 500 record e una funzione non può essere delegata, Power Fx contrassegna la formula con una sottolineatura blu.

Origini dati delegabili

La delega funziona solo per certe origini dati tabulari. Se un'origine dati supporta la delega, la documentazione sul connettore descrive quel supporto. Ad esempio, queste popolari origini dati tabulari supportano la delega:

Le cartelle di lavoro di Excel importate (usando l'origine di dati Aggiungi dati statici all'app), le raccolte e le tabelle archiviate in variabili di contesto non richiedono la delega. Tutti questi dati sono già in memoria, quindi puoi utilizzare il linguaggio di Power Apps completo.

Funzioni delegabili

Utilizzare solo formule che possono essere delegate. Questo articolo elenca gli elementi della formula che possono essere delegati. Ogni origine dati è diversa e non tutte supportano tutti questi elementi. Controllare gli avvisi di delega in ogni formula.

Funzioni di filtro

Filter, Search, First e LookUp possono essere delegate.

All'interno delle funzioni Filter e LookUp, è possibile selezionare i record appropriati usando gli elementi seguenti con le colonne della tabella:

  • And (incluso &&), Or (incluso ||), Not (incluso !)
  • In> [!NOTA]

    In è delegato solo per le colonne sulla base origine dati. Ad esempio, se l'origine dati è la tabella Account, Filter(Accounts, Name in ["name1", "name2"]) delega all'origine dati per la valutazione. Tuttavia, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) non è delegata perché la colonna Nome completo si trova su una tabella diversa (PrimaryContact) rispetto ad Account. L'espressione viene valutata localmente.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valori costanti che rimangono immutati in tutti i record, ad esempio proprietà dei controlli e variabili globali e di contesto.

È anche possibile usare parti della formula che restituiscono un valore costante per tutti i record. Ad esempio, Left( Language(), 2 ), Date( 2019, 3, 31 ) e Today() non dipendono da tutte le colonne del record, quindi restituiscono lo stesso valore per tutti i record. Questi valori vengono inviati all'origine dati come costante e non bloccano la delega.

L'elenco precedente non include questi elementi importanti.

Delega e raccolte

Quando usi With, UpdateContext o Set, questi creano internamente raccolte. Le raccolte sono un elenco statico in memoria di record e non partecipano alla delega. Non viene visualizzato un avviso di delega.

Limiti delle query

Cercare ed espandere i livelli

Power Apps consente di utilizzare fino a due livelli di ricerca. Un'espressione di query Power Fx può includere un massimo di due funzioni di ricerca per mantenere le prestazioni. Quando un'espressione di query include una ricerca, Power Apps esegue una prima query sulla tabella di base, quindi esegue una seconda query per espandere la prima tabella con le informazioni sulla ricerca. Un livello aggiuntivo oltre questo è supportato come massimo. Tuttavia, per gli scenari offline, è supportato un solo livello di espansione della ricerca.

Espandi o unisci fino a 20 entità in una singola query. Se devi unire più di 20 tabelle in un'unica query, prova a creare una vista sul server dati, se possibile.

Valutazione dell'espressione: la proprietà dell'entità deve trovarsi sul lato sinistro "LHS" dell'operatore di uguaglianza

Metti la proprietà di un'entità da confrontare sul lato sinistro (LHS) di un'equazione. Ad esempio, nell'espressione seguente, la proprietà dell'entità "Business unit ID".Name è sul LHS e l'espressione funziona:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Ma questa espressione non funziona:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

Funzioni di ordinamento

Sort e SortByColumns si possono delegare.

In Sort, la formula può solo essere il nome di una singola colonna e non include altri operatori o funzioni.

Funzioni di aggregazione

Alcune funzioni di aggregazione possono essere delegate in base al supporto back-end. Funzioni come Sum, Average, Min e Max possono essere delegate. Anche le funzioni di conteggio come CountRows e Count possono essere delegate. Tuttavia RemoveIf e UpdateIf hanno restrizioni di delega. Solo un numero limitato di origini dati supporta la delega per queste funzioni. Per ulteriori informazioni, vedi Elenco deleghe.

Funzioni non delegabili

Tutte le altre funzioni non possono essere delegate, incluse queste funzioni importanti:

Limiti non delegabili

Le formule che non possono essere delegate vengono elaborate in locale. L'elaborazione locale ti consente di usare il linguaggio delle formule Power Apps completo. Ma a un prezzo: tutti i dati devono prima essere trasferiti al dispositivo e questo può richiedere il recupero di una grande quantità di dati sulla rete. Questo processo può richiedere tempo e far sembrare l'app lenta o poco reattiva.

Per evitare questo problema, Power Apps limita la quantità di dati che possono essere elaborati localmente fino a 500 record per impostazione predefinita. Questo limite ti consente di utilizzare completamente set di dati di piccole dimensioni e di perfezionare l'uso di set di dati di grandi dimensioni visualizzando risultati parziali.

Fai attenzione quando usi questa funzione perché può confondere gli utenti. Ad esempio, se utilizzi la funzione Filter con una formula di selezione che non può essere delegata per un'origine dati contenente un milione di record, solo i primi 500 record vengono scansionati. Se il record desiderato è il numero 501 o 500.001, Filter non lo considera e non lo restituisce.

Anche le funzioni di aggregazione possono creare confusione. Ad esempio, se usi Average su una colonna nella stessa origine dati da un milione di record, Average non può essere delegato perché l'espressione non è delegata (vedi la nota precedente). Viene calcolata la media solo dei primi 500 record. Se non stai attento, un utente potrebbe pensare che una risposta parziale sia completa.

Modifica del limite

Il numero predefinito di record è 500, ma è possibile modificare questo numero per un'intera app:

  1. Seleziona Impostazioni.
  2. In Generale, cambia l'impostazione Limite per le righe di dati da 1 a 2000.

In alcuni casi, 2.000 (o 1.000 o 1.500) record sono sufficienti per lo scenario. Puoi incrementare questo numero a tuo piacimento, ma man mano le prestazioni dell'app possono peggiorare, in particolare per tabelle di grandi dimensioni con molte colonne. È comunque meglio delegare il più possibile.

Per assicurarti che sia possibile ridimensionare l'app per adattarla a set di dati di grandi dimensioni, imposta questo valore su 1. Eventuali elementi che non possono essere delegati restituiscono un singolo record, che è facile da individuare durante il test dell'app. Ciò può contribuire a evitare eventi imprevisti quando si passa in produzione un'app modello di verifica.

Avvisi di delega

Power Apps mostra un avviso (triangolo giallo) quando crei una formula che non può essere delegata. In questo modo è più facile sapere cosa è delegato e cosa non lo è.

Gli avvisi di delega vengono mostrati solo per le formule che usano origini dati delegabili. Se non vedi un avviso ma ritieni che la formula non sia correttamente delegata, verifica che il tipo di origine dati sia presente nell'elenco delle origini dati delegabili riportato in precedenza in questo articolo.

Esempi

In questo esempio, verrà generata automaticamente un'app di tre schermate basata su una tabella SQL Server denominata [dbo].[Fruit]. Per capire come generare l'app, applica principi analoghi a quelli dell'articolo relativo a Dataverse in SQL Server.

App con tre schermate.

La proprietà Items della raccolta utilizza una formula che contiene le funzioni SortByColumns e Search, che possono essere entrambe delegate.

Nella casella di ricerca, immetti "Apple".

Nella parte superiore della schermata vengono visualizzati per breve tempo dei punti mentre l'app comunica con SQL Server per elaborare la richiesta di ricerca. Vengono visualizzati tutti i record che soddisfano i criteri di ricerca, anche se l'origine dati ha milioni di record.

Controllo Search text-input.

I risultati della ricerca includono "Mele" e "Ananas" perché la funzione Ricerca cerca ovunque all'interno di una colonna di testo. Per individuare solo i record che contengono il termine di ricerca all'inizio del nome del frutto, utilizza un'altra funzione delegabile, Filter, con un termine di ricerca più specifico. Per maggiore semplicità, rimuovi la chiamata SortByColumns.

Rimozione della chiamata a SortByColumns.

I nuovi risultati includono "Mele" ma non "Ananas". Un triangolo giallo viene visualizzato accanto alla raccolta e nella miniatura dello schermo se la barra di spostamento a sinistra mostra le miniature. Una linea ondulata blu appare sotto una parte della formula. Ognuno di questi elementi indica un avviso. Quando posizioni il puntatore del mouse sul triangolo giallo accanto alla raccolta, viene visualizzato questo messaggio:

Passaggio del mouse su un avviso di delega.

SQL Server è un'origine dati delegabile e Filter è una funzione delegabile. Tuttavia, Mid e Len non possono essere delegate ad alcuna origine dati.

Ma funziona, no? In un certo senso. Ecco perché viene mostrato un avviso e non una linea rossa ondulata.

  • Se la tabella ha meno di 500 record, la formula funziona perfettamente. Tutti i record vengono aggiunti al dispositivo e la funzione Filter viene applicata in locale.
  • Se la tabella ha più di 500 record, la formula non restituisce i record successivi al numero 501, neanche se soddisfano i criteri.

Vedi anche