Abfragebeschränkungen: Delegierungs- und Abfragebeschränkungen
Grundlegendes zur Delegierung
Power Apps funktioniert am besten mit einer Back-End-Datenquelle, wenn eine Power Fx-Abfrage vollständig in eine äquivalente Abfrage übersetzt werden kann, die in der Datenquelle ausgeführt werden kann. Power Apps sendet eine Abfrage, die die Datenquelle versteht, die Abfrage wird in der Datenquelle ausgeführt und die Abfrageergebnisse werden an Power Apps zurückgegeben. Beispielsweise könnte Datenquelle die Arbeit des Filterns der Daten auf Datenquelle übernehmen und nur die Zeilen zurückgeben, die die Filterkriterien erfüllen. Wenn dies korrekt funktioniert, sagen wir, dass die Abfrage an die Datenquelle delegiert wird, um die Arbeit der Abfrage zu erledigen.
Allerdings können Power Fx-Abfragen nicht immer in gleichwertige Abfragen für alle Datenquellen übersetzt werden. Zum Beispiel unterstützt Dataverse mehr Abfragefunktionen als Excel. Dataverse unterstützt den Abfrageoperator „in“ (Mitgliedschaft), Excel jedoch nicht. Wir sagen, die Abfrage ist nicht delegierbar, wenn eine Abfrage eine Funktion verwendet, die die Datenquelle nicht unterstützt. Wenn ein Teil eines Abfrageausdrucks nicht delegierbar ist, delegieren wir im Allgemeinen keinen Teil der Abfrage.
Wenn eine Abfrage nicht delegierbar ist, ruft Power Apps nur die ersten 500 Datensätze von Datenquelle ab und führt dann die Aktionen in der Abfrage aus. Dieser Grenzwert kann über Grenzwert ändern auf bis zu 2.000 Datensätze erhöht werden. Power Apps begrenzt die Ergebnisgröße im Interesse der Leistung von Power Apps auf 500 Datensätze. Beim Experimentieren haben wir festgestellt, dass Ergebnismengen, die größer als diese Mengen sind, zu Leistungsproblemen bei Ihrer App und Power Apps im Allgemeinen führen.
Diese Einschränkung kann jedoch ein Problem darstellen, da die Abfrage möglicherweise falsche Ergebnisse zurückgibt, wenn die Daten im Datenquelle 500/2.000 Datensätze überschreiten. Betrachten Sie beispielsweise das Beispiel, in dem Ihr Datenquelle 10 Millionen Datensätze enthält und Ihre Abfrage den letzten Teil der Daten verarbeiten muss. (Zum Beispiel die Familiennamen, die mit „Z“ beginnen.) Ihre Abfrage enthält jedoch einen nicht delegierbaren Operator (z. B. „eindeutig“). In diesem Fall erhalten Sie nur die ersten 500/2.000 Datensätze und haben falsche Ergebnisse.
Erstellen Sie Ihre Power Fx-Abfragen mithilfe der delegierbaren Tabellen für Ihre Datenquelle. Sie sollten nur Abfragefunktionen verwenden, die delegiert werden können. Nur so können Sie die Leistung Ihrer App aufrechterhalten und sicherstellen, dass Benutzende auf alle benötigten Informationen zugreifen können.
Beachten Sie die Warnungen vor Delegierungen, die Orte identifizieren, an denen eine Delegierung nicht möglich ist. Wenn Sie mit kleinen Datasets arbeiten (weniger als 500 Datensätze), können Sie eine beliebige Datenquelle und Formel verwenden, weil die App Daten lokal verarbeiten kann, falls das Delegieren der Formel nicht möglich ist.
Anmerkung
Mithilfe von Delegierungswarnungen können Sie Ihre App so verwalten, dass die Ergebnisse richtig sind. Wenn die Daten in Ihrer Datenquelle 500 Datensätze überschreiten und eine Funktion nicht delegiert werden kann, markiert Power Fx die Formel mit einer blauen Unterstreichung.
Delegierbare Datenquellen
Die Delegierung wird nur für bestimmte tabellarische Datenquellen unterstützt. Wenn eine Datenquelle die Delegierung unterstützt, skizziert deren Connector-Dokumentation diese Unterstützung. Diese tabellarischen Datenquellen sind beispielsweise am beliebtesten und unterstützen die Delegierung:
- Power Apps Delegations-Funktionen une Vorgang für Microsoft Dataverse
- Power Apps Delegations-Funktionen und Vorgang für SharePoint
- Power Apps Delegations-Funktionen und Vorgang für SQL-Server
- Power Apps Delegations-Funktionen und Vorgang für Salesforce
Für importierte Excel-Arbeitsmappen (mit der Datenquelle Der App statische Daten hinzufügen), Sammlungen und Tabellen, die in Kontextvariablen gespeichert sind, ist keine Delegierung erforderlich. All diese Daten befinden sich bereits im Arbeitsspeicher, und die gesamte Power Apps-Sprache kann angewendet werden.
Delegierbare Funktionen
Der nächste Schritt besteht darin, nur diejenigen Formeln zu verwenden, die delegiert werden können. Hier sind die Formelelemente angegeben, die delegiert werden können. Allerdings ist jede Datenquelle anders, und nicht alle unterstützen alle Elemente. Überprüfen Sie Ihre Formel auf Delegierungswarnungen.
Filterfunktionen
Die Funktionen Filter, Search, First und LookUp können delegiert werden.
In den Funktionen Filter und LookUp können Sie für Spalten der Tabelle Folgendes verwenden, um die entsprechenden Datensätze auszuwählen:
- And (einschließlich &&), Or (einschließlich ||), Not (einschießlich !)
- In
Anmerkung
In is only delegated for columns on the base data source. Wenn zum Beispiel die Datenquelle die Konten-Tabelle ist, dann delegiert
Filter(Accounts, Name in ["name1", "name2"])
zur Bewertung an die Datenquelle.Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
delegiert jedoch nicht, da die Spalte Vollständiger Name sich in einer anderen Tabelle (PrimaryContact) als Konten befindet. Der Ausdruck wird lokal ausgewertet. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Konstante Werte, die in allen Datensätzen gleich sind, z.B. Steuerelementeigenschaften sowie globale und Kontextvariablen.
Sie können auch Teile Ihrer Formel verwenden, die zu einem konstanten Wert für alle Datensätze ausgewertet werden. Beispielsweise ist Left( Language(), 2 ), Date( 2019, 3, 31 ) und Today() nicht von Spalten des Datensatzes abhängig und gibt daher für alle Datensätze den gleichen Wert zurück. Diese Werte können als Konstante an die Datenquelle gesendet werden und blockieren die Delegierung nicht.
In der obigen Liste werden die folgenden wichtigen Elemente nicht aufgeführt:
- If
- *, /, Mod
- Spaltenumwandlungsvorgänge Text, Wert
- Concatenate (einschließlich &)
- ExactIn
- Funktionen für die Zeichenfolgenbearbeitung: Lower, Upper, Left, Mid, Len, ...
- Signale: Location, Acceleration, Compass, ...
- Volatile: Rand, ...
- Sammlungen
Abfrageeinschränkungen
Suchebenen
Power Apps unterstützt zwei Suchebenen. Das bedeutet, dass ein Power Fx-Abfrageausdruck höchstens zwei Suchfunktionen enthalten kann. Diese Einschränkung dient dem Erhalt der Leistung. Wenn ein Abfrageausdruck eine Suche enthält, führt Power Apps zunächst eine Abfrage durch, um die Basistabelle abzurufen. Anschließend wird eine zweite Abfrage durchgeführt, die die erste Tabelle mit den Suchinformationen erweitert. Wir unterstützen maximal eine weitere Ebene darüber hinaus. Für die Offline-Nutzung unterstützen wir jedoch nur eine Ebene der Sucherweiterungen.
Ausdrucksauswertung - Eigenschaft der Entität muss auf der linken Seite „links“ eines Gleichheitsoperators sein
Es ist wichtig, die Eigenschaft einer zu vergleichenden Entität in einem Ausdruck auf der linken Seite „links“ einer Gleichung zu platzieren. Zur Veranschaulichung ist im Beispiel unten die Entitätseigenschaft 'Business unit ID'.Name ein Eigenschaftswert und muss auf der linken Seite des auszuwertenden Ausdrucks platziert werden. Der folgende Ausdruck ist erfolgreich:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Dieser Ausdruck jedoch nicht:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
Sortierfunktionen
Sort und SortByColumns können delegiert werden.
Bei Sort kann die Formel nur der Name einer einzelnen Spalte sein und keine anderen Operatoren und Funktionen enthalten.
Aggregatfunktionen
Bestimmte Aggregatfunktionen können basierend auf der Back-End-Unterstützung delegiert werden. Funktionen wie Sum, Average, Min und Max können delegiert werden. Zählfunktionen wie CountRows und Count können ebenfalls delegiert werden. Bei RemoveIf und UpdateIf gelten jedoch Einschränkungen für die Delegierung. Derzeit unterstützt nur eine begrenzte Anzahl von Datenquellen die Delegation dieser Funktionen. Weitere Details finden Sie in der Delegierungsliste.
nicht delegierbare Funktionen
Für alle anderen Funktionen einschließlich der Folgenden wird die Delegierung nicht unterstützt:
Grenzwerte für Fälle, in denen keine Delegierung möglich ist
Formeln, die nicht delegiert werden können, werden lokal verarbeitet. Durch die lokale Verarbeitung kann die gesamte Bandbreite der Power Apps-Formelsprache genutzt werden. Dies hat aber einen Preis: Alle Daten müssen zuerst auf das Gerät übertragen werden, sodass unter Umständen eine größere Datenmenge über das Netzwerk abgerufen werden muss. Dies kann eine Weile dauern, sodass der Eindruck entsteht, dass Ihre App langsam ist oder hängt.
Um dies zu vermeiden, gilt für Power Apps ein Standardgrenzwert von 500 Datensätzen für die Datenmenge, die lokal verarbeitet werden kann. Wir haben diesen Wert gewählt, damit Sie über vollständigen Zugriff auf kleine Datasets verfügen und die Nutzung Ihrer großen Datasets optimieren können, indem Teilergebnisse angezeigt werden.
Bei der Nutzung dieser Option sollten Sie aber mit Bedacht vorgehen, da sie für Benutzer verwirrend sein kann. Angenommen, Sie verwenden die Funktion Filter mit einer Auswahlformel, die nicht delegiert werden kann, für eine Datenquelle mit einer Millionen Datensätzen. Da der Filtervorgang auf lokaler Ebene durchgeführt wird, werden nur die ersten 500 Datensätze überprüft. Wenn der gewünschte Datensatz der 501. oder 500.001. Datensatz ist, wird er nicht berücksichtigt und nicht von der Funktion Filter zurückgegeben.
Aggregatfunktion können auch zu Verwirrung führen. Angenommen, Sie verwenden Average für eine Spalte der Datenquelle mit einer Million Datensätzen. Durchschnitt kann in diesem Fall nicht delegiert werden, da der Ausdruck nicht delegiert wird (siehe die frühere Anmerkung), also werden nur die ersten 500 Datensätze gemittelt. Wenn Sie hierbei nicht mit Bedacht vorgehen, könnte eine Teilantwort von einem Benutzer Ihrer App als vollständige Antwort verstanden werden.
Ändern des Grenzwerts
500 ist die Standardanzahl der Datensätze, aber Sie können diese Anzahl für eine ganze App ändern:
- Wählen Sie Einstellungen.
- Ändern Sie unter Allgemein die Einstellung Datenzeilenlimit von 1 auf 2000.
In einigen Fällen ist Ihnen möglicherweise bekannt, dass für die Anforderungen Ihres Szenarios ein Grenzwert von 2.000 (oder auch 1.000 oder 1.500) erforderlich ist. Diese Zahl können Sie vorsichtig erhöhen und Ihrem Szenario anpassen. Wenn Sie diese Zahl erhöhen, kann das die Leistung Ihrer App negativ beeinflussen, insbesondere bei Tabellen mit vielen Spalten. Die beste Lösung dafür ist, wenn Sie so viel wie möglich delegieren.
Wenn Sie sicherstellen möchten, dass Ihre Apps auf große Datasets skaliert werden kann, müssen Sie für diese Einstellung den Wert auf 1 reduzieren. Für nicht delegierbare Elemente wird dann genau ein Datensatz zurückgegeben, der beim Testen der App leicht auffindbar sein sollte. Dadurch können unerwartete Ergebnisse vermieden werden, wenn eine Proof of Concept-App in eine Produktionsumgebung überführt werden soll.
Delegierungswarnungen
Um einfacher unterscheiden zu können, welche Elemente delegiert werden, zeigt Power Apps Warnungen in Form von gelben Dreiecken an, wenn Sie eine Formel erstellen, die nicht delegiert werden kann.
Delegierungswarnungen werden nur für Formeln angezeigt, die für delegierbare Datenquellen verwendet werden. Wenn keine Warnung angezeigt wird und Sie der Meinung sind, dass Ihre Formel nicht richtig delegiert wird, können Sie den Typ der Datenquelle anhand der obigen Liste weiter oben in diesem Artikel mit den delegierbaren Datenquellen überprüfen.
Beispiele
Für dieses Beispiel generieren Sie automatisch eine App mit drei Anzeigen, die auf einer SQL Server-Tabelle mit dem Namen [dbo].[Fruit] basieren. Informationen zum Generieren der App finden Sie in dem Artikel zu Dataverse. Die darin aufgeführten Prinzipien können auch auf SQL Server angewendet werden.
Die Katalogeigenschaft Items ist auf eine Formel festgelegt, die die Funktionen SortByColumns und Search enthält. Beide Funktionen können delegiert werden.
Geben Sie in das Suchfeld Apple ein.
Dann werden im oberen Bereich des Bildschirms vorübergehend Punkte angezeigt, während die App mit SQL Server kommuniziert, um die Suchanforderung zu verarbeiten. Es werden alle Datensätze angezeigt, die den Suchkriterien entsprechen, auch wenn die Datenquelle Millionen von Datensätzen enthält.
Die Suchergebnisse umfassen die Begriffe „Apples“ und „Pineapple“, weil die Funktion Search eine Textspalte vollständig durchsucht. Wenn Sie nur Datensätze finden wollen, die den Suchbegriff am Anfang des Fruchtnamens enthalten, können Sie eine andere delegierbare Funktion, Filter, mit einem komplizierteren Suchbegriff verwenden. (Entfernen Sie der Einfachheit halber den Aufruf SortByColumns.)
Die neuen Ergebnisse umfassen dann den Begriff „Apples“, aber nicht die Begriffe „Pineapple“. Dann wird allerdings neben dem Katalog (und in der Miniaturansicht des Bildschirms auf der Navigationsleiste im linken Bereich, die Miniaturansichten anzeigt) ein gelbes Dreieck und unter einem Teil der Formel eine blaue Wellenlinie angezeigt. Diese Elemente stellen alle jeweils eine Warnung dar. Wenn Sie auf das gelbe Dreieck neben dem Katalog zeigen, wird die folgende Meldung angezeigt:
SQL Server ist eine delegierbare Datenquelle und Filter eine delegierbare Funktion. Allerdings können Mid und Len nicht an jede beliebige Datenquelle delegiert werden.
Aber es hat funktioniert, oder? Na ja, fast. Das ist der Grund dafür, dass es sich um eine Warnung und nicht um eine rote Wellenlinie handelt.
- Wenn die Tabelle weniger als 500 Datensätze enthält, hat die Formel einwandfrei funktioniert. Alle Datensätze wurden auf das Gerät übertragen, und die Funktion Filter wurde lokal angewendet.
- Wenn die Tabelle mehr als 500 Datensätze enthält, gibt die Formel den 501. Datensatz sowie alle weiteren Datensätze nicht mehr zurück, auch wenn die Kriterien erfüllt sind.
Siehe auch
Einfluss durch die Verwendung nicht delegierbarer Funktionen und unangemessener Datenzeilenbeschränkungen auf die Leistung.
Leistungstipps und bewährte Verfahren zur Verwendung der Delegation