위임 이해Understand delegation

PowerApps에는 데이터의 테이블을 필터링, 정렬 및 형성하는 강력함 함수 집합이 포함되어 있습니다(단 시간에 Filter, SortAddColumns 함수 이름 지정).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. 이러한 함수를 사용하여 사용자에게 필요한 정보에 대한 집중된 액세스 권한을 제공할 수 있습니다.With these functions, you can provide your users with focused access to the information they need. 데이터베이스 배경 지식이 있는 사람들에게 이러한 함수를 사용하는 것은 데이터베이스 쿼리를 작성하는 것과 같습니다.For those with a database background, using these functions is the equivalent of writing a database query.

효율적인 앱을 빌드하는 핵심은 장치로 가져와야 하는 데이터의 양을 최소화하는 것입니다.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. 수백 만 개의 레코드 중에서 일부만 필요하거나, 또는 단일한 집계 값이 수천 개의 레코드를 나타낼 수 있습니다.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. 또는 아마도 첫 번째 레코드 집합을 검색할 수 있고 나머지 데이터 집합은 사용자가 더 원한다는 제스처를 취할 때 검색됩니다.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. 집중하면 앱에서 필요한 처리량, 네트워크 대역폭을 현저하게 줄일 수 있어 셀룰러 네트워크를 통해 연결된 휴대폰에서도 사용자를 위해 더 신속하게 응답할 수 있습니다.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.

위임은 PowerApps 수식의 표현이 네트워크를 통해 이동하는 데이터를 최소화할 필요성을 충족하는 곳입니다.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. 즉, PowerApps가 로컬에서 처리하기 위해 앱으로 데이터를 이동하는 것이 아니라 데이터의 처리를 데이터 원본으로 위임한다는 것을 의미합니다.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.

복잡해지는 상황에서 이 문서가 있는 이유는 PowerApps 수식으로 표현할 수 있는 것 중에 모든 데이터 원본으로 위임할 수 없는 것도 있기 때문입니다.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. PowerApps 언어는 광범위한 숫자 및 텍스트 조작 기능과 함께 메모리의 전체 통합 문서에 완벽한 즉시 액세스할 수 있도록 설계된 Excel의 수식 언어를 흉내내고 있습니다.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. 결과적으로, PowerApps 언어는 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.

큰 데이터 집합을 작업하려면 위임할 수 있는 데이터 원본과 수식을 사용해야 합니다.Working with large data sets requires using data sources and formulas that can be delegated. 앱 성능을 유지하고 사용자가 필요한 모든 정보에 액세스할 수 있게 하는 유일한 방법입니다.It is the only way to keep your app performing well and ensure users can access all the information they need. 위임이 가능하지 않은 위치를 플래그한 파랑 점 제안에 주의하세요.Take heed of blue-dot suggestions that flag places where delegation is not possible. 작은 데이터 집합(500개 레코드 미만)을 사용하려는 경우 수식을 위임할 수 없다면 로컬에서 처리를 수행할 수 있으므로 어떠한 데이터 원본과 수식도 사용할 수 있습니다.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.

위임 가능한 데이터 원본Delegable data sources

위임을 지원하는 데이터 원본의 전체 목록과 범위는 위임 목록을 참조하세요.See the delegation list for the full list of which data sources support delegation and to what extent.

계속해서 기존 데이터 원본에 위임 지원을 추가할 뿐만 아니라, 더 많은 데이터 원본을 추가할 수 있습니다.We are continuing to add delegation support to existing data sources, as well as add more data sources.

내보낸 Excel 통합 문서(“앱에 정적 데이터 추가” 데이터 원본 사용), 컬렉션, 그리고 컨텍스트 변수에 저장된 테이블은 위임이 필요하지 않습니다.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. 이 모든 데이터는 이미 메모리에 있으며, 전체 PowerApps 언어를 적용할 수 있습니다.All of this data is already in memory, and the full PowerApps language can be applied.

위임 가능 함수Delegable functions

다음 단계는 위임할 수 있는 수식만 사용하는 것입니다.The next step is to use only those formulas that can be delegated. 여기에는 위임할 수 있는 수식 요소가 포함됩니다.Included here are the formula elements that could be delegated. 그러나 모든 데이터 원본은 서로 다르며 일부는 이러한 요소를 지원하지 않습니다.However, every data source is different, and not all of them support all of these elements. 특정 수식에서 파랑 점 제안을 확인하세요.Check for blue-dot suggestions in your particular formula.

이러한 목록은 시간이 지남에 따라 변경됩니다.These lists will change over time. 위임에 더 많은 함수와 연산자를 지원하기 위해 노력하고 있습니다.We're working to support more functions and operators with delegation.

Filter 함수Filter functions

Filter, SearchLookUp을 위임할 수 있습니다.Filter, Search, and LookUp can be delegated.

FilterLookUp 함수 내에서 적합한 레코드를 선택하기 위해 테이블의 열에 다음을 사용할 수 있습니다.Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

모든 레코드에 대한 상수 값으로 평가하는 수식의 일부를 사용할 수도 있습니다.Portions of your formula that evaluate to a constant value for all records can also be used. 예를 들어 Left( Language(), 2 )는 레코드의 어떠한 열에도 종속되지 않으므로 모든 레코드에 동일한 값을 반환합니다.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. 사실상 상수입니다.It is effectively a constant. 컨텍스트 변수, 컬렉션 및 신호의 사용은 상수가 될 수 없으며, FilterLookUp은 위임되지 않습니다.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

일부 중요한 항목이 위의 목록에서 누락되었습니다.Some notable items missing from the above list:

정렬 함수Sorting functions

SortSortByColumns를 위임할 수 있습니다.Sort and SortByColumns can be delegated.

Sort에서 이 수식은 단일 열의 이름에 불과하며 다른 연산자 또는 함수를 포함할 수 없습니다.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

집계 함수Aggregate functions

Sum, Average, MinMax를 위임할 수 있습니다.Sum, Average, Min, and Max can be delegated. 지금은 제한된 수의 데이터 원본만 이 위임을 지원합니다. 자세한 내용은 위임 목록을 확인하세요.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

CountRows, CountACount 등의 계산 함수는 위임할 수 없습니다.Counting functions such as CountRows, CountA, and Count cannot be delegated.

StdevPVarP 등의 기타 집계 함수는 위임할 수 없습니다.Other aggregate functions such as StdevP and VarP cannot be delegated.

기타 함수Other functions

모든 기타 함수는 다음 중요 함수를 포함해 위임을 지원하지 않습니다.All other functions do not support delegation, including these notable functions:

공통 패턴은 AddColumnsLookUp을 사용하여 하나의 테이블을 다른 테이블로 병합하는 것입니다(일반적인 데이터베이스 용어로 조인).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. 예:For example:

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

ProductsSuppliers가 위임 가능한 데이터 원본이고 LookUp이 위임 가능한 함수지만, AddColumns 함수는 위임 가능하지 않습니다.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. 전체 수식의 결과는 Products 데이터 원본의 첫 부분으로 제한됩니다.The result of the entire formula will be limited to the first portion of the Products data source.

LookUp과 해당 데이터 원본이 위임 가능하므로, Suppliers에 대한 매치는 크더라도 데이터 원본의 어디에선가 찾을 수 있습니다.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. 잠재적인 단점은 LookUpProducts에서 이러한 각 첫 레코드에 대한 데이터 원본을 별도로 호출하여 네트워크에서 많은 채터를 유발한다는 것입니다.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. Suppliers가 너무 작고 자주 바뀌지 않을 경우 앱이 시작되면 Collect 호출을 통해 앱에서 데이터 원본을 캐싱할 수 있으며(시작 화면에서 OnVisible 사용) 대신, LookUp을 수행합니다.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.

비-위임 가능한 한계Non-delegable limits

위임할 수 없는 수식은 로컬에서 처리됩니다.Formulas that cannot be delegated will be processed locally. 이를 통해 PowerApps 수식 언어의 전체 범위를 사용할 수 있습니다.This allows for the full breadth of the PowerApps formula language to be used. 하지만 먼저 네트워크를 통해 많은 양의 데이터를 검색해야 할 수 있으므로, 모든 데이터를 장치로 가져와야 하는 수고로움이 있습니다.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. 시간이 걸려 앱이 느리거나 멈춘다는 인상을 줄 수 있습니다.That can take time, giving the impression that your app is slow or possibly hung.

이를 방지하기 위해 PowerApps는 로컬에서 처리할 수 있는 데이터 양을 제한할 수 있습니다(500개 레코드).To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. 작은 데이터 집합에 대한 전체 액세스 권한을 계속 유지하고 부분 결과를 확인하여 큰 데이터 집합의 사용을 한정할 수 있도록 이 숫자를 선택했습니다.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.

사용자에게 혼란을 일으킬 수 있으므로 이 기능을 사용할 때는 각별하게 주의해야 합니다.Obviously care must be taken when using this facility as it can be confusing for users. 예를 들어 수백만 개의 레코드 데이터 원본에 대해 위임할 수 없는 선택 수식과 함께 Filter 함수를 고려하세요.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. 로컬에서 필터링을 수행할 수 있으므로, 수백만 개의 레코드 중 첫 500개의 레코드만 스캔됩니다.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. 원하는 레코드가 레코드 501, 또는 500,001인 경우 Filter로 고려되거나 반환되지 않습니다.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

혼란스러울 수 있는 다른 위치는 집계 함수입니다.Another place where this can be confusing is aggregate functions. 이 동일한 수백만 레코드 데이터 원본의 열로 Average를 가져갑니다.Take Average over a column of that same million record data source. Average는 아직 위임할 수 없으므로, 첫 500개의 레코드만 평균으로 산정됩니다.Since Average cannot yet be delegated, only the first 500 records will be averaged. 부분 답변은 앱 사용자에 의해 전체 답변으로 잘못 해석될 수 있으므로 주의해야 합니다.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

파랑 점 제안Blue dot suggestions

위임되는 것과 위임되지 않는 것을 더 쉽게 알 수 있도록 제작 환경에서는 수식에 위임할 수 없는 항목이 포함되어 있을 경우 파랑 점 제안을 제공합니다.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.

파랑 점은 위임 가능한 데이터 원본에서 작용하는 수식에만 표시됩니다.Blue dots are only shown on formulas that operate on delegable data sources. 파랑 점이 보이지 않고 수식이 제대로 위임되지 않을 경우 위의 위임 가능한 데이터 원본 목록과 비교하여 데이터 원본 유형을 확인하세요.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.

Examples

이 예에서는 제품, 특히 과일, [dbo].[Products] 이름이 포함된 SQL Server 테이블을 사용합니다.In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. 새 화면에서 PowerApps는 이 데이터 원본과 연결된 기본적인 3개 화면 앱을 만들 수 있습니다.On the New screen, PowerApps can create a basic three screen app connected to this data source:

갤러리의 Items 속성에 대해 이 수식을 참고하세요.Note the formula for the Gallery's Items property. SortByColumnsSearch 함수를 사용하고 있으며, 둘 다 위임 가능합니다.It is using SortByColumns and Search functions, both of which can be delegated.

검색 텍스트 입력 컨트롤에 "Apple"을 입력해 보겠습니다.Let's type "Apple" into the search text-input control. 자세히 관찰해 보니 새 검색에서 새 입력 항목이 처리되는 동안 화면 맨 위에 순간적으로 행진하는 점이 보일 것입니다.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. 행진하는 점은 SQL Server와 통신하고 있음을 나타냅니다.The marching dots indicate that we are communicating with the SQL Server:

모두 위임 가능하므로, [dbo].[Products] 테이블에 수백만 개의 레코드가 포함되어 있는 경우에도 사용자가 결과를 스크롤할 때 갤러리에서 페이지를 넘기면서 모두 찾을 수 있습니다.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.

"Apple"과 "Pineapple"이 둘 다 일치하는 검색을 보려고 합니다.You will notice that we are seeing a match for both "Apple" and "Pineapple". Search 함수는 텍스트 열의 어디에서나 검색어를 찾아냅니다.The Search function will find a search term anywhere in a text column. 대신 그렇다면, 과일 이름으로 시작하는 검색어만 찾길 원했다고 말해 보겠습니다.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. 더 복잡한 검색어로 다른 위임 가능한 함수 Filter를 사용할 수 있습니다(간단하게 SortByColumns 호출을 제거하려고 합니다).We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

작동하는 것처럼 보이지만, "Apples"만 올바르게 표시되고 "Pineapple"은 아닙니다.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. 그러나 갤러리 옆에 파랑 점이 표시되며 수식 부분에 파란 물결선이 있습니다.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. 화면 썸네일에서도 파랑 점이 보입니다.There is even a blue dot showing in the screen thumbnail. 갤러리 옆에 있는 파랑 점 위을 마우스로 가리키면 다음 사항이 보입니다.If we hover over the blue dot next to the gallery, we see the following:

위임 가능한 데이터 원본인 SQL Server에 위임 가능한 함수인 Filter를 사용하고 있더라도 Filter 내부에서 사용한 수식은 위임 가능하지 않습니다.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. MidLen은 어떠한 데이터 원본에도 위임할 수 없습니다.Mid and Len cannot be delegated to any data source.

하지만 가능했습니다.But it worked, didn't it? 가능했다고 봐야죠.Well, kind of. 그리고 이것이 바로 노랑 위험 아이콘과 빨강 물결 오류 대신 파랑 점인 이유입니다.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. [dbo].[Products] 테이블에 500개 미만의 레코드가 포함되어 있다면 완벽하게 작용했습니다.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. 모든 레코드를 장치로 불러 왔으며 Filter가 로컬에 적용되었습니다.All records were brought to the device and the Filter was applied locally.

대신 이 테이블에 500개 이상의 레코드가 포함되어 있는 경우에는 테이블의 첫 500개 레코드에서 "Apple" 로 시작하는 과일만 갤러리에 표시됩니다.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. "Apple, Fuji"가 레코드 501 또는 500,001에 이름으로 나타나면 검색되지 않습니다.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.