위임 이해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 must be brought to your device. 수백 만 개의 레코드 중에서 일부만 필요하거나, 또는 단일 집계 값이 수천 개의 레코드를 나타낼 수 있습니다.Perhaps you need only a handful of records from a sea of million, 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 that your app needs, 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, 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's the only way to keep your app performing well and ensure users can access all the information they need. 위임이 불가능한 위치를 식별하는 위임 경고에 주의하세요.Take heed of delegation warnings that identify places where delegation isn't possible. 작은 데이터 집합(500개 레코드 미만)을 사용하려는 경우 수식을 위임할 수 없다면 앱이 로컬로 처리를 수행할 수 있기 때문에 데이터 원본과 수식도 사용할 수 있습니다.If you're working with small data sets (fewer than 500 records), you can use any data source and formula because the app can process data locally if the formula can't be delegated.

참고

위임 경고는 이전에 "파란색 점" 제안으로 PowerApps에 플래그가 지정되었지만 위임 제안은 다시 경고로 분류된 이후에 지정되었습니다.Delegation warnings were previously flagged in PowerApps as "blue dot" suggestions, but delegation suggestions have since been re-classified as warnings. 데이터 원본의 데이터가 500개의 레코드를 초과하여 함수가 위임될 수 없는 경우 PowerApps는 데이터를 모두 검색할 수 없으므로 앱에는 잘못된 결과가 포함될 수 있습니다.If the data in your data source exceeds 500 records and a function can't be delegated, PowerApps might not be able to retrieve all of the data, and your app may have wrong results. 위임 경고를 통해 올바른 결과가 포함되도록 앱을 관리할 수 있습니다.Delegation warnings help you manage your app so that it has correct results.

위임 가능한 데이터 원본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 delegation warnings 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, you can use these with columns of the table to select the appropriate records:

모든 레코드에 대한 상수 값으로 평가하는 수식의 일부를 사용할 수도 있습니다.You can also use portions of your formula that evaluate to a constant value for all records. 예를 들어 Left( Language(), 2 ) 는 레코드의 어떠한 열에도 종속되지 않으므로 모든 레코드에 동일한 값을 반환합니다.For example, Left( Language(), 2 ) doesn't depend on any columns of the record and, therefore, returns the same value for all records. 사실상 상수입니다.It's 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.

위의 목록에는 이러한 주목할 만한 항목이 포함되지 않습니다.The previous list doesn't include these notable items:

정렬 함수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 details.

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

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

위임 불가능 함수Non-delegable functions

모든 기타 함수는 다음 중요 함수를 포함해 위임을 지원하지 않습니다.All other functions don't 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 isn't delegable. 전체 수식의 결과는 Products 데이터 원본의 첫 부분으로 제한됩니다.The result of the entire formula will be limited to the first portion of the Products data source.

LookUp 함수와 해당 데이터 원본이 위임 가능하기 때문에 Suppliers에 대한 일치 항목은 크더라도 데이터 원본 어디서든 찾을 수 있습니다.Because the LookUp function and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it's large. 잠재적인 단점은 LookUpProducts에서 이러한 각 첫 레코드에 대한 데이터 원본을 별도로 호출하여 네트워크에서 많은 채터를 유발한다는 것입니다.A potential downside is that LookUp will make 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 doesn't 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 can't 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 crashed.

이를 방지하기 위해 PowerApps는 로컬에서 처리할 수 있는 데이터 양을 제한할 수 있습니다. 기본적으로 레코드 500개입니다.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records by default. 작은 데이터 집합에 대한 전체 액세스 권한을 계속 유지하고 부분 결과를 확인하여 큰 데이터 집합의 사용을 한정할 수 있도록 이 숫자를 선택했습니다.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 because it can confuse users. 예를 들어 수백만 개의 레코드를 포함하는 데이터 원본에 대해 위임할 수 없는 선택 수식과 함께 Filter 함수를 사용합니다.For example, consider a Filter function with a selection formula that can't be delegated, over a data source that contains a million records. 필터링이 로컬로 수행되기 때문에 처음 500개의 레코드만 스캔됩니다.Because the filtering is done locally, only the first 500 records are scanned. 원하는 레코드가 레코드 501, 또는 500,001인 경우 Filter에 의해 사용되거나 반환되지 않습니다.If the desired record is record 501 or 500,001, it isn't considered or returned by Filter.

집계 함수는 혼란을 일으킬 수도 있습니다.Aggregate functions can also cause confusion. 이 동일한 수백만 개의 레코드 데이터 원본의 열에 대해 Average를 사용합니다.Take Average over a column of that same million-record data source. Average는 아직 위임할 수 없으므로, 처음 500개의 레코드의 평균만을 계산합니다.Average can't yet be delegated, so only the first 500 records are averaged. 주의하지 않으면 부분 답변은 앱 사용자에 의해 전체 답변으로 잘못 해석될 수 있습니다.If you're not careful, a partial answer could be misconstrued as a complete answer by a user of your app.

제한 변경Changing the limit

500은 레코드의 기본 숫자이지만 전체 앱에서 이 번호를 변경할 수 있습니다.500 is the default number of records, but you can change this number for an entire app:

  1. 파일 탭에서 앱 설정을 선택합니다.On the File tab, select App settings.
  2. 실험적 기능에서 위임할 수 없는 쿼리에 대한 데이터 행 제한 설정을 1에서 2000으로 변경합니다.Under Experimental features, change the Data row limit for non-delegable queries setting from 1 to 2000.

경우에 따라 2,000(아니면 1,000 또는 1,500)이 시나리오의 필요를 충족하는지 알 수 있습니다.In some cases, you'll know that 2,000 (or 1,000 or 1,500) will satisfy the needs of your scenario. 신중하게, 시나리오에 맞도록 숫자를 늘릴 수 있습니다.With care, you can increase this number to fit your scenario. 이 숫자를 늘릴수록 앱의 성능은 저하될 수 있습니다. 열이 많이 있는 넓은 테이블의 경우 특히 그렇습니다.As you increase this number, your app's performance may degrade, especially for wide tables with lots of columns. 그러나 가장 적합한 답은 가능한 만큼 위임하는 것입니다.Still, the best answer is to delegate as much as you can.

앱이 대규모 데이터 집합으로 확장될 수 있도록 하려면 이 설정을 1로 줄입니다.To ensure that your app can scale to large data sets, reduce this setting down to 1. 위임할 수 없는 항목이 있으면 앱을 테스트할 때 쉽게 감지할 수 있는 단일 레코드를 반환합니다.Anything that can't be delegated returns a single record, which should be easy to detect when testing your app. 이를 통해 개념 증명 앱을 프로덕션 환경에서 사용하려는 경우 예기치 않은 문제를 방지할 수 있습니다.This can help avoid surprises when trying to take a proof-of-concept app to production.

위임 경고Delegation warnings

위임된 내용 및 위임되지 않은 내용을 쉽게 확인하기 위해 위임될 수 없는 항목이 포함된 수식의 만들 때 PowerApps에서는 경고(노란색 삼각형)를 표시합니다.To make it easier to know what is and isn't being delegated, PowerApps provides warning (yellow triangle) when you create a formula that contains something that can't be delegated.

위임 경고는 위임 가능한 데이터 원본에서 작동하는 수식에만 표시됩니다.Delegation warnings appear only on formulas that operate on delegable data sources. 경고가 표시되지 않고 수식이 제대로 위임되지 않은 경우 이 항목의 앞에서 위임 가능한 데이터 원본 목록과 비교하여 데이터 원본 형식을 확인하세요.If you don't see a warning and you believe your formula isn't being properly delegated, check the type of data source against the list of delegable data sources earlier in this topic.

Examples

예를 들어 [dbo].[Fruit] 라는 SQL Server 테이블을 기반으로 하는 세 개의 화면 앱을 자동으로 생성합니다.For this example, you'll automatically generate a three-screen app based on a SQL Server table named [dbo].[Fruit]. 앱을 생성하는 방법에 대한 자세한 내용의 경우 앱용 Common Data Service에 대한 항목에서 비슷한 원칙을 SQL Server에 적용할 수 있습니다.For information about how to generate the app, you can apply similar principles in the topic about Common Data Service for Apps to SQL Server.

3개 화면 앱

갤러리의 Items 속성은 둘 다 위임할 수 있는 SortByColumnsSearch 함수가 포함된 수식으로 설정됩니다.The gallery's Items property is set to a formula that contains SortByColumns and Search functions, both of which can be delegated.

검색 상자에 "Apple" 을 입력합니다.In the search box, type "Apple".

앱이 검색 요청을 처리하기 위해 SQL Server와 통신하는 경우 행진하는 점이 일시적으로 화면의 위쪽에 표시됩니다.Marching dots appear momentarily near the top of the screen as the app communicates with SQL Server to process the search request. 데이터 원본에 수백만 개의 레코드가 포함되는 경우에도 검색 조건을 충족하는 모든 레코드가 표시됩니다.All records that meet the search criteria appear, even if the data source contains millions of records.

검색 텍스트 입력 컨트롤

Search 함수가 텍스트 열 어디에서나 표시되기 때문에 검색 결과에는 "Apples", "Crab apples""Pineapple" 이 포함됩니다.The search results include "Apples", "Crab apples", and "Pineapple" because the Search function looks everywhere in a text column. 과일 이름의 시작 부분에서 검색 팀이 포함된 레코드만을 찾으려는 경우 더 복잡한 검색 용어를 사용하여 다른 위임 가능한 함수인 Filter를 사용할 수 있습니다.If you wanted to find only records that contain the search team at the start of the fruit's name, you can use another delegable function, Filter, with a more complicated search term. (편의상 SortByColumns 호출을 제거합니다.)(For simplicity, remove the SortByColumns call.)

SortByColumns 호출 제거

새 결과에는 "Apples" 가 포함되지만 "Crab apples" 또는 "Pineapple" 은 포함되지 않습니다.The new results include "Apples" but not "Crab apples" or "Pineapple". 그러나 노란색 삼각형이 갤러리 옆에 표시되고(왼쪽 탐색 모음에 썸네일이 표시되는 경우 화면 썸네일에 표시됨) 파란색 물결선이 수식의 일부 아래에 표시됩니다.However, a yellow triangle appears next to the gallery (and in the screen thumbnail if the left navigation bar shows thumbnails), and a blue, wavy line appears under a portion of the formula. 이러한 각 요소는 경고를 나타냅니다.Each of these elements indicate a warning. 갤러리 옆에 있는 노란색 삼각형을 마우스로 가리키면 다음과 같은 메시지가 나타납니다.If you hover over the yellow triangle next to the gallery, this message appears:

위임 경고 마우스로 가리키기

SQL Server는 위임 가능한 데이터 원본이고 Filter는 위임 가능한 함수입니다. 하지만 MidLen은 데이터 원본에 위임될 수 없습니다.SQL Server is a delegable data source, and Filter is a delegable function, However, Mid and Len can't be delegated to any data source.

하지만 가능했습니다.But it worked, didn't it? 가능했다고 봐야죠.Well, kind of. 이런 이유로 인해 빨간색 물결선이 아닌 오류가 됩니다.And that is why this is a warning and not a red, wavy squiggle.

  • 테이블에 500개 미만의 레코드가 포함되는 경우 수식은 완벽하게 작동합니다.If the table contains fewer than 500 records, the formula worked perfectly. 모든 레코드를 장치로 불러 왔으며 Filter가 로컬에 적용되었습니다.All records were brought to the device, and Filter was applied locally.
  • 테이블에 500개를 초과하는 레코드가 포함되는 경우 수식은 조건에 일치하는 경우에도 레코드 501 이상을 반환하지 않습니다.If the table contains more than 500 records, the formula won't return record 501 or higher, even if it matches the criteria.