Informacje o delegowaniuUnderstand delegation

Usługa PowerApps obejmuje bogaty zestaw funkcji filtrowania, sortowania i kształtowania tabel danych: są to na przykład funkcje Filter, Sort i AddColumns.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data: Filter, Sort, and AddColumns functions to name just a few. Za pomocą tych funkcji możesz zapewnić swoim użytkownikom ukierunkowany dostęp do informacji, które są im potrzebne.With these functions, you can provide your users with focused access to the information they need. Dla osób znających bazy danych używanie tych funkcji jest odpowiednikiem pisania zapytania do bazy danych.For those with a database background, using these functions is the equivalent of writing a database query.

Kluczem do tworzenia wydajnych aplikacji jest minimalizacja ilości danych, które muszą zostać pobrane do Twojego urządzenia.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Być może potrzeba tylko kilku rekordów z morza milionów lub pojedyncza zagregowana wartość może reprezentować tysiące rekordów.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. Lub możliwe, że można pobrać tylko pierwszy zestaw rekordów, a pozostałe zostaną pobrane po wskazaniu przez użytkownika gestem, że chce więcej.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Utrzymanie koncentracji może znacznie zmniejszyć moc obliczeniową, ilość pamięci i przepustowość sieci wymagane przez aplikację, co powoduje skrócenie czasów odpowiedzi dla użytkowników nawet w przypadku telefonów połączonych za pośrednictwem sieci komórkowej.Being focused can dramatically reduce the processing power, memory, and network bandwidth needed by your app, resulting in snappier response times for your users, even on phones connected via a cellular network.

Delegowanie ma miejsce wtedy, gdy wyrazistość formuł usługi PowerApps spełnia wymagania minimalizacji ilości danych przenoszonych przez sieć.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Krótko mówiąc, oznacza to, że usługa PowerApps oddeleguje przetwarzanie danych do źródła danych zamiast przenoszenia danych do aplikacji, aby przetworzyć je lokalnie.In short, it means that PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

Bardziej złożone przypadki opisano w tym artykule, ponieważ nie wszystkie czynności, które mogą być wyrażone w formule usługi PowerApps, można delegować do każdego źródła danych.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. Język usługi PowerApps naśladuje formuły języka programu Excel zaprojektowanego do pełnego i błyskawicznego dostępu do całego skoroszytu w pamięci z użyciem całego szeregu funkcji numerycznych i służących do manipulowania tekstem.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. Dzięki temu język usługi PowerApps jest znacznie bogatszy niż ten, który może obsłużyć większość źródeł danych, a w tym zaawansowane aparaty baz danych, takie jak SQL Server.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

Praca z dużymi zbiorami danych wymaga używania źródeł danych i formuł, które można delegować.Working with large data sets requires using data sources and formulas that can be delegated. Jest to jedyny sposób na utrzymanie dobrej wydajności Twojej aplikacji oraz zapewnienia, że użytkownicy mogą uzyskiwać dostęp do wszystkich potrzebnych im informacji.It is the only way to keep your app performing well and ensure users can access all the information they need. Zwróć uwagę na sugestie oznaczone niebieską kropką, które wskazują miejsca, gdzie delegowanie nie jest możliwe.Take heed of blue-dot suggestions that flag places where delegation is not possible. Jeśli pracujesz z małymi zestawami danych (do 500 rekordów), możesz użyć dowolnego źródła danych i formuł, ponieważ przetwarzanie może odbywać się lokalnie, jeśli formuły nie można delegować.If you're working with small data sets (less than 500 records), you can use any data source and formula as processing can be done locally if the formula cannot be delegated.

Delegowalne źródła danychDelegable data sources

Zobacz listę delegowania zawierającą pełną listę źródeł danych, które obsługują delegowanie wraz z zakresem tej obsługi.See the delegation list for the full list of which data sources support delegation and to what extent.

Możemy w dalszym ciągu dodawać obsługę delegowania do istniejących źródeł danych oraz dodawać więcej źródeł danych.We are continuing to add delegation support to existing data sources, as well as add more data sources.

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.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Wszystkie te dane są już w pamięci i można zastosować pełny język usługi PowerApps.All of this data is already in memory, and the full PowerApps language can be applied.

Delegowalne funkcjeDelegable functions

Następnym krokiem jest używanie tylko tych formuł, które mogą być delegowane.The next step is to use only those formulas that can be delegated. Tutaj są podane elementy formuł, które mogą być delegowane.Included here are the formula elements that could be delegated. Jednak każde źródło danych jest inne i nie wszystkie z nich obsługują wszystkie te elementy.However, every data source is different, and not all of them support all of these elements. Sprawdź sugestie oznaczone niebieską kropką w konkretnej formule.Check for blue-dot suggestions in your particular formula.

Te listy zmienią się z czasem.These lists will change over time. Pracujemy nad zwiększeniem liczby funkcji i operatorów obsługujących delegowanie.We're working to support more functions and operators with delegation.

Funkcje filtrowaniaFilter functions

Można delegować funkcje Filter, Search i LookUp.Filter, Search, and LookUp can be delegated.

W ramach funkcji Filter i LookUp poniższe elementy mogą być używane z kolumnami tabeli do wybierania odpowiednich rekordów:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Można też użyć fragmentów formuł, które dają wartość stałą dla wszystkich rekordów.Portions of your formula that evaluate to a constant value for all records can also be used. Na przykład Left( Language(), 2 ) nie zależy od żadnej kolumny rekordu i dlatego zwraca tę samą wartość dla wszystkich rekordów.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Efektywnie jest to stała.It is effectively a constant. Użycie zmiennych kontekstu, kolekcji i sygnałów może nie być stałe i w związku z tym uniemożliwi delegowanie funkcji Filter i LookUp.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Niektóre warte odnotowania elementy, których brakuje na powyższej liście:Some notable items missing from the above list:

Funkcje sortowaniaSorting functions

Można delegować funkcje Sort i SortByColumns.Sort and SortByColumns can be delegated.

W funkcji Sort formuła może zawierać tylko nazwę jednej kolumny i nie może zawierać innych operatorów ani funkcji.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Funkcje agregująceAggregate functions

Można delegować funkcje Sum, Average, Min i Max.Sum, Average, Min, and Max can be delegated. Obecnie tylko ograniczona liczba źródeł danych obsługuje to delegowanie. Sprawdź listę delegowania, aby uzyskać więcej szczegółów.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Funkcje zliczania, takie jak CountRows, CountA i Count, nie mogą być delegowane.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Inne funkcje agregujące, takie jak StdevP i VarP, nie mogą być delegowane.Other aggregate functions such as StdevP and VarP cannot be delegated.

Inne funkcjeOther functions

Wszystkie inne funkcje nie obsługują delegowania, włączając te warte zauważenia funkcje:All other functions do not support delegation, including these notable functions:

Typowym wzorcem jest użycie funkcji AddColumns i LookUp do scalenia informacji z jednej tabeli w innej, co jest powszechnie nazywane sprzężeniem w języku baz danych.A common pattern is to use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance. Na przykład:For example:

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

Chociaż źródła danych Products i Suppliers mogą być delegowalnymi źródłami danych i funkcja LookUp jest funkcją delegowalną, funkcja AddColumns nie jest delegowalna.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Wynik całej formuły będzie ograniczony do pierwszej części źródła danych Products.The result of the entire formula will be limited to the first portion of the Products data source.

Ponieważ funkcja LookUp i jej źródło danych są delegowalne, dopasowanie dla źródła danych Suppliers można znaleźć w dowolnym miejscu w źródle danych, nawet jeśli jest duże.Since the LookUp and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it is large. Potencjalną wadą jest to, że funkcja LookUp utworzy oddzielne wywołania do źródła danych dla każdego z tych pierwszych rekordów w źródle danych Products, powodując duży ruch w sieci.A potential downside is that LookUp will made separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. Jeśli źródło danych Suppliers jest wystarczająco małe i nie zmienia się często, możesz buforować źródło danych w swojej aplikacji za pomocą wywołania funkcji Collect po uruchomieniu aplikacji (przy użyciu właściwości OnVisible na ekranie otwierania) i wykonać na niej funkcję LookUp zamiast tego.If Suppliers is small enough and does not change often, you could cache the data source in your app with a Collect call when the app starts (using OnVisible on the opening screen) and do the LookUp to it instead.

Niedelegowalne ograniczeniaNon-delegable limits

Formuły, których nie można delegować, będą przetwarzane lokalnie.Formulas that cannot be delegated will be processed locally. Pozwala to użyć pełnego zakresu formuł języka usługi PowerApps.This allows for the full breadth of the PowerApps formula language to be used. 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ć.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. Może to potrwać, dając wrażenie, że aplikacja działa wolno lub prawdopodobnie zawiesiła się.That can take time, giving the impression that your app is slow or possibly hung.

Aby tego uniknąć, usługa PowerApps nakłada ograniczenie na ilość danych, które mogą być przetwarzane lokalnie: 500 rekordów.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. 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.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Oczywiście należy uważać podczas korzystania z tej możliwości, ponieważ może to być mylące dla użytkowników.Obviously care must be taken when using this facility as it can be confusing for users. Rozważmy na przykład funkcję Filter z formułą wyboru, która nie może być delegowana, ze źródła danych zawierającego milion rekordów.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Ponieważ filtrowanie będzie odbywać się lokalnie, ma zostać przeprowadzone skanowanie tylko pierwszych 500 rekordów spośród tych milionów rekordów.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Jeśli żądanym rekordem jest rekord 501 lub 500 001, nie zostanie on rozpatrzony ani zwrócony przez funkcję Filter.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Innym miejscem, gdzie może to być mylące, są funkcje agregujące.Another place where this can be confusing is aggregate functions. Wykonaj funkcję Average na kolumnie tego samego źródła danych mającego miliony rekordów.Take Average over a column of that same million record data source. Ponieważ funkcji Average nie można jeszcze delegować, średnia zostanie obliczona tylko dla pierwszych 500 rekordów.Since Average cannot yet be delegated, only the first 500 records will be averaged. Należy zachować ostrożność. W przeciwnym razie częściowa odpowiedź może przez użytkownika aplikacji zostać niewłaściwie zinterpretowana jako pełna odpowiedź.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Sugestie oznaczone niebieską kropkąBlue dot suggestions

Aby ułatwić rozpoznanie, co jest i co nie jest delegowane, środowisko tworzenia zawiera oznaczone niebieską kropką sugestie, gdy formuła zawiera element, który nie może być delegowany.To make it easier to know what is and is not being delegated, the authoring experience provides blue dot suggestions when a formula contains something that cannot be delegated.

Niebieskie kropki są wyświetlane tylko dla formuł, które działają na delegowalnych źródłach danych.Blue dots are only shown on formulas that operate on delegable data sources. Jeśli nie widzisz niebieskiej kropki i uważasz, że Twoja formuła nie została właściwie delegowana, sprawdź typ źródła danych na liście delegowalnych źródeł danych powyżej.If you don't see a blue dot and you believe your formula is not being properly delegated, check the type of data source against the list of delegable data sources above.

PrzykładyExamples

W tym przykładzie użyjemy tabeli programu SQL Server zawierającej nazwy produktów, a konkretnie owoców, [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. Na ekranie Nowe usługa PowerApps może utworzyć podstawową aplikację na trzy ekrany podłączoną do tego źródła danych:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Należy zanotować formułę właściwości Items galerii.Note the formula for the Gallery's Items property. Używa ona funkcji SortByColumns i Search, które obie mogą być delegowane.It is using SortByColumns and Search functions, both of which can be delegated.

Teraz wpisz "Apple" do kontrolki wprowadzania tekstu wyszukiwania.Let's type "Apple" into the search text-input control. Jeśli jesteśmy bardzo spostrzegawczy, przez chwilę zobaczymy maszerujące kropki w górnej części ekranu podczas przetwarzania nowego wpisu w nowym wyszukiwaniu.If we are very observant, we will momentarily see marching dots on the top of the screen while the new entry in the new search is processed. Maszerujące kropki oznaczają, że komunikujemy się z programem SQL Server:The marching dots indicate that we are communicating with the SQL Server:

Ponieważ to wszystko jest delegowalne nawet wtedy, gdy tabela [dbo].[Products] zawiera miliony rekordów, nadal będziemy mogli znaleźć je wszystkie, stronicować je w galerii w miarę, jak użytkownik przewija wyniki.Because this is all delegable, even if the [dbo].[Products] table contains millions of records, we will still find them all, paging through them in the gallery as the user scrolls through the results.

Zauważysz, że mamy do czynienia z dopasowaniem zarówno dla pozycji „Apple”, jak i „Pineapple”.You will notice that we are seeing a match for both "Apple" and "Pineapple". Funkcja Search znajduje termin wyszukiwania w dowolnym miejscu w kolumnie tekstowej.The Search function will find a search term anywhere in a text column. Załóżmy, że zamiast tego chcemy znaleźć termin wyszukiwania tylko na początku nazwy owocu.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Możemy użyć innej delegowalnej funkcji, Filter, z bardziej skomplikowanym terminem wyszukiwania (dla uproszczenia usuniemy wywołanie funkcji SortByColumns):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Wydaje się, że to działa, ponieważ teraz są poprawnie wyświetlane tylko "Apples", a "Pineapple" nie.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Jednak jest tam niebieska kropka obok galerii i niebieska linia falista pod fragmentem formuły.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Jest nawet niebieska kropka znajdująca się na miniaturze ekranu.There is even a blue dot showing in the screen thumbnail. Jeśli jednak umieścimy kursor nad niebieską kropką obok galerii, zobaczymy poniższe:If we hover over the blue dot next to the gallery, we see the following:

Chociaż używamy funkcji Filter, która jest funkcją delegowalną, z programem SQL Server, który jest delegowalnym źródłem danych, użyta przez nas formuła wewnątrz funkcji Filter nie jest delegowalna.Although we are using Filter which is a delegable function, with SQL Server which is a delegable data source, the formula we used within Filter is not delegable. Funkcji Mid i Len nie można delegować do żadnego źródła danych.Mid and Len cannot be delegated to any data source.

Ale to działa, nieprawdaż?But it worked, didn't it? Cóż, tak jakby.Well, kind of. I dlatego jest niebieska kropka zamiast żółtej ikony zagrożenia i czerwonej linii falistej błędu.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Jeśli tabela [dbo].[Products] zawiera mniej niż 500 rekordów, wówczas tak, to działa doskonale.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Wszystkie rekordy zostały przeniesione do urządzenia i funkcja Filter została zastosowana lokalnie.All records were brought to the device and the Filter was applied locally.

Jeśli jednak ta tabela zawiera więcej niż 500 rekordów, wówczas tylko owoce, które zaczynają się od "Apple" w pierwszych 500 rekordach tabeli, zostaną wyświetlone w galerii.If instead this table contains more than 500 records, then only fruit which begin with "Apple" in the first 500 records of the table will be displayed in the gallery. Jeśli w nazwie rekordu 501 lub 500 001 występuje "Apple, Fuji", nie zostanie to odnalezione.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.