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. Ten limit można zwiększyć do 2000 Power Apps rekordów. Zmiana limitu ogranicza rozmiar wyniku do 500 rekordów, aby zachować dobrą wydajność aplikacji Power Apps. W wyniku przeprowadzonych eksperymentów stwierdzono, że ustawienie większe niż to prowadzi do problemów związanych z wydajnością aplikacji i ogólnie z 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ę:

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. Jednak Filter(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:

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 agregowane można delegować w zależności od wsparcia na zapleczu. Można delegować funkcje Sum, Average, Min i Max. Funkcje zliczania, takie jak CountRows i Count także mogą być delegowane. Obecnie tylko ograniczona liczba źródeł danych obsługuje te funkcje delegowania. Więcej informacji można znaleźć na stronie Lista delegacji.

RemoveIf i UpdateIf obsługa delegacji jest w wersji eksperymentalnej i domyślnie wyłączona.

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:

  1. Wybierz Ustawienia.
  2. 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.

Aplikacja na trzy ekrany.

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.

Kontrolka wprowadzania tekstu wyszukiwania.

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

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:

Umieszczenie kursora na ostrzeżeniu dotyczącym delegowania.

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

Uwaga

Czy możesz poinformować nas o preferencjach dotyczących języka dokumentacji? Wypełnij krótką ankietę. (zauważ, że ta ankieta jest po angielsku)

Ankieta zajmie około siedmiu minut. Nie są zbierane żadne dane osobowe (oświadczenie o ochronie prywatności).