Grundlagen der Delegierung in einer Canvas-App

Power Apps enthält zahlreiche leistungsstarke Funktionen zum Filtern, Sortieren und Strukturieren von Tabellen mit Daten in einer Canvas-App, z.B. Filter, Sort und AddColumns. Mit diesen Funktionen können Sie für Ihre Benutzer den genauen Zugriff auf die benötigten Informationen bereitstellen. Für Leser mit Datenbankkenntnissen: Die Verwendung dieser Funktionen entspricht dem Schreiben einer Datenbankabfrage.

Der Schlüssel zur Erstellung von effizienten Apps besteht darin, die Datenmenge gering zu halten, die auf Ihr Gerät übertragen werden muss. Unter Umständen benötigen Sie aus Millionen von Datensätzen nur eine Handvoll von Datensätzen, oder ein einzelner Aggregatwert kann für Tausende von Datensätzen stehen. Vielleicht ist es auch möglich, nur den ersten Satz mit Datensätzen abzurufen, und den Rest erst dann bereitzustellen, wenn er vom Benutzer angefordert wird. Wenn zielgerichtet vorgegangen wird, können die Verarbeitungsleistung, der Arbeitsspeicher und die Netzwerkbandbreite, die für die App erforderlich sind, deutlich gesenkt werden. Dies führt zu kürzeren Reaktionszeiten für Ihre Benutzer – sogar auf Smartphones, die über ein Mobilfunknetz verbunden sind.

Mit der Delegierung wird erreicht, dass die Ausdrucksstärke von Power Apps-Formeln genutzt werden kann und gleichzeitig möglichst wenig Daten über das Netzwerk übertragen werden müssen. Dies bedeutet, dass Power Apps die Verarbeitung von Daten an die Datenquelle delegieren, anstatt die Daten zur lokalen Verarbeitung in die App zu verschieben.

Die Schwierigkeit hierbei ist, dass nicht alle Vorgänge, die in einer Power Apps-Formel ausgedrückt werden können, an jede Datenquelle delegiert werden können. Dies ist der Grund für diesen Artikel. Die Power Apps-Sprache ahmt die Formelsprache von Excel nach und bietet vollständigen und sofortigen Zugriff auf eine vollständige Arbeitsmappe im Speicher mit einer Vielzahl von Funktionen zur Manipulation von Zahlen und Text. Infolgedessen ist die Power Apps-Sprache weitaus umfangreicher als die meisten Datenquellen unterstützen können, einschließlich leistungsstarker Datenbankmodule wie SQL Server.

Zum Verwenden von großen Datasets ist die Nutzung von Datenquellen und Formeln erforderlich, für die eine Delegierung möglich ist. Nur so können Sie die Leistung Ihrer App aufrechterhalten und sicherstellen, dass Benutzer 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.

Hinweis

Delegierungswarnungen wurden zwar in der Vergangenheit in Power Apps als Vorschläge mit einem blauen Punkt markiert, aber Delegierungsempfehlungen werden mittlerweile als Warnungen neu klassifiziert. Wenn die Daten in Ihrer Datenquelle mehr als 500 Datensätze umfassen und eine Funktion nicht delegiert werden kann, kann Power Apps möglicherweise nicht alle Daten abrufen, und Ihre App erhält ggf. falsche Ergebnisse. Mithilfe von Delegierungswarnungen können Sie Ihre App so verwalten, dass die Ergebnisse richtig sind.

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:

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.

Diese Listen werden sich im Laufe der Zeit ändern. Wir arbeiten daran, die Delegierung für weitere Funktionen und Operatoren zu unterstützen.

Filterfunktionen

Die Funktionen Filter, Search 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 (einschließlich !)
  • In

    Hinweis

    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:

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

Sum, Average, Min und Max können delegiert werden. Diese Delegierung wird derzeit nur von einer begrenzten Anzahl von Datenquellen unterstützt. Weitere Informationen finden Sie in der Delegierungsliste.

Hinweis

Wenn ein Ausdruck nicht delegiert wird, verarbeitet er nur die ersten 500 Datensätze (konfigurierbar bis zu 2000, siehe Limit ändern), die von der Datenquelle abgerufen werden, anstatt die Verarbeitung aller Daten an die Datenquelle zu delegieren.

Zählfunktionen wie CountRows, CountA und Count können nicht delegiert werden.

Andere Aggregatfunktionen wie StdevP und VarP können nicht delegiert werden.

Tabellenformungsfunktionen

AddColumns, DropColumns, RenameColumns und ShowColumns unterstützen die Delegierung teilweise. Formeln in ihren Argumenten können delegiert werden. Die Ausgabe dieser Funktionen unterliegt jedoch dem Datensatzlimit für Nichtdelegierung.

Wie in diesem Beispiel werden AddColumns und LookUp von Herstellern häufig verwendet, um Informationen aus einer Tabelle mit Informationen aus anderen Tabellen zusammenzuführen. Dieser Vorgang für Datenbanken wird auch als „Join“ bezeichnet:

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

Obwohl Products und Suppliers möglicherweise delegierbare Datenquellen sind und LookUp eine delegierbare Funktion ist, kann die Ausgabe der Funktion AddColumns nicht delegiert werden. Das Ergebnis der Formel ist auf den ersten Teil der Datenquelle Products begrenzt. Da die Funktion LookUp und ihre Datenquelle delegierbar sind, kann in Letzterer überall eine Übereinstimmung für Suppliers ermittelt werden. Das gilt auch für große Datenquellen.

Wenn Sie AddColumns auf diese Weise verwenden, muss LookUp für jeden dieser ersten Datensätze in Products die Datenquelle separat aufrufen, was viel Datenverkehr verursacht. Wenn Suppliers klein genug ist und sich nicht oft ändert, könnte die Funktion Collect in OnStart aufgerufen werden, um die Datenquelle in Ihrer App zwischenzuspeichern, wenn sie startet. Alternativ können Sie Ihre App so umstrukturieren, dass Sie die zugehörigen Datensätze nur dann abrufen, wenn der Benutzer danach fragt.

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. Auf diese Weise 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:

  1. Wählen Sie Einstellungen.
  2. Ä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 Formal nicht richtig delegiert wird, können Sie den Typ der Datenquelle anhand der obigen Liste 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.

App mit drei Bildschirmen

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.

Suchtext-Eingabesteuerelement

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

SortByColumns-Aufruf entfernen

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:

Auf Delegierungswarnung zeigen

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

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).