Limity zapytań: limity delegowania i zapytań
Interpretacja delegowania
Power Apps najlepiej pracuje ze źródłem danych zaplecza, gdy zapytanie Power Fx można w pełni przetłumaczyć na analogiczne zapytanie, które można uruchomić na źródle danych. Power Apps wysyła zapytanie zrozumiałe dla źródła danych, zapytanie jest wykonywane po stronie źródła danych, a wyniki są zwracane do Power Apps. Na przykład źródło danych może wykonać pracę filtrowa danych po stronie źródła danych i zwracać tylko wiersze spełniające kryteria filtrowania. Gdy działa to poprawnie, można stwierdzić, że zapytanie jest delegowane do źródła danych w celu wykonywania pracy zapytania.
Jednak nie zawsze zapytania Power Fx można przetłumaczyć na równoważne zapytania dotyczące wszystkich źródeł danych. Na przykład Dataverse obsługuje więcej funkcji zapytań niż program Excel. Dataverse obsługuje operator zapytania „w” (członkostwo), a program Excel nie. Można powiedzieć, że zapytanie nie jest delegowalne, jeśli w zapytaniu jest używana funkcja, której źródło danych nie obsługuje. Generalnie jeśli któraś część wyrażenia zapytania nie jest delegowalna, nie można delegować żadnej części zapytania.
Jeśli zapytanie jest niedelegowalne, Power Apps otrzymuje ze źródła danych tylko pierwsze 500 rekordów, a następnie wykonuje akcje w zapytaniu. Limit ten można zwiększyć do 2000 rekordów Zmiana limituPower Apps ogranicza rozmiar wyniku do 500 rekordów, aby zachować dobrą wydajność Power Apps. W wyniku eksperymentów odkryliśmy, że zestawy wyników większe niż te rozmiary wprowadzają problemy z wydajnością aplikacji i ogólnie Power Apps.
Jednak to ograniczenie może stanowić problem, ponieważ zapytanie może zwrócić nieprawidłowe wyniki, jeśli dane źródła danych przekraczają 500/2000 rekordów. Rozważmy na przykład, gdy źródło danych ma 10 milionów rekordów, a zapytanie musi działać na ostatniej części danych. (Na przykład nazwiska rozpoczynające się od Z). Natomiast zapytanie ma w sobie niedelegowalny operator (np. różne). W tym przypadku będzie dostępne tylko pierwsze 500/2000 rekordów i wyniki będą nieprawidłowe.
Zapytania Power Fx można tworzyć przy użyciu tabel delegowalnych dla źródła danych. Należy używać tylko funkcji zapytań, które można delegować. Jest to jedyny sposób na utrzymanie dobrej wydajności aplikacji oraz zapewnienia, że użytkownicy mogą uzyskiwać dostęp do wszystkich potrzebnych im informacji.
Zwracaj uwagę na ostrzeżenia dotyczące delegowania, wskazujące miejsca, w których delegowanie nie jest możliwe. Jeśli pracujesz z małymi zestawami danych (do 500 rekordów), możesz użyć dowolnego źródła danych i dowolnych formuł, ponieważ aplikacja będzie w stanie przetworzyć dane lokalnie, gdy okaże się, że nie można delegować formuły.
Uwaga
Ostrzeżenia dotyczące delegowania ułatwiają zarządzanie aplikacją tak, aby zapewniała prawidłowe wyniki. Jeśli dane w rekordach źródło danych przekraczają 500 rekordów i nie można delegować funkcji, Power Fx zaznaczy formułę niebieskim podkreśleniem.
Delegowalne źródła danych
Delegowanie jest obsługiwana tylko w przypadku niektórych tabelarycznych źródeł danych. Jeśli źródło danych obsługuje delegowanie, jego dokumentacja łącznika zawiera zarys tej obsługi. Na przykład te Tabelaryczne źródła danych są najpopularniejsze i obsługują delegację:
- Delegowane funkcje i operacje Power Apps dla Microsoft Dataverse
- Delegowane funkcje i operacje Power Apps dla SharePoint
- Delegowane funkcje i operacje Power Apps dla SQL Server
- Delegowane funkcje i operacje Power Apps dla Salesforce
Importowane skoroszyty (przy użyciu źródła danych Dodawanie statycznych danych do aplikacji ), kolekcje i tabele przechowywane w zmiennych kontekstu programu Excel nie wymagają delegowania. Wszystkie te dane są już w pamięci i można zastosować pełny język usługi Power Apps.
Delegowalne funkcje
Następnym krokiem jest używanie tylko tych formuł, które mogą być delegowane. Tutaj są podane elementy formuł, które mogą być delegowane. Jednak każde źródło danych jest inne i nie wszystkie z nich obsługują wszystkie te elementy. Sprawdź ostrzeżenia dotyczące delegowania wyświetlane w przypadku konkretnej formuły.
Funkcje filtrowania
Można delegować funkcje Filter, Search, First i LookUp.
W ramach funkcji Filter i LookUp możesz używać następujących elementów z kolumnami tabeli do wybierania odpowiednich rekordów:
- And (łącznie z &&), Or (łącznie z ||), Not (łącznie z !)
- In
Uwaga
In jest delegowane tylko dla kolumn podstawowych źródło danych. Na przykład jeśli źródło danych to Tabela Konta, a
Filter(Accounts, Name in ["name1", "name2"])
następnie deleguje do źródło danych do oceny. JednakFilter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
nie deleguje, ponieważ kolumna Imię i nazwisko znajduje się w innej tabeli (PrimaryContact) niż Konta. Wyrażenie jest obliczane lokalnie. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Stałe wartości, które są takie same we wszystkich rekordach, takie jak właściwości kontrolki oraz zmienne globalne i zmienne kontekstu.
Można też użyć fragmentów formuł, które dają wartość stałą dla wszystkich rekordów. Na przykład Left( Language(), 2 ), Date( 2019, 3, 31 ) oraz Today() nie zależą od żadnej kolumny rekordu i dlatego zwracają tę samą wartość dla wszystkich rekordów. Te wartości mogą być wysyłane do źródła danych jako stała i nie będą blokować delegowania.
Poprzednia lista nie zawiera następujących istotnych elementów:
- If
- *, /, Mod
- Stosowane operacje kolumny Text, Value
- Concatenate (łącznie z &)
- ExactIn
- Funkcja manipulowania ciągami: Lower, Upper, Left, Mid, Len, ...
- Sygnały: Location, Acceleration, Compass, ...
- Nietrwałe: Rand,...
- Kolekcje
Limity zapytań
Poziomy wyszukiwania
Power Apps obsługuje dwa poziomy wyszukiwania. Oznacza to, że wyrażenie zapytania Power Fx może zawierać co najwyżej dwie funkcje wyszukiwania. To ograniczenie pozwala zachować wydajność. Jeśli wyrażenie zapytania zawiera wyszukiwanie, Power Apps w pierwszej kolejności wykonuje zapytanie w celu uzyskania tabeli podstawowej. Następnie jest konieczne drugie zapytanie, które rozszerza pierwszą tabelę o informacje dotyczące wyszukiwania. Obsługujemy maksymalnie jeszcze jeden poziom ponad ten poziom. W trybie offline obsługujemy jednak tylko jeden poziom rozszerzenia wyszukiwania.
Ocena wyrażenia - właściwość obiektu musi znajdować się po lewej stronie (LHS) operatora równości
Ważne jest, aby umieścić właściwość porównywanego obiektu w wyrażeniu po lewej stronie (LHS) równania. Aby to zilustrować, w poniższym przykładzie właściwość obiektu 'Identyfikator jednostki biznesowej'.Nazwa jest wartością właściwości i musi być umieszczona po lewej stronie wyrażenia, które ma być oceniane. Poniższe wyrażenie będzie spełnione:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Podczas gdy to wyrażenie, nie będzie spełnione:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
Funkcje sortowania
Można delegować funkcje Sort i SortByColumns.
W funkcji Sort formuła może zawierać tylko nazwę jednej kolumny i nie może zawierać innych operatorów ani funkcji.
Funkcje agregujące
Niektóre funkcje agregacji mogą być delegowane na podstawie obsługi zaplecza. Można delegować funkcje Sum, Average, Min i Max. Funkcje zliczania, takie jak CountRows i Count także mogą być delegowane. Jednak RemoveIf oraz UpdateIf mają ograniczenia delegowania. Obecnie tylko ograniczona liczba źródeł danych obsługuje delegowanie dla tych funkcji. Więcej szczegółowych informacji znajduje się w artykule Lista delegowania.
Niedelegowalne funkcje
W przypadku wszystkich innych funkcji delegowanie jest nieobsługiwane. Dotyczy to na przykład następujących istotnych funkcji:
Niedelegowalne limity
Formuły, których nie można delegować, będą przetwarzane lokalnie. Przetwarzanie lokalne pozwala użyć pełnego zakresu języka formuł usługi Power Apps. Ale ma to swoją cenę: wszystkie dane należy najpierw pobrać na urządzenie, co mogłoby się wiązać z pobieraniem dużej ilości danych przez sieć. Może to potrwać, dając wrażenie, że aplikacja działa wolno, a może nawet zawiesiła się.
Aby tego uniknąć, usługa Power Apps nakłada ograniczenie na ilość danych, które mogą być przetwarzane lokalnie: domyślnie jest to 500 rekordów. Wybraliśmy tę liczbę, aby nadal umożliwić Ci pełny dostęp do małych zestawów danych i doprecyzowanie korzystania z dużych zestawów danych, obserwując wyniki częściowe.
Oczywiście należy uważać podczas korzystania z tej możliwości, ponieważ może to być mylące dla użytkowników. Rozważmy na przykład funkcję Filter z formułą wyboru, która nie może być delegowana, zastosowaną do źródła danych zawierającego milion rekordów. Ponieważ filtrowanie odbywa się lokalnie, skanowanych jest tylko pierwszych 500 rekordów. Jeśli żądanym rekordem jest rekord nr 501 lub 500 001, nie zostanie on rozpatrzony ani zwrócony przez funkcję Filter.
Funkcje agregujące również mogą działać w mylący sposób. Załóżmy, że wykonujesz funkcję Average na kolumnie tego samego źródła danych zawierającego milion rekordów. Średnia nie może być delegowana w tym przypadku, ponieważ wyrażenie nie jest delegowane (zobacz wcześniejsza uwaga), więc tylko pierwsze 500 rekordów jest uśredniane. Jeśli nie zachowasz ostrożności, częściowa odpowiedź może zostać niewłaściwie zinterpretowana przez użytkownika aplikacji jako pełna odpowiedź.
Zmienianie limitu
Domyślna liczba rekordów to 500, ale możesz zmienić ten limit w całej aplikacji:
- Wybierz Ustawienia.
- W obszarze Ogólne zmień ustawienie limitu wierszy danych z 1 na 2000.
W niektórych przypadkach wiadomo, że limit 2000 (lub 1000 czy 1500) będzie odpowiedni dla danego scenariusza. Można ostrożnie zwiększyć tę liczbę odpowiednio do scenariusza. Zwiększenie limitu może obniżyć wydajność aplikacji, zwłaszcza w przypadku szerokich tabel z dużą liczbą kolumn. Tak czy inaczej najlepszym rozwiązaniem jest delegowanie w maksymalnym możliwym zakresie.
Aby zagwarantować możliwość skalowania aplikacji dla dużych zestawów danych, należy zmniejszyć to ustawienie do 1. Wszystkie niedelegowalne elementy będą wówczas zwracać tylko jeden rekord, co powinno być łatwe do wykrycia podczas testowania aplikacji. Może to pomóc uniknąć niespodzianek podczas próby produkcyjnego wdrożenia aplikacji utworzonej na potrzeby weryfikacji koncepcji.
Ostrzeżenia dotyczące delegowania
Aby ułatwić określenie, jakie funkcje są, a jakie nie są delegowane, usługa Power Apps wyświetla ostrzeżenie (żółty trójkąt), gdy utworzysz formułę zawierającą elementy, których nie można delegować.
Ostrzeżenia dotyczące delegowania są wyświetlane tylko dla formuł, które działają na delegowalnych źródłach danych. Jeśli nie widzisz ostrzeżenia, ale uważasz, że formuła nie została właściwie delegowana, sprawdź typ źródła danych na liście delegowalnych źródeł danych we wcześniejszej części tego artykułu.
Przykłady
W tym przykładzie wygenerujesz automatycznie aplikację trzyekranową na podstawie tabeli programu SQL Server o nazwie [dbo].[Fruit]. Aby uzyskać informacje na temat generowania aplikacji, można zastosować podobne zasady w artykule o Dataverse do serwera SQL Server.
Właściwość Elementy galerii jest ustawiona na formułę zawierającą funkcje SortByColumns i Wyszukiwanie, które można delegować.
W polu wyszukiwania wpisz „Apple”.
W górnej części ekranu przez chwilę będą wyświetlane poruszające się kropki, oznaczające, że aplikacja komunikuje się z programem SQL Server w celu przetworzenia żądania wyszukiwania. Zostaną wyświetlone wszystkie rekordy spełniające kryteria wyszukiwania, nawet jeśli źródło danych zawiera miliony rekordów.
Wyszukiwanie zwraca rekordy „Apples” i „Pineapple”, ponieważ funkcja Wyszukiwanie wyszukuje wartości w dowolnym miejscu w kolumnie tekstowej. Jeśli chcesz znaleźć tylko rekordy zawierające wyszukiwany ciąg na początku nazwy owocu, możesz użyć innej delegowalnej funkcji, Filtr, z bardziej złożonymi kryteriami wyszukiwania. (Dla uproszczenia usuń wywołanie funkcji SortByColumns).
Nowe wyniki zawierają rekord „Apples”, ale nie „Pineapple”. Jednak obok galerii (i na miniaturze ekranu, jeśli na lewym pasku nawigacyjnym są wyświetlane miniatury) jest wyświetlany żółty trójkąt, a część formuły jest podkreślona niebieską linią falistą. Każdy z tych elementów oznacza ostrzeżenie. Po umieszczeniu wskaźnika myszy na żółtym trójkącie obok galerii zobaczysz następujący komunikat:
Program SQL Server to delegowalne źródło danych, a Filter to delegowalna funkcja. Jednak funkcji Mid i Len nie można delegować do żadnego źródła danych.
Ale to działa, nieprawdaż? Cóż, tak jakby. Dlatego jest wyświetlane ostrzeżenie, a nie czerwona falista linia.
- Jeśli tabela zawiera mniej niż 500 rekordów, to ta formuła działa doskonale. Wszystkie rekordy zostały pobrane na urządzenie i funkcja Filter została zastosowana lokalnie.
- Jeśli jednak tabela zawiera ponad 500 rekordów, formuła nie zwróci rekordu nr 501 ani kolejnych, niezależnie od tego, czy spełniają one kryteria.
Zobacz także
Wpływ używania niedelegowalnych funkcji i nieodpowiednich limitów wierszy danych na wydajność
Porady i najlepsze praktyki dotyczące używania delegowania