With 함수
적용 대상: 캔버스 앱 바탕 화면 흐름 모델 기반 앱 Power Pages Power Platform CLI
명명된 값의 인라인 레코드를 포함하여 단일 레코드에 대한 값을 계산하고 작업을 수행합니다.
설명
With 함수는 단일 레코드의 수식을 계산합니다. 수식은 값을 계산하고 데이터 수정이나 연결 작업과 같은 작업을 수행할 수 있습니다. ForAll 함수를 사용하여 레코드 테이블의 모든 레코드에 대한 수식을 계산합니다.
현재 처리 중인 레코드의 필드는 수식 내에서 사용할 수 있습니다. ThisRecord 연산자를 사용하거나 다른 값과 마찬가지로 이름을 기준으로 필드를 참조하기만 하면 됩니다. As 연산자는 처리 중인 레코드의 이름을 지정하여 수식을 이해하기 쉽게 만들고 중첩된 레코드를 액세스 가능하게 만드는 데에도 사용할 수 있습니다. 자세한 정보는 아래 예제 및 레코드 범위 작업을 참조하세요.
With를 사용하여 복잡한 수식을 더 작은 명명된 하위 수식으로 나누어 가독성을 향상시킵니다. 이러한 명명된 값은 With의 범위에 한정된 단순한 로컬 변수의 역할을 합니다. UpdateContext 함수와 함께 사용되는 동일한 인라인 레코드 구문은 With와 함께 사용할 수 있습니다. With는 자체 포함되어 있고, 이해하기 쉬우며, 선언적 수식 컨텍스트에서 사용할 수 있으므로 컨텍스트 또는 전역 변수보다 선호됩니다.
With를 사용하여 Patch 또는 Match와 같은 함수에서 반환하는 레코드 필드에 액세스합니다. 이러한 함수의 값을 추가 계산이나 작업에서 사용할 수 있을 만큼 오랫동안 보관합니다.
With에 대한 Record 인수가 오류인 경우 해당 오류는 함수에 의해 반환되고 Formula는 계산되지 않습니다.
구문
( 기록, 수식 ) 사용
- 기록 – 필수. 작업을 수행할 레코드입니다. 이름 값의 경우 인라인 구문
{ name1: value1, name2: value2, ... }
을(를) 사용하십시오. - 수식 – 필수. Record에 대해 계산할 수식입니다. 수식은 Record의 모든 필드를 레코드 범위로 직접 참조할 수 있습니다.
예제
단순한 명명된 값
With( { radius: 10,
height: 15 },
Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)
이 예제에서는 명명된 값의 레코드를 사용하여 실린더의 부피를 계산합니다. 를 사용하여 모든 입력 값을 함께 포착하여 계산 자체에서 입력 값을 쉽게 분리할 수 있습니다.
With 중첩
With( { AnnualRate: RateSlider/8/100, // slider moves in 1/8th increments and convert to decimal
Amount: AmountSlider*10000, // slider moves by 10,000 increment
Years: YearsSlider, // slider moves in single year increments, no adjustment required
AnnualPayments: 12 }, // number of payments per year
With( { r: AnnualRate/AnnualPayments, // interest rate
P: Amount, // loan amount
n: Years*AnnualPayments }, // number of payments
r*P / (1 - (1+r)^-n) // standard interest calculation
)
)
이 예제는 With 함수와 중첩하여 월간 모기지 지불에 대한 2 계층 계산을 생성합니다. 충돌이 없는 한 모든 외부 With 명명 값은 내부 With 내에서 사용할 수 있습니다 .
슬라이더 컨트롤은 오직 1씩 증가할 수 있으므로 슬라이더를 나누거나 곱하여 효과적으로 사용자 지정 증분을 만듭니다. 이자율의 경우 RateSlider의 Max 속성이 48로 설정되어 있어서 1/8 퍼센트 포인트 증분을 위해 8로 나누어지고 또 100으로 나누어져 백분율에서 소수로 변환되어 0.125%~6% 범위를 포함합니다. 대출 금액의 경우 AmountSlider의 Max 속성이 60으로 설정되어 있어서 10,000을 곱해 10,000~600,000의 범위를 포함합니다.
With는 슬라이더가 이동하고 새 대출 지불이 표시되면 자동으로 다시 계산됩니다. 변수가 사용되지 않으므로 슬라이더 컨트롤의 OnChange 속성을 사용할 필요가 없습니다.
이 앱을 만드는 자세한 지침은 다음과 같습니다.
- 새 앱 만들기
- Slider 컨트롤을 추가하고 이름을 RateSlider로 지정합니다. Max 속성을 48로 설정합니다.
- 슬라이더 컨트롤 왼쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 "Interest Rate:"로 설정합니다.
- 슬라이더 컨트롤 오른쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 RateSlider/8 & " %" 수식으로 설정합니다.
- 다른 Slider 컨트롤을 추가하고 이름을 AmountSlider로 지정합니다. 해당 Max 속성을 60으로 설정합니다.
- 이 슬라이더 컨트롤 왼쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 "Loan Amount:"로 설정합니다.
- 이 슬라이더 컨트롤 오른쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 AmountSlider/8 * 10000 수식으로 설정합니다.
- 다른 Slider 컨트롤을 추가하고 이름을 YearsSlider로 지정합니다. 해당 Max 속성을 40으로 설정합니다.
- 이 슬라이더 컨트롤 왼쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 "Number of Years:"로 설정합니다.
- 이 슬라이더 컨트롤 오른쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 YearsSlider 수식으로 설정합니다.
- Label 컨트롤을 추가하고 Text 속성을 위에 표시된 수식으로 설정합니다.
- 마지막 레이블 컨트롤 왼쪽에 Label 컨트롤을 추가합니다. 해당 Text 속성을 "Recurring Monthly Payment:"로 설정합니다.
Patch에서 반환된 기본 키
With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
ForAll( NewOrderDetails,
Patch( OrderDetails, Defaults( OrderDetails ),
{ Order: OrderID, // from With's first argument, primary key of Patch result
Quantity: Quantity, // from ForAll's NewOrderDetails table
ProductID: ProductID } // from ForAll's NewOrderDetails table
)
)
)
이 예제에서는 SQL Server의 Order 테이블에 레코드를 추가합니다. 그런 다음 주문에 대해 반환된 기본 키(OrderID 필드에서 Patch 함수에 의해 반환됨)를 사용하여 OrderDetails 테이블에서 관련 레코드를 만듭니다.
정규식으로 추출된 값
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)
이 예제에서는 ISO 8601 지속 시간 값에서 시, 분 및 초를 추출한 다음 이러한 하위 일치 항목을 사용하여 날짜/시간 값을 생성합니다.
하위 일치 항목에 포함되어 있는 숫자가 여전히 텍스트 문자열에 있습니다. 수학 연산을 수행하기 전에 Value 함수를 사용하여 숫자로 변환합니다.
구성 요소의 레코드 매핑
레코드 매핑을 참조하십시오.