• kim

3 Performance Tipps für Eure Power Apps


In diesem Artikel, wollen wir Euch drei kleine und einfach Tipps & Tricks zeigen, mit denen Ihr die Performance Eurer Apps ein wenig verbessern könnt.


Wir verwenden in dem Beispiel Daten aus drei verschiedene Tabellen, die in SharePoint-Listen gespeichert sind.

  • "Employees" - Sie enthält alle Mitarbeiter, die im Unternehmen beschäftigt sind

  • "Time Tracking Field" - Sie enthält die Zeiterfassungen der Mitarbeiter aus Employees

  • "Paid Time Off" - Sie enthält die Zeiträume in denen Mitarbeiter bezahlt abwesend sind. (z.B. Urlaub)


#Tipp 1: Die Dauer einzelner Formeln / Abfragen überprüfen


Als erstes erfasst Ihr auf der Eigenschaft Eures Steuerelementes, also zum Beispiel dem OnSelect eines Buttons die Startzeit in einer globalen und lokalen Kontextvariable

//Startzeit erfassen
Set(varStartTime;Now());;

Im nächsten Schritt fügt ihr die Abfrage(-n) ein, die ihr messen wollt.

//Alle Mitarbeiter der EasyCompany einsammeln
Collect(colEmployees;Filter(Employees;Company="EasyCompany"));; 

Zum Schluss erfasst Ihr die Dauer eurer Abfolge mit einer globalen oder Kontextvariable. In unserem Fall geben wir die Zeitspanne in Millisekunde aus. Ihr könnt natürlich auch die Übertragung in Sekunden ausgeben. Bestenfalls ist Eure App aber so schnell, dass die Ladezeit unter einer Sekunde liegen :-).

//Dauer erfassen  
Set(varDuration;Round(DateDiff(varStartTime; Now(); Milliseconds);2));; 

Die Dauer der Abfolge könnt ihr Euch zum Schluss in einem Steuerelement oder als Benachrichtigung ausgeben lassen.

//Benachrichtigung geben
Notify("Juhu, wir haben alle Daten erfolgreich geladen. Die Ladezeit betrug "&varDuration&" ms";Success)

Quelle: Matthew Devaney, PATCH Multiple Records In Power Apps 10x Faster, 2020, Link: https://matthewdevaney.com/patch-multiple-records-in-power-apps-10x-faster/




#Tipp 2: First(Filter()) oder LookUp() - Wenn geht, LookUp!


Alle Datensätze filtern mit Filter()

Filter würden wir für unser Beispiel vermutlich verwenden, wenn wir Personen aus der Personalabteilung die Möglichkeit geben wollen die Tabelle "Employees" nach einem bestimmten Kriterium zu filtern.

//Alle Mitarbeiter filtern, die heute Geburtstag haben
Filter(Employees;Geburtsdatum=Today())

Einen Datensatz erhalten mit LookUp()

Die LookUp()-Funktion von Power Apps durchsucht eine Tabelle nach dem ERSTEN Datensatz, der das Kriterium erfüllt. LookUp würden wir vermutlich verwenden, wenn wir dem aktuell angegeben Benutzer Informationen zu sich selbst zur Verfügung stellen wollen.

//Zeige das Geburtstag des angemeldeten Benutzers an
LookUp(Employees;Mitarbeiter=User().FullName;Geburtsdatum)

Warum Ihr statt First(Filter()) LookUp() verwenden solltet

Wir haben diesen "Fehler" bzw. diese umständlichere Herangehensweise früher selbst benutzt und sehen Ihn heute noch oft in anderen Apps. Statt First(Filter()-Funktionen verwendet lieber LookUp, wenn möglich.

Während bei einem First(Filter()), auch wenn nur eine Zeile ausgegeben werden soll, die gesamte Tabelle durchsucht wird, "bricht" die LookUp-Funktion ab, sobald sie einen Wert gefunden hat, der das angegebene Kriterium erfüllt.

Das wiederum wirkt sich positiv auf eure Performance aus.

//Geburtstag des angemeldeten Benutzers an mit First(Filter())
First(Filter(Employees;Mitarbeiter=User().FullName).Geburtsdatum);;

//Geburtstag des angemeldeten Benutzers mit LookUp()
LookUp(Employees;Mitarbeiter=User().FullName;Geburtsdatum)

Quellen:

Microsoft, Filter-, Search- und LookUp-Funktionen in Power Apps, 2017

Link: https://docs.microsoft.com/de-de/powerapps/maker/canvas-apps/functions/function-filter-lookup


Reza Dorrani, Power Apps Life Hacks Tips and Tricks To Make You More Productive 2020 Link: https://www.youtube.com/watch?v=F67_sZYMC2E

April Dunnam, PowerApps: Lookup vs Filter vs Search Functions, 2018 Link: https://www.sharepointsiren.com/2018/07/powerapps-lookup-vs-filter-vs-search-functions/





#Tipp 3: Concurrent als Euer Multitasking-Freund

Wir wollen Euch fiese lange Ladezeiten und unzufriedene Nutzer ersparen, deswegen nutzt von Anfang an, wenn möglich, die Concurrent-Funktion in Euren Power Apps.


Was macht Concurrent?

Concurrent führt die Abfragen oder Formeln, die ihr gleichzeitig ausführen wollt, gleichzeitig aus und nicht in sequenzieller/prozeduraler Abfolge. Das hilft gerade dann, wenn Ihr zum Beispiel zum Start Eurer App viele Daten in die Anwendung laden wollt, dieses aber nicht zwingend in einer bestimmten Reihenfolge stattfinden muss.


Zum Beispiel:

Für unsere Personalabteilung benötigen wir in unserer Power App, Daten aus den SharePoint-Listen "Employees" (alle Mitarbeiter) , "Time Tracking Field" (alle Zeiterfassungen) und "Paid Time Off" (alle Abwesenheitszeiträume). In welcher Reihenfolge die Daten dabei in lokale Collections gelangen ist egal.


OnStart Event unserer App OHNE Concurrent-Funktion:

//Ausführungen der Reihenfolge nach

//Alle Zeiterfassungen des aktuellen Monats
ClearCollect(
 colUserTimeRecords;
 Filter('Time Tracking Field';Monat_Date = Month(Now()))
);;

//Alle Urlaubszeiträume
ClearCollect(
 colUserVacationRecords;
 Filter('Vacation Periods'; Abwesenheitsart = "Urlaub")
);;

//Alle angestellten der EasyCompany
ClearCollect(
 colEmployees;
 Filter(Employees;Title = 'Angestellt bei' = "EasyCompany")
);;

OnStart Event unserer App MITConcurrent-Funktion:

//Ausführungen konkurrent
Concurrent(

//Alle Zeiterfassungen des aktuellen Monats
 ClearCollect(
 colUserTimeRecords;
 Filter('Time Tracking Field';Monat_Date = Month(Now()))
            );

//Alle Urlaubszeiträume
 ClearCollect(
 colUserVacationRecords;
 Filter('Vacation Periods';Abwesenheitsart = "Urlaub")
            );

//Alle angestellten der EasyCompany
 ClearCollect(
 colEmployees;
 Filter(Employees;Title = 'Angestellt bei' = "EasyCompany")
            )
)

Vergleich der Ladezeiten unserer Ausführungen:

Quellen:

Microsoft, Concurrent-Funktion in Power Apps, 2018

Link: https://docs.microsoft.com/de-de/powerapps/maker/canvas-apps/functions/function-concurrent

90 Ansichten0 Kommentare

Aktuelle Beiträge

Alle ansehen