쿼리 제한 사항: 위임 및 쿼리 제한
위임 이해
Power Apps는 Power Fx 쿼리가 데이터 원본에서 실행될 수 있는 동등한 쿼리로 완전히 변환될 수 있을 때 백엔드 데이터 소스에서 가장 잘 작동합니다. Power Apps는 데이터 원본이 이해하는 쿼리를 보내고, 쿼리는 데이터 원본에 대해 수행되며, 쿼리 결과는 Power Apps로 반환됩니다. 예를 들어 데이터 원본은 데이터 원본의 데이터를 필터링하는 작업을 수행하고 필터 기준을 충족하는 행만 반환할 수 있습니다. 이것이 올바르게 작동하면 쿼리 작업을 수행하도록 쿼리가 데이터 원본에 위임되었다고 말합니다.
그러나 Power Fx 쿼리가 모든 데이터 원본에 대한 동등한 쿼리로 항상 변환될 수는 없습니다. 예를 들어 Dataverse는 Excel보다 더 많은 쿼리 기능을 지원합니다. Dataverse는 'in'(멤버십) 쿼리 연산자를 지원하지만 Excel은 지원하지 않습니다. 쿼리에서 데이터 원본이 지원하지 않는 기능을 사용하는 경우 쿼리를 위임할 수 없다고 말합니다. 일반적으로 쿼리 식의 일부가 위임할 수 없는 경우 쿼리의 어떤 부분도 위임하지 않습니다.
쿼리를 위임할 수 없는 경우 Power Apps는 데이터 원본에서 처음 500개의 레코드만 가져온 다음 쿼리에서 작업을 수행합니다. 이 제한은 최대 2,000개의 레코드까지 가능합니다. 제한 변경 Power Apps는 Power Apps의 우수한 성능을 유지하기 위해 결과 크기를 500개의 레코드로 제한합니다. 우리는 실험을 통해 이러한 크기보다 큰 결과 세트가 일반적으로 앱과 Power Apps에 성능 문제를 야기한다는 것을 발견했습니다.
그러나 데이터 원본의 데이터가 500/2000개 레코드를 초과하는 경우 쿼리가 잘못된 결과를 반환할 수 있으므로 이러한 제한은 문제가 될 수 있습니다. 예를 들어 데이터 원본에 1천만 개의 레코드가 있고 쿼리가 데이터의 마지막 부분에서 작동해야 하는 예를 생각해 보세요. (예를 들어 'Z'로 시작하는 성) 그러나 쿼리에 위임할 수 없는 연산자(예: 구별)가 있습니다. 이 경우 처음 500/2000 레코드만 가져오고 결과가 잘못되었습니다.
데이터 원본에 대한 위임 가능한 테이블을 사용하여 Power Fx 쿼리를 만듭니다. 위임할 수 있는 쿼리 함수만 사용해야 합니다. 이는 앱의 성능을 유지하고 사용자가 필요한 모든 정보에 액세스할 수 있도록 하는 유일한 방법입니다.
위임이 불가능한 위치를 식별하는 위임 경고에 주의하십시오. 작은 데이터 집합(500개 레코드 미만)을 사용하려는 경우 수식을 위임할 수 없다면 앱이 로컬로 처리를 수행할 수 있기 때문에 데이터 원본과 수식도 사용할 수 있습니다.
참고
위임 경고를 통해 올바른 결과가 포함되도록 앱을 관리할 수 있습니다. 데이터 원본의 데이터가 500개 레코드를 초과하고 함수를 위임할 수 없는 경우 Power Fx는 수식에 파란색 밑줄을 표시합니다.
위임 가능한 데이터 소스
위임은 특정 테이블 형식 데이터 원본에 대해만 지원됩니다. 데이터 원본이 위임을 지원하면 커넥터 설명서 아웃라인이 지원합니다. 예를 들어, 다음 테이블 형식의 데이터 원본이 가장 많이 사용되며 위임을 지원합니다.
- Power Apps 위임 가능한 기능 및 Microsoft Dataverse 작업
- Power Apps 위임 가능한 기능 및 SharePoint 작업
- Power Apps 위임 가능한 기능 및 SQL Server 작업
- Power Apps 위임 가능한 기능 및 Salesforce 작업
내보낸 Excel 통합 문서(앱에 정적 데이터 추가 데이터 원본 사용), 컬렉션, 그리고 컨텍스트 변수에 저장된 테이블은 위임이 필요하지 않습니다. 이 모든 데이터는 이미 메모리에 있으며, 전체 Power Apps 언어를 적용할 수 있습니다.
Delegable 함수
다음 단계는 위임할 수 있는 수식만 사용하는 것입니다. 여기에는 위임할 수 있는 수식 요소가 포함됩니다. 그러나 모든 데이터 원본은 서로 다르며 일부는 이러한 요소를 지원하지 않습니다. 특정 수식에서 위임 경고를 확인합니다.
Filter 함수
Filter, Search, First 및 LookUp 을 위임할 수 있습니다.
Filter 및 LookUp 함수 내에서 적합한 레코드를 선택하기 위해 테이블의 열에서 다음을 사용할 수 있습니다.
- And(&& 포함), Or(|| 포함), Not(! 포함)
- In
참고
In는 기본 데이터 원본의 열에 대해서만 위임됩니다. 예를 들어 데이터 원본이 계정 테이블이면
Filter(Accounts, Name in ["name1", "name2"])
가 평가를 위해 데이터 원본에 위임합니다. 그러나 Fullname 열이 계정과 다른 테이블(PrimaryContact)에 있으므로Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
는 위임하지 않습니다. 표현식은 로컬에서 평가됩니다. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- control 속성과 전역 및 컨텍스트 변수 등의 모든 레코드 전체에서 동일한 상수 값입니다.
모든 레코드에 대한 상수 값으로 평가하는 수식의 일부를 사용할 수도 있습니다. 예를 들어 Left( Language(), 2 ), Date( 2019, 3, 31 ) 및 Today() 는 레코드의 어떠한 열에도 종속되지 않으므로 모든 레코드에 동일한 값을 반환합니다. 이 값은 상수로 데이터 원본에 전송될 수 있으며 위임을 차단하지 않습니다.
위의 목록에는 이러한 주목할만한 항목이 포함되지 않습니다.
- If
- *, /, Mod
- 열 변환 연산 Text, Value
- Concatenate(& 포함)
- ExactIn
- 문자 조작 함수: Lower, Upper, Left, Mid, Len, ...
- 신호: Location, Acceleration, Compass, ...
- 일시적: Rand, ...
- 컬렉션
쿼리 제한 사항
조회 수준
Power Apps는 두 가지 조회 수준을 지원합니다. 이는 Power Fx 쿼리 표현식에 최대 2개의 조회 함수가 포함될 수 있음을 의미합니다. 이 제한은 성능을 보존하기 위한 것입니다. 쿼리 표현식에 조회가 포함된 경우 Power Apps는 먼저 기본 테이블을 가져오기 위한 쿼리를 수행합니다. 그런 다음 조회 정보로 첫 번째 테이블을 확장하는 두 번째 쿼리를 수행합니다. 그 이상으로 최대 한 단계 더 지원합니다. 그러나 오프라인에서는 한 가지 수준의 조회 확장만 지원됩니다.
식 평가 - 엔터티의 속성은 동등 연산자의 왼쪽 'LHS'에 있어야 합니다.
방정식의 왼쪽 'LHS'에 있는 식에서 비교할 엔터티의 속성을 배치하는 것이 중요합니다. 설명을 위해 아래 예에서 엔터티 속성 'Business unit ID'.Name은 속성 값이며 평가할 식의 LHS에 배치되어야 합니다. 다음 식은 성공합니다.
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
그러나 이 식은 다음을 수행하지 않습니다.
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
정렬 함수
Sort 및 SortByColumns 를 위임할 수 있습니다.
Sort에서 이 수식은 단일 열의 이름에 불과하며 다른 연산자 또는 함수를 포함할 수 없습니다.
집계 함수
백엔드 지원 여부에 따라 일부 집계 함수가 위임될 수 있습니다. Sum, Average, Min 및 Max 를 위임할 수 있습니다. CountRows 및 Count 과 같은 Counting 함수도 위임할 수 있습니다. 현재 제한된 수의 데이터 원본만 이러한 위임 함수를 지원합니다. 자세한 내용은 위임 목록을 참조하세요.
RemoveIf 및 UpdateIf 위임 지원은 실험적 단계이며 기본적으로 꺼져 있습니다.
위임 불가능 함수
모든 기타 함수는 다음 중요 함수를 포함해 위임을 지원하지 않습니다.
위임 불가능한 한계
위임할 수 없는 수식은 로컬에서 처리됩니다. 로컬 프로세싱은 Power Apps 수식 언어의 전체 범위를 사용할 수 있습니다. 하지만 먼저 네트워크를 통해 많은 양의 데이터를 검색해야 할 수 있으므로, 모든 데이터를 디바이스로 가져와야 하는 수고로움이 있습니다. 시간이 걸려서 앱이 느리거나 충돌한다는 인상을 줄 수 있습니다.
이를 방지하기 위해 Power Apps는 로컬에서 처리할 수 있는 데이터 양을 제한할 수 있습니다. 기본적으로 레코드 500개입니다. 작은 데이터 집합에 대한 전체 액세스 권한을 계속 유지하고 부분 결과를 확인하여 큰 데이터 집합의 사용을 한정할 수 있도록 이 숫자를 선택했습니다.
사용자에게 혼란을 일으킬 수 있기 때문에 이 기능을 사용할 때는 각별하게 주의해야 합니다. 예를 들어 수백만 개의 레코드를 포함하는 데이터 원본에 대해 위임할 수 없는 선택 수식과 함께 Filter 함수를 사용합니다. 필터링이 로컬로 수행되기 때문에 처음 500개의 레코드만 스캔됩니다. 원하는 레코드가 레코드 501, 또는 500,001인 경우 Filter에 의해 사용되거나 반환되지 않습니다.
집계 함수는 혼란을 일으킬 수도 있습니다. 이 동일한 수백만 개의 레코드 데이터 원본의 열에 대해 Average를 사용합니다. Average는 식이 위임되지 않았기 때문에 이 경우 위임할 수 없으며(이전 메모 참조), 따라서 처음 500개의 레코드만 평균을 냅니다. 주의하지 않으면 부분 답변은 앱 사용자에 의해 전체 답변으로 잘못 해석될 수 있습니다.
제한 변경
500은 레코드의 기본 숫자이지만 전체 앱에서 이 번호를 변경할 수 있습니다.
- 설정을 선택합니다.
- 일반 아래에서 데이터 행 제한 설정을 1에서 2000까지 변경합니다.
경우에 따라 2,000(아니면 1,000 또는 1,500)이 시나리오의 필요를 충족하는지 알 수 있습니다. 신중하게, 시나리오에 맞도록 숫자를 늘릴 수 있습니다. 이 숫자를 늘릴수록 앱의 성능은 저하될 수 있습니다. 열이 많이 있는 넓은 테이블의 경우 특히 그렇습니다. 그러나 가장 적합한 답은 가능한 만큼 위임하는 것입니다.
앱이 대규모 데이터 집합으로 확장될 수 있도록 하려면 이 설정을 1로 줄입니다. 위임할 수 없는 항목이 있으면 앱을 테스트할 때 쉽게 감지할 수 있는 단일 레코드를 반환합니다. 이를 통해 개념 증명 앱을 프로덕션 환경에서 사용하려는 경우 예기치 않은 문제를 방지할 수 있습니다.
위임 경고
위임된 내용 및 위임되지 않은 내용을 쉽게 확인하기 위해 위임될 수 없는 항목이 포함된 수식의 만들 때 Power Apps에서는 경고(노란색 삼각형)를 표시합니다.
위임 경고는 위임 가능한 데이터 원본에서 작동하는 수식에만 표시됩니다. 경고가 표시되지 않고 수식이 제대로 위임되지 않은 경우 이 문서의 앞에서 위임 가능한 데이터 원본 목록과 비교하여 데이터 원본 형식을 확인하세요.
예
예를 들어 [dbo].[Fruit] 라는 SQL Server 테이블을 기반으로 하는 세 개의 화면 앱을 자동으로 생성합니다. 앱을 생성하는 방법에 대한 자세한 내용의 경우 Dataverse에 대한 문서에서 비슷한 원칙을 SQL Server에 적용할 수 있습니다.
갤러리의 Items 속성은 둘 다 위임할 수 있는 SortByColumns 및 Search 함수가 포함된 수식으로 설정됩니다.
검색창에 "Apple" 을 입력합니다.
앱이 검색 요청을 처리하기 위해 SQL Server와 통신하는 경우 행진하는 점이 일시적으로 화면의 위쪽에 표시됩니다. 데이터 원본에 수백만 개의 레코드가 포함되는 경우에도 검색 조건을 충족하는 모든 레코드가 표시됩니다.
Search 함수가 텍스트 열 어디에서나 표시되기 때문에 검색 결과에는 "Apples" 및 "Pineapple" 이 포함됩니다. 과일 이름의 시작 부분에서 검색 용어가 포함된 레코드만을 찾으려는 경우 더 복잡한 검색 용어를 사용하여 다른 위임 가능한 함수인 Filter를 사용할 수 있습니다. (편의상 SortByColumns 호출을 제거합니다.)
새 결과에는 "Apples" 가 포함되지만 "Pineapple" 은 포함되지 않습니다. 그러나 노란색 삼각형이 갤러리 옆에 표시되고(왼쪽 탐색 모음에 썸네일이 표시되는 경우 화면 썸네일에 표시됨) 파란색 물결선이 수식의 일부 아래에 표시됩니다. 이러한 각 요소는 경고를 나타냅니다. 갤러리 옆에 있는 노란색 삼각형을 마우스로 가리키면 다음과 같은 메시지가 나타납니다.
SQL Server는 위임 가능한 데이터 원본이고 Filter는 위임 가능한 함수입니다. 하지만 Mid 및 Len은 데이터 원본에 위임될 수 없습니다.
하지만 가능했습니다. 가능했다고 봐야죠. 이런 이유로 인해 빨간색 물결선이 아닌 오류가 됩니다.
- 테이블에 500개 미만의 레코드가 포함되는 경우 수식은 완벽하게 작동합니다. 모든 레코드를 디바이스로 불러 왔으며 Filter가 로컬에 적용되었습니다.
- 테이블에 500개를 초과하는 레코드가 포함되는 경우 수식은 조건에 일치하는 경우에도 레코드 501 이상을 반환하지 않습니다.
참조
위임할 수 없는 함수 사용 및 부적절한 데이터 행 제한이 성능에 미치는 영향
위임 사용을 위한 성능 팁 및 모범 사례
참고
귀사의 설명서 언어 기본 설정에 대해 말씀해 주시겠습니까? 간단한 설문 조사에 응해주세요. (이 설문 조사는 영어로 되어 있습니다.)
이 설문 조사는 약 7분 정도 걸립니다. 개인 데이터는 수집되지 않습니다(개인정보처리방침).