Visual Basic 또는 JavaScript와 같은 다른 프로그래밍 도구를 사용한 경우 다음과 같이 질문할 수 있습니다. 변수는 어디에 있나요? Power Apps는 다르게 작동하며 다른 접근 방식이 필요합니다. 캔버스 앱을 빌드할 때 변수에 도달하는 대신 자신에게 Excel에서 무엇을 할 수 있나요?라고 물어보세요.
다른 도구에서는 명시적으로 계산을 수행하고 결과를 변수에 저장할 수 있습니다. 그러나 Power Apps 및 Excel은 입력 데이터가 변경되면 수식을 자동으로 다시 계산하므로 일반적으로 변수를 만들거나 업데이트할 필요가 없습니다. 이 방법을 사용하면 앱을 더 쉽게 만들고, 이해하고, 유지 관리할 수 있습니다.
경우에 따라 동작 수식을 추가하여 Excel의 모델을 확장하는 Power Apps에서 변수 를 사용해야 합니다. 예를 들어 사용자가 버튼을 선택할 때 이러한 수식이 실행됩니다. 동작 수식 내에서 다른 수식에 사용할 변수를 설정하는 것이 도움이 되는 경우가 많습니다.
일반적으로 변수를 사용하지 마세요. 그러나 경우에 따라 변수만 사용하여 원하는 환경을 만들 수 있습니다. 변수는 값을 설정하는 함수에 나타날 때 암시적으로 만들어지고 입력됩니다.
Excel을 Power Apps로 변환
Excel
Excel의 작동 원리를 검토해 보겠습니다. 셀에는 숫자나 문자열과 같은 값이나 다른 셀의 값을 기반으로 하는 수식이 있을 수 있습니다. 셀에 다른 값을 입력하면 새 값에 종속된 수식이 자동으로 다시 계산됩니다. 이 동작을 사용하도록 설정하기 위해 프로그래밍을 수행할 필요가 없습니다.
다음 예제에서 셀 A3은 수 식 A1+A2를 사용합니다. A1 또는 A2가 변경되면 A3이 자동으로 다시 계산되어 변경 내용을 표시합니다. 이 동작은 수식 자체 외부의 코딩이 필요하지 않습니다.
Excel에서는 변수를 사용하지 않습니다. 수식이 있는 셀의 값은 입력에 따라 변경되지만 수식의 결과를 기억하고 셀이나 다른 곳에 저장할 수 있는 방법은 없습니다. 셀 값을 변경하면 전체 스프레드시트가 변경되고 이전에 계산된 값이 손실됩니다. 셀을 복사하여 붙여넣을 수 있지만 수동이며 수식에서는 사용할 수 없습니다.
Power Apps
Power Apps에서 만드는 앱은 Excel과 매우 유사합니다. 셀을 업데이트하는 대신 화면의 아무 곳에나 컨트롤을 추가하고 수식에 사용할 수 있도록 이름을 지정합니다.
예를 들어 Label1이라는 레이블 컨트롤과 TextInput1 및 TextInput2라는 두 개의 텍스트 입력 컨트롤을 추가하여 앱에서 Excel 동작을 복사할 수 있습니다. Label1의 Text 속성을 TextInput1 + TextInput2로 설정하면 항상 TextInput1 및 TextInput2의 숫자 합계가 자동으로 표시됩니다.
Label1 컨트롤을 선택하면 화면 위쪽의 수식 입력줄에서 Text 수식이 표시됩니다. 수식 TextInput1 + TextInput2 는 Excel 통합 문서의 셀 간 종속성과 마찬가지로 이러한 컨트롤 간에 종속성을 만듭니다. TextInput1의 값을 변경해 보겠습니다.
Label1의 수식은 자동으로 다시 계산되고 새 값을 표시합니다.
Power Apps에서는 수식을 사용하여 컨트롤의 기본 값뿐만 아니라 서식과 같은 속성도 설정합니다. 다음 예제에서는 레이블의 Color 속성에 대한 수식에 음수 값이 빨간색으로 자동으로 표시됩니다. If 함수는 Excel에서 친숙해 보입니다.
If( Value(Label1.Text) < 0, Red, Black )
다음과 같은 여러 시나리오에서 수식을 사용합니다.
- 장치의 GPS가 켜지면 지도 컨트롤은 Location.Latitude 및 Location.Longitude를 사용하는 수식으로 현재 위치를 표시합니다. 지도는 사용자가 이동하는 대로 위치를 자동으로 추적합니다.
- 다른 사용자가 데이터 원본을 업데이트합니다. 예를 들어 팀의 다른 구성원이 목록의 항목을 업데이트할 수 있습니다. 데이터 원본을 새로 고치면 종속 수식이 자동으로 다시 계산되어 업데이트된 데이터가 표시됩니다. 예를 들어 갤러리의 Items 속성을 새로 필터링된 레코드 집합을 자동으로 표시하는 수식 필터(SharePointList)로 설정할 수 있습니다.
복리후생
수식을 사용하여 앱을 빌드하면 다음과 같은 많은 이점이 있습니다.
- Excel을 알고 있으면 Power Apps도 알 수 있습니다. 모델과 수식 언어가 동일하기 때문입니다.
- 다른 프로그래밍 도구를 사용한 경우 이러한 예제를 수행하는 데 필요한 코드의 양을 생각해 보세요. Visual Basic에서는 각 텍스트 입력 컨트롤에서 변경 이벤트에 대한 이벤트 처리기를 작성합니다. 각 항목에서 계산을 수행하는 코드는 중복되어 동기화되지 않거나 공통 서브루틴을 작성해야 합니다. Power Apps에서는 단일 한 줄 수식으로 이 모든 작업을 수행합니다.
- Label1의 텍스트가 어디에서 오는지 확인하려면 텍스트 속성의 수식과 같이 정확히 찾을 위치를 알 수 있습니다. 이 컨트롤의 텍스트를 변경하는 다른 방법은 없습니다. 기존 프로그래밍 도구에서 모든 이벤트 처리기 또는 서브루틴은 프로그램의 어디에서나 레이블 값을 변경할 수 있습니다. 이렇게 하면 변수가 변경된 시기와 위치를 추적하기가 어렵습니다.
- 슬라이더 컨트롤을 변경한 다음 마음을 변경하면 슬라이더를 원래 값으로 다시 변경할 수 있습니다. 아무 것도 변경되지 않는 것처럼 앱은 이전과 동일한 컨트롤 값을 표시합니다. Excel에서처럼 실험하고 "어떻게 해야 하는지"를 묻는 결과는 없습니다.
일반적으로 수식으로 작업을 수행할 수 있다면 더 좋습니다. Power Apps에서 수식 엔진을 사용하여 작업해 보겠습니다.
변수를 사용하는 경우 확인
구식의 계산기처럼 작동하도록 단순한 가산기를 누계로 변경해 보겠습니다. 추가 단추를 선택하면 합계에 숫자를 추가합니다. 지우기 단추를 선택하면 실행 합계를 0으로 다시 설정합니다.
| 표시 | 설명 |
|---|---|
|
앱이 시작되면 누적 합계는 0입니다. 빨간색 점은 사용자가 77을 입력하는 텍스트 입력 상자에서 사용자의 손가락을 나타냅니다. |
|
사용자가 추가 버튼을 선택합니다. |
|
77이 누계에 추가됩니다. 사용자가 추가 버튼을 다시 선택합니다. |
|
77이 다시 누적 합계에 추가되어 154가됩니다. 사용자가 지우기 버튼을 선택합니다. |
|
누계가 0으로 초기화됩니다. |
계산기는 Excel에 존재하지 않는 버튼을 사용합니다. 이 앱에서는 사용자가 수행하는 일련의 작업에 따라 값이 달라지므로 수식만으로는 누계를 계산할 수 없습니다. 대신 실행 합계를 수동으로 기록하고 업데이트합니다. 대부분의 프로그래밍 도구에서는 이 정보를 변수에 저장합니다.
앱이 원하는 방식으로 동작하려면 변수가 필요한 경우가 있지만 이 방법에는 다음과 같은 주의 사항이 있습니다.
- 실행 합계를 수동으로 업데이트합니다. 자동 다시 계산 기능이 기대에 미치지 못합니다.
- 실행 합계는 다른 컨트롤의 값을 기반으로 계산되지 않습니다. 사용자가 추가 단추를 선택하는 횟수와 매번 텍스트 입력 컨트롤에 있는 값에 따라 달라집니다. 사용자가 77을 입력하고 추가 를 두 번 선택했나요, 아니면 추가할 때마다 24와 130을 입력했나요? 합계가 154에 도달한 후에는 차이를 알 수 없습니다.
- 합계에 대한 변경 내용은 다른 작업에서 비롯할 수 있습니다. 이 예제에서는 추가 및 지우기 단추가 모두 합계를 업데이트합니다. 앱이 예상대로 동작하지 않는 경우 문제를 일으키는 단추는 무엇입니까?
전역 변수 사용
추가 컴퓨터를 만들려면 실행 중인 합계를 저장할 변수가 필요합니다. Power Apps에서 사용할 수 있는 가장 간단한 변수는 전역 변수입니다.
전역 변수의 작동 방식은 다음과 같습니다.
- Set 함수를 사용하여 전역 변수의 값을 설정합니다 . Set( MyVar, 1 )은 MyVar 전역 변수를 1의 값으로 설정합니다.
- Set 함수와 함께 사용되는 이름을 참조하여 전역 변수를 사용합니다. 이 경우 MyVar 는 1을 반환합니다.
- 전역 변수에는 문자열, 숫자, 레코드 및 테이블을 포함한 모든 값이 포함될 수 있습니다.
전역 변수를 사용하여 추가 컴퓨터를 다시 빌드합니다.
TextInput1이라는 텍스트 입력 컨트롤과 Button1 및 Button2라는 두 개의 단추를 추가합니다.
Button1의 Text 속성을 "추가"로 설정하고, Button2의 Text 속성을"지우기"로 설정합니다.
사용자가 추가 단추를 선택할 때 실행 합계를 업데이트하려면 OnSelect 속성을 다음 수식으로 설정합니다.
Set( RunningTotal, RunningTotal + TextInput1 )
이 수식은 + 연산자로 인해 숫자를 보유하는 전역 변수로 RunningTotal을 생성합니다. 앱의 아무 곳이나 RunningTotal 을 참조합니다. 사용자가 앱을 열면 RunningTotal 의 초기 값이 비어 있습니다.
사용자가 처음으로 추가 단추를 선택하고 설정 이 실행되면 RunningTotal 은 RunningTotal + TextInput1 값으로 설정됩니다.
사용자가 지우기 단추를 선택할 때 실행 합계를 0으로 설정하려면 OnSelect 속성을 다음 수식으로 설정합니다.
Set( RunningTotal, 0 ) /* 총계 설정을 0으로 초기화합니다 */
레이블 컨트롤을 추가하고 Text 속성을 RunningTotal로 설정합니다.
이 수식은 자동으로 다시 계산되고 사용자가 선택한 단추에 따라 변경되는 RunningTotal 값을 사용자에게 표시합니다.
앱 미리 보기 텍스트 상자에 숫자를 입력하고 추가 단추를 몇 번 선택합니다. 준비가 되면 Esc 키를 사용하여 제작 환경으로 돌아갑니다.
전역 변수의 값을 보려면 앱 작성 메뉴에서 변수를 선택합니다.
변수가 정의되고 사용되는 모든 위치를 표시하려면 전역 변수에서 선택하십시오.
변수 유형
Power Apps에는 세 가지 유형의 변수가 있습니다.
| 변수 형식 | Scope | 설명 | 설정하는 함수 |
|---|---|---|---|
| 전역 변수 | 응용 프로그램 | 전역 변수를 사용하여 숫자, 텍스트 문자열, 부울, 레코드, 테이블 또는 기타 값을 저장하고, 앱 어디에서든 참조할 수 있도록 합니다. | 설정 |
| 컨텍스트 변수 | 화면 | 컨텍스트 변수를 사용하여 다른 언어의 매개 변수와 같은 값을 화면에 전달합니다. 하나의 화면에서만 그것들을 참조합니다. |
UpdateContext Navigate |
| 컬렉션 | 응용 프로그램 | 컬렉션을 사용하여 앱의 아무 곳이나 참조하는 테이블을 보관합니다. 테이블의 내용을 변경하고 나중에 사용할 수 있도록 로컬 디바이스에 저장할 수 있습니다. |
Collect ClearCollect |
변수 생성 및 제거
변수는 Set, UpdateContext, Navigate, Collect 또는 ClearCollect 함수에 표시되면 암시적으로 만들어집니다. 변수 및 해당 형식을 선언하려면 앱의 아무 곳이나 이러한 함수에 포함하기만 하면 됩니다. 이러한 함수는 변수를 만들지 않습니다. 변수만 값으로 채웁니다. 다른 프로그래밍 도구에서처럼 변수를 명시적으로 선언하지 않으며 모든 입력은 사용에서 암시적입니다.
예를 들어 OnSelect 수식이 Set( X, 1 )과 같은 버튼 컨트롤이 있을 수 있습니다. 이 수식은 X를 숫자 유형의 변수로 설정합니다. 수식에서 X를 숫자로 사용하면 해당 변수는 귀하가 앱을 열고 버튼을 선택하기 전에 빈 값을 갖습니다. 버튼을 선택하면 X에 1이라는 값을 부여하게 됩니다.
다른 단추를 추가하고 OnSelect 속성을 Set(X, "Hello" )로 설정하면 형식(텍스트 문자열)이 이전 Set (숫자)의 형식과 일치하지 않기 때문에 오류가 발생합니다. 변수의 모든 암시적 정의는 유형과 일치해야 합니다. 다시 말하지만, 수식에서 X 를 언급했기 때문에 이러한 수식이 실제로 실행되지 않기 때문에 이 모든 일이 발생합니다.
변수를 암시적으로 설정하는 Set, UpdateContext, Navigate, Collect 또는 ClearCollect 함수를 모두 제거하여 변수를 제거합니다. 이러한 함수 없이는 변수가 존재하지 않습니다. 또한 오류가 발생하므로 변수에 대한 참조를 제거합니다.
변수 수명 및 초기 값
변수는 앱이 실행되는 동안 메모리에 유지됩니다. 앱이 닫히면 변수의 값이 손실됩니다.
Patch 또는 Collect 함수를 사용하여 변수의 내용을 데이터 원본에 저장합니다. SaveData 함수를 사용하여 로컬 디바이스의 컬렉션에 값을 저장합니다.
사용자가 앱을 열면 모든 변수는 초기 값이 비어 있는 것으로 시작합니다.
변수 읽기
변수의 이름을 사용하여 해당 값을 읽습니다. 예를 들어 다음 수식을 사용하여 변수를 정의합니다.
Set( Radius, 12 )
그런 다음 숫자를 사용하는 모든 곳에서 Radius 를 사용하고 12로 바뀝다.
Pi() * Power( Radius, 2 )
컨텍스트 변수에 전역 변수 또는 컬렉션과 동일한 이름을 지정하면 컨텍스트 변수가 우선합니다. 명확성 연산자[@Radius]를 사용하여 전역 변수 또는 컬렉션을 참조할 수 있습니다.
예약된 변수 이름
다음 변수 이름은 사용하지 마세요. 이러한 이름은 앱 속성이며 이를 사용하면 변수 이름 충돌이 발생하여 예기치 않은 앱 동작이 발생할 수 있습니다.
- ActiveScreen
- DesignHeight
- DesignWidth
- Height
- MinScreenHeight
- MinScreenWidth
- SizeBreakpoints
- StudioVersion
- TestCaseId
- 테스팅
- TestSuiteId
- 테마
- OEB
컨텍스트 변수 사용
전역 변수 대신 컨텍스트 변수를 사용하여 추가 컴퓨터를 만드는 방법을 살펴보겠습니다.
컨텍스트 변수의 작동 방식
- You implicitly establish and set context variables by using the UpdateContext 또는 Navigate 함수를 사용하여 암시적으로 컨텍스트 변수를 생성 및 설정합니다. 앱이 시작되면 각 컨텍스트 변수의 초기 값이 비어 있습니다.
- 레코드로 컨텍스트 변수를 업데이트합니다. 다른 프로그래밍 도구에서는 일반적으로 "x = 1"처럼 할당에 "="를 사용합니다. 컨텍스트 변수의 경우 { x: 1 }을 대신 사용합니다. 컨텍스트 변수를 사용하는 경우 레코드 구문 없이 해당 이름을 직접 사용하십시오.
- Navigate 함수를 사용하여 화면이 표시될 때 컨텍스트 변수를 설정할 수도 있습니다. 화면을 일종의 프로시저 또는 서브루틴으로 생각하면 이 방법은 다른 프로그래밍 도구를 전달하는 매개 변수와 같습니다.
- Navigate를 제외하고 컨텍스트 변수는 단일 화면의 컨텍스트로 제한되며, 여기에서 컨텍스트 변수의 이름을 얻습니다. 이 컨텍스트 외부에서는 사용하거나 설정할 수 없습니다.
- 컨텍스트 변수에는 문자열, 숫자, 레코드 및 테이블을 포함한 모든 값이 포함될 수 있습니다.
컨텍스트 변수를 사용하여 추가 컴퓨터를 다시 빌드합니다.
TextInput1이라는 텍스트 입력 컨트롤과 Button1 및 Button2라는 두 개의 버튼을 추가합니다.
Button1의 Text 속성을 "추가"로 설정하고, Button2의 Text 속성을"지우기"로 설정합니다.
사용자가 추가 버튼을 선택할 때마다 누계를 업데이트하려면 OnSelect 속성을 다음 수식으로 설정합니다.
UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )
이 수식은 연산자로 인해 숫자를 보유하는 컨텍스트 변수로 RunningTotal 을 + 설정합니다. 이 화면의 아무 곳이나 RunningTotal 을 참조합니다. 사용자가 앱을 열면 RunningTotal 의 초기 값이 비어 있습니다.
사용자가 처음으로 추가 단추를 선택하고 UpdateContext 가 실행되면 RunningTotal은 RunningTotal+ TextInput1 값으로 설정됩니다.
사용자가 지우기 버튼을 선택할 때마다 누계를 0으로 설정하려면 OnSelect 속성을 다음 수식으로 설정합니다.
UpdateContext( { RunningTotal: 0 } )
다시 UpdateContext 수식 UpdateContext({ RunningTotal: 0 } )와 함께 UpdateContext를 사용합니다.
레이블 컨트롤을 추가하고 Text 속성을 RunningTotal로 설정합니다.
이 수식은 자동으로 다시 계산되며, 사용자가 선택하는 버튼에 따라 변경될 때 사용자에게 RunningTotal 값을 표시합니다.
앱 미리 보기 텍스트 상자에 숫자를 입력하고 추가 단추를 몇 번 선택합니다. 준비가 되면 Esc 키를 사용하여 제작 환경으로 돌아갑니다.
한 화면에서 다른 화면으로 "컨텍스트" 또는 "매개 변수"를 전달하기 위해 화면으로 이동하는 동안 컨텍스트 변수의 값을 설정합니다. 이 기술을 시연하려면 화면을 삽입하고 버튼을 삽입한 다음 OnSelect 속성을 다음 수식으로 설정합니다.
Navigate( Screen1, None, { RunningTotal: -1000 } )
이 단추를 선택하여 Screen1을 표시하고 컨텍스트 변수 RunningTotal을 -1000으로 설정하는 동안 Alt 키를 누릅니다.
컨텍스트 변수의 값을 표시하려면 다음 중 하나를 수행하십시오.
Power Apps Studio의 프리뷰 버전을 사용하는 경우 앱 작성 메뉴에서 변수를 선택합니다.
클래식 버전의 Power Apps Studio를 사용하는 경우 파일 메뉴를 선택한 다음 왼쪽 창에서 변수 를 선택합니다.
컨텍스트 변수가 정의되고 사용되는 위치를 표시하려면 컨텍스트 변수에서 선택합니다.
컬렉션 사용
수집을 사용하여 덧셈기를 만들어 보겠습니다. 컬렉션에는 변경하기 쉬운 테이블이 있으므로 이 추가 컴퓨터는 입력할 때 각 값의 "종이 테이프"를 유지합니다.
컬렉션 작동 방식
- ClearCollect 함수를 사용하여 컬렉션을 만들고 설정합니다. 대신 Collect 함수를 사용할 수 있지만 이전 변수를 바꾸는 대신 다른 변수가 필요합니다.
- 컬렉션은 데이터 원본 및 테이블의 형식입니다. 컬렉션에서 단일 값을 얻으려면 First 함수를 사용하고 결과 레코드에서 하나의 필드를 가져옵니다.
ClearCollect에서 단일 값을 사용하는 경우 다음 예제와 같이 값 필드입니다.
First(VariableName).Value
컬렉션을 사용하여 덧셈 기계를 만드세요.
TextInput1이라는 텍스트 입력 컨트롤과 Button1 및 Button2라는 두 개의 버튼을 추가합니다.
Button1의 Text 속성을 "추가"로 설정하고, Button2의 Text 속성을"지우기"로 설정합니다.
사용자가 추가 버튼을 선택할 때마다 누계를 업데이트하려면 OnSelect 속성을 다음 수식으로 설정합니다.
Collect( PaperTape, TextInput1.Text )
이 수식이 단순히 존재하면 단일 열 텍스트 문자열 테이블을 보유하는 PaperTape가 컬렉션으로 설정됩니다. 이 앱의 아무 곳에서나 PaperTape를 참조할 수 있습니다. 사용자가 이 앱을 열 때마다 PaperTape는 빈 테이블입니다.
이 수식이 실행되면 컬렉션의 끝에 새 값을 추가합니다. 하나의 값을 추가하므로 Collect는 자동으로 이를 단일 열 테이블에 배치하고 열 이름은 나중에 확인할 수 있듯이 Value입니다.
사용자가 지우기 버튼을 선택할 때 종이 테이프를 지우려면 OnSelect 속성을 다음 수식으로 설정합니다:
Clear( PaperTape )
![Clear but1의 OnSelect 속성입니다.] 추가 컴퓨터를 실행하려면 F5 키를 선택하여 미리 보기를 열고 텍스트 입력 컨트롤에 숫자를 입력하고 단추를 선택합니다.
label.](media/working-with-variables/papertape-3.png)계산기를 실행하려면 F5 키를 눌러 미리 보기를 열고, 텍스트 입력 컨트롤에 숫자를 입력한 다음, 버튼을 선택합니다.
기본 작업 영역으로 돌아가려면 Esc를 선택합니다.
용지 테이프를 표시하려면 데이터 테이블 컨트롤을 삽입하고 **[Items](controls/properties1)를 설정합니다. 컬렉션의 값을 보려면 다음 중 하나를 수행하십시오.
Power Apps Studio의 미리 보기 버전을 사용하는 경우 앱 제작 메뉴에서 변수 를 선택한 다음 컬렉션을 선택합니다.
클래식 버전의 Power Apps Studio를 사용하는 경우 파일 메뉴에서 컬렉션을 선택합니다. 컬렉션의 값을 보려면 다음 중 하나를 수행하십시오.
Power Apps Studio의 프리뷰 버전을 사용하는 경우 앱 작성 메뉴에서 변수를 선택한 다음 컬렉션을 선택합니다.
Power Apps Studio의 클래식 버전을 사용하는 경우 파일 메뉴에서 컬렉션을 선택합니다.
컬렉션을 저장하고 얻으려면 단추 컨트롤을 두 개 더 추가하고 텍스트 속성을 로드 및 저장으로 설정합니다. 로드 버튼의 OnSelect 속성을 다음 수식으로 설정합니다.
Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )
LoadData는 저장된 값을 컬렉션의 끝에 추가하므로 먼저 컬렉션을 지워야 합니다.
저장 버튼의 OnSelect 속성을 다음 수식으로 설정합니다.
SaveData( PaperTape, "StoredPaperTape" )
F5 키를 선택하여 다시 미리 보기하고, 텍스트 입력 컨트롤에 숫자를 입력하고, 단추를 선택합니다. 저장 버튼을 선택합니다. 앱을 닫고 다시 로드하고, 로드 버튼을 선택하여 컬렉션을 다시 로드합니다.
노트
SaveData 및 LoadData 함수는 Power Apps Mobile에서 작동하지만 Power Apps Studio 또는 Power Apps용 웹 플레이어에서는 작동하지 않습니다.