Microsoft Power Apps ist eine beliebte Low-Code-Plattform, mit der Benutzer schnell und einfach benutzerdefinierte Geschäftsanwendungen erstellen können. Eine der wichtigsten Funktionen von Power Apps ist die Möglichkeit, Daten aus verschiedenen Quellen wie SharePoint-Listen, Excel-Tabellen oder SQL-Datenbanken zu lesen und zu manipulieren. Wenn es jedoch um die Verarbeitung großer Datenmengen geht, stößt Power Apps manchmal auf Einschränkungen. Hier kommt die allseits bekannte Delegation ins Spiel.
Was ist Delegation in Power Apps?
Delegation bezieht sich auf die Fähigkeit von Power Apps, die Verarbeitung von großen Datenmengen an die zugrunde liegende Datenquelle zu delegieren, anstatt alle Daten auf einmal zu laden. In einfachen Worten ausgedrückt bedeutet dies, dass Power Apps nur einen Teil der Daten aus einer großen Datenquelle wie zum Beispiel einer SQL-Datenbank lädt, anstatt alle auf einmal zu laden.
Die Delegation ist wichtig, um die Leistung von Power Apps zu verbessern und die Einschränkung von 2.000 Datensätzen pro Datenquelle zu umgehen. Wenn wir versuchen, eine große Datenmenge zu laden, ohne die Delegation zu verwenden, wird Power Apps nur die ersten 2.000 Elemente anzeigen und den Rest der Daten ignorieren.
Es ist jedoch wichtig zu beachten, dass nicht alle Funktionen in Power Apps delegationsfähig sind. Einige komplexe Funktionen wie z.B. IN können nicht delegiert werden, da sie die gesamte Datenmenge erfordern, um korrekt zu funktionieren. Es ist daher wichtig, die Delegationsfähigkeit für jede Funktion zu überprüfen, bevor wir sie in unserer Power App verwenden. Die Warnung der nicht-Delegierbarkeit wird IMMER angezeigt.
Wenn davon ausgegangen werden kann, dass unter keinen Umständen die gewählte Datenmenge von 2000 Datensätzen überschritten wird, dann kann der Hinweis auch ignoriert werden.
Welche Funktionen unterstützen die Delegation in Power Apps?
Power Apps unterstützt die Delegation für eine Vielzahl von Funktionen, einschließlich Filtern und Suchen
Die Delegation ist standardmäßig für bestimmte Funktionen in Power Apps aktiviert. Um sicherzustellen, dass die Delegation für unsere App funktioniert, müssen wir jedoch sicherstellen, dass wir die Delegationsfähigkeit für unsere Datenquelle aktivieren. Wir können dies tun, indem wir sicherstellen, dass unsere Datenquelle delegationsfähig sind. Einige Datenquellen wie SharePoint-Listen unterstützen die Delegation automatisch, jedoch haben Datenquellen verschiedene delegierbare Funktionen. Hier sind alle Datenquellen mit ihren delegierbaren Funktionen dokumentiert.
Wie aber umgehe ich die Delegation? (Was wenn man nicht-delegierbare Funktionen verwenden will?)
Das Stichwort hier ist: COLLECTIONS. Um in PowerApps komplexere Apps zu bauen ist ein sicherer Umgang mit Collections notwendig. Collections eignen sich dafür, die App leistungsstärker zu machen und um Delegationsprobleme zu lösen.
Eine Collection ist eine User-gebundene temporäre Datentabelle in Power Apps, die wir erstellen und mit Daten füllen können. Im Gegensatz zu einer Datenquelle, die möglicherweise Tausende von Datensätzen enthält, kann man eine Collection erstellen, die nur die Datensätze enthält, die tatsächlich benötigt werden. Dies ermöglicht es uns, komplexe Berechnungen und Verarbeitungen durchzuführen, ohne auf die Delegation angewiesen zu sein.
Beispielsweise, wenn in einer Gallery für jede Zeile mehrere Berechnungen auf einer Datenquelle angewendet werden, kann es hier zu enorm langen Ladezeiten kommen. Sind die Daten, die benötigt werden, in einer Collection gespeichert, verschwindet diese Ladezeit fast komplett. Auch wenn Funktionen wie Filter() und Sum() delegierbar sind, haben sie uns in der Praxis Probleme bereitet, solange wir hier keine Collection als Datenquelle übergeben.
Um eine Collection in Power Apps zu erstellen, nutzt man die Funktionen Collect oder ClearCollect. Collect wird verwendet, um eine neue Collection zu erstellen oder eine vorhandene Collection mit neuen Daten zu aktualisieren. ClearCollect wird verwendet, um eine vorhandene Collection zu löschen und mit neuen Daten zu füllen.
Hier ist ein Beispiel für die Verwendung von ClearCollect, um eine Collection mit Benutzerdaten aus dem Dataverse zu befüllen:
ClearCollect(colTemp;CustomerAuth.IdCustomer)
Dieser Code erstellt eine neue Collection namens „colTemp“ und füllt sie mit der Spalte „IdCustomer“ aller Datensätzen aus dem Dataverse. Diese Collection kann dann verwendet werden, um komplexe Berechnungen oder Verarbeitungen durchzuführen, ohne auf die Delegation angewiesen zu sein. Im folgenden Beispiel wird IN verwendet und mit Collections die Delegation umgangen.
Filter(DimKundes;IdKunde in Filter(CustomerAuth;AuthorizedEmployee = User().Email).IdCustomer)
Hier benutze ich den IN Operator direkt auf die Datenquelle und erhalte ein Delegationsproblem. Wenn ich jedoch eine Collection davor erstelle:
ClearCollect(colTemp;CustomerAuth.IdCustomer)
Und dann die Datenquelle im Sort(Filter(…)) zur Collection ändere, erhalte ich hier kein Delegationsproblem:
Sort(Filter(DimKundes;IdKunde in colTemp.cet_idcustomer);AliasKunde)
Es ist jedoch wichtig zu beachten, dass Collections in Power Apps begrenzte Kapazitäten haben. Versucht man beispielsweise, eine sehr große Datenmenge in eine Collection zu laden, wird man schnell auf Leistungsprobleme stoßen. Es ist daher wichtig, nur die Datensätze zu laden, die tatsächlich benötigt werden und sicherzustellen, dass die Collection nicht zu groß wird.
Insgesamt sind Collections eine nützliche Option, um die Delegation in Power Apps zu umgehen und komplexe Berechnungen oder Verarbeitungen durchzuführen. Indem man sicherstellt, dass die Collection nicht zu groß wird und nur die Datensätze enthält, die tatsächlich benötigt werden, kann man sicherstellen, dass unsere Power App schnell und effektiv arbeitet.