Filter, Search 및 LookUp 함수
적용 대상: 캔버스 앱 바탕 화면 흐름 모델 기반 앱 Power Pages Power Platform CLI
Filter, **Search 및 LookUp 함수를 사용하는 방법을 배우려면 이 비디오를 시청하십시오.
참고
PAC CLI pac power-fx 명령은 검색 기능을 지원하지 않습니다.
Description
Filter 함수는 수식을 충족하는 테이블에서 레코드를 찾습니다. Filter를 사용하여 하나 이상의 기준과 일치하는 레코드 집합을 찾고 일치하지 않는 레코드를 삭제합니다.
LookUp 함수는 수식을 충족하는 테이블의 첫 번째 레코드를 찾습니다. LookUp을 사용하여 하나 이상의 조건과 일치하는 단일 레코드를 찾습니다.
둘 다 수식은 각 테이블의 레코드에 대해 평가됩니다. true가 되는 레코드는 결과에 포함됩니다. 일반적인 수식 연산자 이외에도 하위 문자열 일치에 in 및 exactin 연산자를 사용할 수 있습니다.
현재 처리 중인 레코드의 필드는 수식 내에서 사용할 수 있습니다. ThisRecord 연산자를 사용하거나 다른 값과 마찬가지로 이름을 기준으로 필드를 참조하기만 하면 됩니다. As 연산자는 처리 중인 레코드의 이름을 지정하여 수식을 이해하기 쉽게 만들고 중첩된 레코드를 액세스 가능하게 만드는 데에도 사용할 수 있습니다. 자세한 정보는 아래 예제 및 레코드 범위 작업을 참조하세요.
Search 함수는 해당 열 중 하나에 문자열을 포함하는 테이블의 레코드를 찾습니다. 문자열은 열 내의 아무 곳에서나 발생할 수 있습니다. 예를 들어, "rob" 또는 "bert" 검색으로 "Robert"를 포함하는 열에서 일치 항목을 찾습니다. 검색은 대/소문자를 구분합니다. Filter 및 LookUp과 달리 Search 함수는 단일 문자열을 사용하여 수식 대신 일치하도록 합니다.
필터링 및 검색 은 원본 테이블과 동일한 열과 기준에 맞는 레코드가 포함된 테이블을 반환합니다. LookUp 은 수식을 적용하여 레코드를 단일 값으로 줄인 후, 발견된 첫 번째 레코드만 반환합니다. 레코드가 발견되지 않는 경우 Filter 및 Search는 빈 테이블을 반환하고 LookUp은 공백을 반환합니다.
테이블은 문자열이나 숫자와 마찬가지로 Power Apps값입니다. 함수로부터 전달되거나 반환될 수 있습니다. 필터, 검색 , 조회는 표를 수정하지 않습니다. 대신 테이블을 인수로 사용하며 여기에서 테이블, 레코드 또는 단일 값을 반환합니다. 자세한 내용은 테이블 작업을 참조하세요.
위임
가능하면 Power Apps에서 필터 및 정렬 작업을 데이터 원본에 위임하고 요청 시 결과의 페이지 사이를 이동합니다. 예를 들어, 데이터로 채워진 갤러리 컨트롤을 보여주는 앱을 시작하면 레코드의 첫 번째 집합만 장치로 가져올 수 있습니다. 사용자가 스크롤하면 데이터 원본에서 추가 데이터를 가져옵니다. 결과적으로 앱의 시작 시간이 빨라지고 대용량 데이터 집합에 액세스할 수 있습니다.
그러나 위임이 항상 가능한 것은 아닙니다. 데이터 원본은 위임을 통해 지원되는 함수와 연산자에 따라 달라집니다. 수식의 완전한 위임이 불가능한 경우 작성 환경은 위임할 수 없는 부분에 경고와 함께 플래그를 지정합니다. 가능하면 위임할 수 없는 함수와 연산자를 방지하기 위해 수식 변경을 고려합니다. 위임 목록은 위임할 수 있는 데이터 원본과 작업을 자세히 설명합니다.
위임이 불가능한 경우 Power Apps는 로컬에서 작업하기 위해 소수의 레코드 집합만 가져옵니다. 필터 및 정렬 함수는 축소된 레코드 집합에서 작동합니다. 갤러리에서 제공하는 것은 전체가 아닐 수 있으며, 이는 사용자들에게 혼란을 줄 수 있습니다.
자세한 내용은 위임 개요를 참조하십시오.
구문
필터(표*, 수식1 [, *수식2*, ... ])
- 표 - 필수. 검색할 테이블입니다.
- 수식 - 필수. 각 테이블의 레코드에 의한 수식은 평가됩니다. 함수는 true가 되는 모든 레코드를 반환합니다. 테이블 내의 열을 참조할 수 있습니다. 둘 이상의 수식을 제공하는 경우 모든 수식의 결과는 And 함수와 결합됩니다.
검색(Table*, SearchString, Column1 [, *Column2*, ... ])
- 표 - 필수. 검색할 테이블입니다.
- SearchString - 필수. 검색할 문자열입니다. 공백 또는 빈 문자열인 경우 모든 레코드가 반환됩니다.
- 열 - 필수. 찾을 테이블 내의 열의 이름입니다. 이러한 열의 데이터 내에서 부분 일치 항목으로 SearchString이 발견되는 경우 전체 레코드가 반환됩니다.
참고
버전 3.24042 이전의 Power Apps에서는 Search 함수의 열 이름이 큰따옴표를 사용하는 텍스트 문자열로 지정되었으며, 데이터 원본에 연결된 경우 논리적 이름이어야 했습니다. 예를 들어 큰따옴표가 있는 논리 이름 "cr43e_name"이 따옴표가 없는 표시 이름 Name 대신 사용되었습니다. 공백이 포함된 열 이름이 포함된 SharePoint 및 Excel 데이터 원본의 경우 각 공백은 "_x0020_"로 지정되었습니다. 예를 들어 "열 이름"은 "Column_x0020_Name"으로 지정되었습니다. 이 버전 이후 모든 앱은 이 문서에 설명된 새로운 구문으로 자동 업데이트되었습니다.
LookUp(Table*, Formula [, ReductionFormula ])
- 표 - 필수. 검색할 테이블입니다. UI에서 구문은 함수 상자 위에 source로 표시됩니다.
- 수식 - 필수. 각 테이블의 레코드에 의한 수식은 평가됩니다. 함수는 true가 되는 첫 번째 레코드를 반환합니다. 테이블 내의 열을 참조할 수 있습니다. UI에서 구문은 함수 상자 위에 condition으로 표시됩니다.
- ReductionFormula - 선택 사항. 이 수식은 발견된 레코드를 통해 평가된 다음 단일 값으로 레코드를 감소시킵니다. 테이블 내의 열을 참조할 수 있습니다. 이 매개 변수를 사용하지 않는 경우 함수는 테이블의 전체 레코드를 반환합니다. UI에서 구문은 함수 상자 위에 result로 표시됩니다.
예제
다음 예에서는 IceCream 데이터 원본을 사용합니다.
수식 | Description | Result |
---|---|---|
필터(아이스크림, 주문시 > 0) | OnOrder가 0보다 큰 레코드를 반환합니다. | |
필터(아이스크림, 수량 + 주문시 > 225) | Quantity 및 OnOrder 열의 합이 225보다 큰 레코드를 반환합니다. | |
필터(아이스크림, "초콜릿"을 하위(맛)에 추가) | 대문자 또는 소문자와 관계 없이 "chocolate"이라는 단어가 Flavor 이름에 나타나는 레코드를 반환합니다. | |
필터(아이스크림, 수량 < 10 && 주문시 < 20) | Quantity가 10보다 작고 OnOrder가 20보다 작은 레코드를 반환합니다. 이러한 조건과 일치하는 레코드가 없으므로 빈 테이블이 반환됩니다. | |
검색(아이스크림, "초콜릿", 맛) | 대문자 또는 소문자와 관계 없이 "choc"이라는 문자열이 Flavor 이름에 나타나는 레코드를 반환합니다. | |
검색(아이스크림, "", 맛) | 검색어가 비어 있으므로 모든 레코드가 반환됩니다. | |
LookUp(아이스크림, 맛 = "초콜릿", 수량) | 적어도 하나가 있는 "Chocolate"과 같은 Flavor로 레코드를 검색합니다. 발견된 첫 번째 레코드의 경우 해당 레코드의 Quantity를 반환합니다. | 100 |
LookUp(아이스크림, 수량 > 150, 수량 + 주문시) | 수량이 150개보다 많은 여러 레코드를 검색합니다. "Vanilla" Flavor인 발견된 첫 번째 레코드의 경우 Quantity 및 OnOrder 열의 합계를 반환합니다. | 250 |
LookUp(아이스크림, 맛 = "피스타치오", 주문 중) | 하나도 없는 "Pistachio"와 같은 Flavor로 레코드를 검색합니다. 아무 것도 발견되지 않았으므로 Lookup은 공백을 반환합니다. | 공백 |
LookUp(아이스크림, 맛 = "바닐라") | 적어도 하나가 있는 "Vanilla"와 같은 Flavor로 레코드를 검색합니다. 감소가 없는 수식이 제공됐으므로 전체 레코드가 반환됩니다. | { Flavor: "Vanilla", Quantity: 200, OnOrder: 75 } |
선택 열로 필터링
다음 예에서는 데이터 원본으로 Microsoft Dataverse에서 계정 테이블을 사용합니다. 이 예는 선택한 Combo box 컨트롤 값을 기반으로 하는 계정의 목록을 필터하는 방법을 나타냅니다.
단계별
비어 있는 앱을 엽니다.
새 화면 옵션을 선택하여 새 화면을 추가합니다.
삽입 탭에서 Gallery를 선택한 다음 수직을 선택합니다.
오른쪽 창의 속성 탭에서 데이터 원본을 연 다음 계정을 선택합니다.
(선택 사항)레이아웃 목록에서 다른 옵션을 선택하세요.
삽입 탭에서 입력을 선택한 다음 Combo box을 선택합니다. 이 단계를 반복하여 콤보 상자 컨트롤을 두 개 더 추가합니다.
콤보 상자 컨트롤 각각에 대하여 오른쪽 창의 속성 탭에서 데이터 원본을 연 다음 계정을 선택합니다. 필드 옵션 옆의 편집을 선택한 다음 기본 텍스트 및 SearchField 값을 선택합니다. 기본 텍스트는 콤보 상자에 추가하려는 선택 항목 열이어야 합니다. 이 단계를 반복하여 다른 콤보 상자 컨트롤을 두 개 더 추가합니다.
이제 Gallery 컨트롤을 선택하고 Items 속성을 다음 수식으로 설정합니다.
Filter(Accounts, 'Industry' = ComboBox3.Selected.Industry Or IsBlank(ComboBox3.Selected.Industry), 'Relationship Type' = ComboBox2.Selected.'Relationship Type' Or IsBlank(ComboBox2.Selected.'Relationship Type'), 'Preferred Method of Contact' = ComboBox1.Selected.'Preferred Method of Contact' Or IsBlank(ComboBox1.Selected.'Preferred Method of Contact'))
검색 사용자 환경
다음 예에서는 IceCream 데이터 원본을 사용합니다.
많은 앱에서 하나 이상의 문자를 검색 상자에 입력하여 대규모 데이터 집합의 레코드 목록을 필터링할 수 있습니다. 입력하는 동안 검색 조건과 일치하는 레코드만 목록에 표시됩니다.
이 문서의 나머지 부분에 있는 예제는 다음 데이터가 포함된 고객이라는 목록을 검색한 결과를 보여줍니다.
이 데이터 원본을 컬렉션으로 만들려면 [Button] 컨트롤을 만들고 OnSelect 속성을 다음 수식으로 설정하십시오.
ClearCollect(고객, Table({ 이름: "Fred Garcia", 회사: "Northwind Traders" }, { 이름: "Cole Miller", 회사: "Contoso" }, { 이름: "Glenda Johnson", 회사: "Contoso" }, { 이름: "Mike Collins", 회사: "Adventure Works" }, { 이름: "Colleen Jones", 회사: "Adventure Works" }) )
이 예제에서처럼 화면 하단의 Gallery 컨트롤에 레코드 목록을 표시할 수 있습니다. 화면 상단 가까이에 SearchInput이라는 Text input 컨트롤을 추가할 수 있고, 사용자는 관심 있는 레코드를 지정할 수 있습니다.
사용자가 SearchInput에 문자를 입력하면 갤러리의 결과가 자동으로 필터링됩니다. 이 경우 갤러리는 고객 이름(회사 이름 아님)이 SearchInput의 문자 시퀀스로 시작하는 레코드를 표시하도록 구성됩니다. 사용자가 검색 상자에 co를 입력하면 갤러리에 다음 결과가 표시됩니다.
Name 열을 기준으로 필터링하려면 gallery 컨트롤의 Items 속성을 다음 수식 중 하나로 설정하십시오.
수식 | 설명 | 결과 |
---|---|---|
Filter(고객, StartsWith(이름, SearchInput.Text)) | Name 열의 시작 부분에 검색 문자열이 나타나는 레코드에 대해 Customers 데이터 원본을 필터링합니다. 이 테스트는 대/소문자를 구분하지 않습니다. 사용자가 검색 상자에 co를 입력하면 갤러리에 Colleen Jones와 Cole Miller가 표시됩니다. Mike Collins는 해당 레코드의 Name 열이 검색 문자열로 시작하지 않기 때문에 갤러리에 표시되지 않습니다. | |
필터(고객, SearchInput.Text in Name) | Name 열의 아무 곳에나 나타나는 검색 문자열의 레코드에 대해 Customers 데이터 원본을 필터링합니다. 이 테스트는 대/소문자를 구분하지 않습니다. 사용자가 검색 상자에 co를 입력하면 이러한 레코드의 Name 열 어딘가에 검색 문자열이 나타나기 때문에 갤러리에 Colleen Jones, Cole Miller 및 Mike Collins가 표시됩니다. | |
검색(고객, SearchInput.Text, 이름) | in 연산자를 사용하는 경우와 유사하게, Search 함수는 각 레코드의 Name 열 내에서 일치하는 항목을 검색합니다. 열 이름은 큰따옴표로 묶어야 합니다. |
회사 열과 이름 열을 포함하도록 검색 범위를 확장할 수 있습니다.
수식 | 설명 | 결과 |
---|---|---|
필터(고객, 이름, 검색 입력 텍스트 시작) || 회사, 검색 입력 텍스트 시작) | 검색 문자열(예: co)로 시작하는 Name 열 또는 Company 열의 레코드에 대해 Customers 데이터 원본을 필터링합니다. StartsWith 함수 중 하나가 true이면 || 연산자는 true입니다. | |
필터(고객, SearchInput.Text in Name || SearchInput.Text in Company) | 검색 문자열(예: co)이 포함된 Name 열 또는 Company 열의 레코드에 대해 Customers 데이터 원본을 필터링합니다. | |
검색(고객, 검색입력텍스트, 이름, 회사) | in 연산자를 사용하는 경우와 유사하게, Search 함수는 검색 문자열(예: co)이 포함된 Name 열 또는 Company 열의 레코드에 대해 Customers 데이터 원본을 검색합니다. 여러 열 및 다수의 in 연산자를 지정하는 경우 Search 함수가 Filter보다 읽고 쓰기가 쉽습니다. |