데이터 유형

노트

Microsoft Power Fx는 캔버스 앱 수식 언어의 새 이름입니다. 이러한 문서는 캔버스 앱에서 언어를 추출하고 다른 Microsoft Power Platform 제품과 통합하여 오픈 소스로 제공하는 과정에서 진행중인 작업입니다. 언어에 대한 소개를 위해 Microsoft Power Fx 개요로 시작하십시오.

정보는 스프레드 시트의 셀과 매우 유사한 작은 개별 값으로 앱을 통과합니다. 예를 들어 생일 필드와 기념일 필드의 데이터는 모두 연, 월, 일을 포함하는 날짜를 통과합니다. 앱은 이러한 값의 형식을 지정하고 입력을 각각에 적합한 것으로 제한하고 값을 데이터베이스와 공유하는 방법을 알고 있습니다. 생일은 기념일부터 사람마다 다르지만 시스템은 생일을 정확히 같은 방식으로 처리합니다. 이 경우 날짜데이터 유형의 예입니다.

이 문서에서는 캔버스 앱이 지원하는 데이터 유형에 대한 세부 사항을 제공합니다. 앱이 외부 데이터 원본에 연결되면 해당 원본의 각 데이터 유형이 캔버스 앱의 데이터 유형에 매핑됩니다.

데이터 형식 설명 예제
Boolean True 또는 False 값. If, Filter, 비교 없는 다른 함수에서 직접 사용될 수 있습니다. true
알파 채널을 포함한 색상 사양. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
통화 부동 소수점 숫자로 저장된 통화 값입니다. 통화 값은 통화 형식 옵션이 있는 숫자 값과 같습니다. 123
4.56
날짜 앱 사용자의 시간대에 시간이 없는 날짜입니다. Date( 2019, 5, 16 )
DateTime 앱 사용자의 시간대에 시간이 있는 날짜입니다. DateTimeValue( "May 16, 2019 1:23:09 PM" )
소수 높은 정밀도, 기본 10 연산 및 제한된 범위를 갖춘 숫자입니다. 123
Decimal( "1.2345" )
GUID Globally Unique Identifier. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
하이퍼링크 하이퍼 링크를 가진 텍스트 문자열입니다. "https://powerapps.microsoft.com"
Image Universal Resource Identifier(URI) 문자열에서 이미지(.jpeg, .png, .svg, .gif, 기타 보편적인 웹 이미지 형식). 앱 리소스로 추가된 MyImage
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
미디어 비디오 또는 오디오 녹음에 대한 URI 텍스트 문자열. 앱 리소스로 추가된 MyVideo
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
숫자 또는 실수 표준 정밀도, 기본 2 연산 및 넓은 범위를 갖춘 숫자입니다. 123
8.903e121
1.234e200
선택 항목 숫자로 뒷받침되는 옵션 집합에서의 선택. 이 데이터 유형은 지역화 가능한 텍스트 레이블을 숫자 값과 결합합니다. 앱에 레이블이 나타나고 숫자 값이 저장되어 비교에 사용됩니다. ThisItem.OrderStatus
레코드 데이터 값의 레코드. 이 복합 데이터 유형에는 이 토픽에 나열된 다른 데이터 유형의 인스턴스가 포함됩니다. 추가 정보: 테이블 작업. { 회사: "Northwind Traders",
직원: 35,
비영리: false }
레코드 참조 테이블의 레코드에 대한 참조입니다. 이러한 참조는 종종 다형성 조회와 함께 사용됩니다. 추가 정보: 참조 작업. First(Accounts).Owner
Table 레코드 테이블입니다. 모든 레코드는 동일한 데이터 유형의 필드에 대해 동일한 이름을 가져야 하며 생략된 필드는 공백으로 취급됩니다. 이 복합 데이터 유형에는 이 토픽에 나열된 다른 데이터 유형의 인스턴스가 포함됩니다. 추가 정보: 테이블 작업. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
텍스트 유니코드 문자열입니다. "Hello, World"
시간 앱 사용자의 시간대에 날짜가 없는 시간입니다. Time( 11, 23, 45 )
두 옵션 부울 값으로 뒷받침되는 두 옵션 집합에서의 선택. 이 데이터 유형은 지역화 가능한 텍스트 레이블을 부울 값과 결합합니다. 앱에 레이블이 나타나고 부울 값이 저장되어 비교에 사용됩니다. ThisItem.Taxable
무형식 개체 선언되지 않은 형식의 개체입니다. 기본 객체는 기존 형식일 수 있으며 Boolean(), Value(), Table() 등과 같은 함수를 사용하여 호환 가능한 유형으로 변환 할 수 있습니다. 자세한 내용은 무형식 개체JSON 작업을 참조하십시오. ParseJSON("{ ""Field"" : 1234 }").Field

이러한 데이터 유형 중 다수는 유사하며 텍스트로 취급되는 하이퍼링크 필드와 같이 기본 표현이 동일합니다. 추가 데이터 형식은 양식 및 기타 컨트롤에서 더 나은 기본 환경을 제공합니다.

Blank

모든 데이터 유형의 값은 공백(즉, 값이 없음)의 값을 가질 수 있습니다. "null"이라는 용어는 보통 이 개념으로 데이터베이스에서 사용됩니다.

Set 또는 Patch 함수와 함께 Blank 함수를 사용해 변수나 필드를 공백으로 설정할 수 있습니다. 예를 들어, Set( x, Blank() )는 전역 변수 x에서 어떤 값이든 삭제합니다.

IsBlank 함수를 사용해 공백 값을 테스트합니다. Coalesce 함수를 사용해 가능한 공백 값을 공백이 아닌 값으로 교체합니다.

모든 데이터 유형이 공백, 부울을 지원하므로 두 옵션의 데이터 유형에는 세 가지 가능한 값이 있습니다.

이 네 가지 데이터 유형은 모두 유니코드 텍스트 문자열에 기반합니다.

임베디드 텍스트

수식에 삽입된 텍스트 문자열은 큰 따옴표로 묶습니다. 두 개의 작은 따옴표를 함께 사용하면 텍스트 문자열에 하나의 작은따옴표를 넣을 수 있습니다. 예를 들어, Button 컨트롤의 OnSelect 속성을 다음 수식:

Notify( "Jane said ""Hello, World!""" )

버튼을 누르면 배너가 표시됩니다. 여기서 첫 번째와 마지막 큰따옴표는 생략되고(텍스트 문자열을 구분하므로) Hello, World! 주위에 반복되는 큰따옴표가 있습니다. 단일 큰따옴표로 대체됩니다.

Jane이 작성한

작은따옴표는 특수 문자를 포함하고 텍스트 문자열 내에서 특별한 의미가 없는 식별자 이름에 사용됩니다.

문자열 보간

문자열 보간을 사용하여 텍스트 문자열 내에 수식을 포함합니다. Concatenate 함수나 & 연산자를 사용하는 것보다 작업하고 출력을 시각화하는 것이 더 쉬운 경우가 많습니다.

텍스트 문자열에 달러 기호($)를 접두어로 붙이고 포함할 수식을 중괄호({})로 묶습니다. 텍스트 문자열에 중괄호({{ 또는 }})를 포함하려면 반복되는 중괄호를 사용하세요. 문자열 보간은 표준 텍스트 문자열을 사용할 수 있는 모든 곳에서 사용할 수 있습니다.

예를 들어 전역 변수 Apples가 3으로 설정되고 Bananas가 4로 설정된 다음 공식을 고려하십시오.

$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."

이 수식은 텍스트 문자열을 반환합니다. 사과 3개, 바나나 4개, 총 7개의 과일이 있습니다. 변수 사과바나나는 수학 공식 사과+바나나의 결과와 함께 중괄호를 대체하는 텍스트에 삽입됩니다. 중괄호 주위의 공백 및 기타 문자는 그대로 유지됩니다.

포함된 수식은 모든 함수 또는 연산자를 포함할 수 있습니다. 필요한 것은 수식의 결과를 텍스트 문자열로 강제 변환할 수 있다는 것입니다. 예를 들어, 이 수식은 인사말에 NickName이 제공되면 삽입하고, 그렇지 않으면 FirstName을 삽입합니다.

$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )

NickName이 "Joe"로 설정된 경우 이 수식은 Welcome Joe, 만나서 반가워요!라는 텍스트 문자열을 생성합니다. 그러나 NickNameblank이고 FirstName이 "Joseph"인 경우 이 수식은 Dear Joseph, great to meet you!를 대신 생성합니다.

문자열 보간은 포함된 수식에 표준 텍스트 문자열을 포함할 수 있습니다. 예를 들어, NickNameFirstName이 모두 제공되지 않은 경우에도 "Friend"를 대신 제공할 수 있습니다.

$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"

문자열 보간은 중첩될 수도 있습니다. 이름, 중간 이름이 인사말로 결합된 이 예를 고려하십시오. 이러한 값 중 하나 또는 두 개가 비어 있더라도 이름 부분 사이에 올바른 수의 공백이 있어야 합니다. 부분이 제공되지 않은 경우 내부 문자열 보간은 빈 문자열로 축소되고 "Friend"에 의한 Coalesce 함수로 대체됩니다.

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
처음 중간 마지막 결과
John Qunicy Doe Welcome John Quincy Doe!
John blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

개행

포함된 텍스트 문자열에는 줄 바꿈이 포함될 수 있습니다. 예를 들어 Label 컨트롤의 Text 속성을 다음과 같이 설정하는 것이 좋습니다.

"Line 1
Line 2
Line 3"

위 수식은 레이블 컨트롤에 세 줄로 표시됩니다.

1행, 2행, 3행이 있는 3개의 행을 표시하는 포함된 텍스트 문자열 및 레이블 컨트롤.

줄 바꿈은 아래와 같이 문자열 보간에서도 지원됩니다.

$"Line {1}
Line {1+1}
Line {1+1+1}"

위의 수식은 동일한 출력 결과를 나타냅니다.

1행, 2행, 3행이 있는 세 개의 라인을 표시하는 문자열 보간 공식 및 레이블 컨트롤.

이미지 및 미디어 리소스

파일 메뉴에서 이미지, 비디오 및 오디오 파일을 앱 리소스로 추가할 수 있습니다. 가져온 파일의 이름이 앱의 리소스 이름이 됩니다. 이 그래픽에서 nwindlogo로 이름이 지정된 Northwind Traders 로고가 앱에 추가되었습니다.

Northwind 리소스.

앱에서 이 리소스를 사용하려면 Image 컨트롤의 Image 속성에서 지정합니다.

Northwind 이미지.

이미지 및 기타 미디어의 URI

nwindlogo에 대한 Label 컨트롤의 Text 속성을 설정하여 마지막 예제를 조금 더 깊이 이해할 수 있습니다. 레이블은 텍스트 문자열을 보여줍니다.

Northwind 텍스트.

캔버스 앱은 클라우드에 있거나 앱 리소스로 추가된 각 이미지 또는 기타 미디어 파일을 URI 텍스트 문자열로 참조합니다.

예를 들어 이미지 컨트롤의 Image 속성은 앱 리소스뿐만 아니라 웹의 이미지(예: "https://northwindtraders.com/logo.jpg"")도 연결합니다. 예제에서와 같이 이 속성은 또한 데이터 URI 스키마를 사용하는 인라인 이미지를 허용합니다.

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"

이 URI는 두 개의 자주색 다이아몬드의 확장 버전을 표시합니다.

두 개의 다이아몬드.

이미지 컨트롤의 Image 속성을 카메라 컨트롤의 Photo 속성으로 설정했다면 Camera 컨트롤에서 가장 최근에 캡처한 이미지를 표시할 수 있습니다. 앱은 이미지를 메모리에 보관하고 카메라 컨트롤의 Photo 속성은 이미지에 대한 URI 참조를 반환합니다. 예를 들어, 사진을 찍고 카메라의 Photo 속성이 "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1"를 반환할 수 있습니다.

URI를 사용하여 데이터베이스에 저장된 이미지 또는 다른 미디어 파일을 참조합니다. 이렇게하면 앱은 실제로 필요할 때까지 실제 데이터를 검색하지 않습니다. 예를 들어, Microsoft Dataverse 테이블의 첨부 파일은 "appres://datasources/Contacts/table/..."로 반환될 수 있습니다. 카메라 예시와 같이 이미지 컨트롤의 Image 속성을 이진 데이터를 검색하는 이 참조로 설정하여 이미지를 표시할 수 있습니다.

이미지와 같은 미디어 데이터 유형을 데이터베이스에 저장하면 앱은 URI 참조가 아닌 실제 이미지 또는 미디어 데이터를 보냅니다.

크기 제한

텍스트 문자열 및 URI로서 이러한 데이터 유형에는 길이에 대한 사전 설정 제한이 없습니다.

이러한 데이터 형식이 참조하는 이진 데이터에는 미리 설정된 크기 제한이 없습니다. 예를 들어, 카메라 컨트롤을 통해 캡처된 이미지는 이제 "appres://..."으로 참조되며 디바이스의 카메라가 요구하는 것만큼 크고 고해상도일 수 있습니다. 미디어 파일의 해상도, 프레임 속도 및 기타 속성은 데이터 유형에 의해 제한되지 않지만 미디어를 재생 및 캡처하기 위한 특정 컨트롤에는 고유한 제한이 있을 수 있습니다.

그러나 모든 데이터 크기는 앱에서 사용 가능한 메모리 양에 따라 다릅니다. 데스크톱 컴퓨터에서 실행되는 브라우저는 일반적으로 100MB 이상의 데이터를 지원합니다. 그러나 휴대 전화와 같은 디바이스에서 사용 가능한 메모리 양은 일반적으로 30-70MB 범위에서 훨씬 낮을 수 있습니다. 앱이 이러한 제한 내에서 실행되는지 확인하려면 실행해야 하는 모든 디바이스에서 일반적인 시나리오를 테스트하십시오.

가장 좋은 방법은 필요한 만큼만 데이터를 메모리에 보관하는 것입니다. 가능한 빨리 데이터베이스에 이미지를 업로드하고 앱 사용자가 요청한 경우에만 이미지를 다운로드합니다.

숫자

노트

Power Apps는 현재 실수만 지원하며 모든 숫자의 유형입니다. 소수 지원이 곧 추가될 예정입니다.

Power Fx는 소수실수(동의어 숫자통화 포함)의 두 종류의 숫자를 지원합니다.

소수는 대부분의 비즈니스 계산에 가장 적합합니다. 10진법으로 숫자를 정확하게 표현할 수 있습니다. 즉, 0.1이 정확하게 표현될 수 있으며 계산 중에 반올림 오류가 발생하지 않습니다. 범위는 최대 1028, 최대 28자리 정밀도로 비즈니스 요구 사항에 맞게 충분히 넓습니다. 소수는 대부분의 Power Fx 호스트에 대한 기본 숫자 데이터 유형으로, 간단히 2*2를 쓰는 경우에 사용됩니다.

실수는 과학 계산에 가장 적합합니다. 훨씬 더 넓은 범위(최대 10308)의 숫자를 나타낼 수 있습니다. 정밀도는 소수점 이하 15자리로 제한되며 수학은 2진법을 기반으로 하므로 일부 일반적인 소수 값을 정확하게 나타낼 수 없습니다. 실수는 성능이 더 높으며 이것이 중요한 요소이고 정밀도가 중요하지 않은 경우 선호됩니다.

소수 수

소수 데이터 형식은 .NET 소수 데이터 형식을 가장 자주 사용합니다. SQL Serer에서 실행되는 Dataverse 수식 열과 같은 일부 호스트는 SQL Server 소수 데이터 형식을 사용합니다.

소수는 학교에서 배운 방식대로 10진수를 사용하여 수학을 수행합니다. 이는 2진수 수학(실수에서 사용됨)을 사용할 때 누적될 수 있는 아주 작은 차이로 인한 반올림 오류를 피하는 데 매우 중요합니다.

범위는 79,228,162,514,264,337,593,543,950,335(양수)에서 79,228,162,514,264,337,593,543,950,335(음수)입니다. 소수 구분 기호는 이러한 숫자 내의 어느 위치에나 배치할 수 있으며 최대 28자리의 정밀도를 제공하면서도 여전히 정확하게 표시됩니다. 예를 들어 79,228,162,514,264.337593543950335는 7.9228162514264337593543950335처럼 정확하게 표현될 수 있습니다.

부동 소수점 숫자

숫자 또는 통화라고도 하는 실수 데이터 형식은 IEEE 754 배 정밀도 부동 소수점 표준을 사용합니다. 이 표준은 –1.79769 x 10308 에서 1.79769 x 10308까지 작동할 수있는 매우 넓은 범위의 숫자를 제공합니다. 표현할 수있는 가장 작은 값은 5 x 10–324입니다.

실수는 –9,007,199,254,740,991(–(253 – 1)) 및 9,007,199,254,740,991(253 – 1) 사이의 정수를 정확히 나타낼 수 있습니다. 이 범위는 데이터베이스가 일반적으로 사용하는 32 비트(또는 4 바이트) 정수 데이터 유형보다 큽니다. 그러나 캔버스 앱은 64 비트(또는 8 바이트) 정수 데이터 유형을 나타낼 수 없습니다. 텍스트 필드에 숫자를 저장하거나 계산된 열을 사용하여 텍스트 필드에 숫자의 복사본을 만들어서 캔버스 앱의 Text 데이터 유형에 맵핑됩니다. 이러한 방식으로 이러한 값을 유지, 표시 및 입력하고 값을 비교하여 값이 같은지 여부를 판별할 수 있습니다. 그러나 이 형식으로는 숫자 계산을 수행할 수 없습니다.

부동 소수점 산술은 근사치이므로 많은 문서화된 예에서 예기치 않은 결과가 발생할 수 있습니다. 55 / 100 * 100 수식이 정확히 55를 반환하고 (55 / 100 * 100) - 55 수식이 정확히 0을 반환하길 예상할 수도 있습니다. 그러나 후자의 공식은 매우 작지만 0은 아닌 7.1054 x 10–15을 반환합니다. 이 작은 차이는 일반적으로 문제를 일으키지 않으며 결과를 표시할 때 앱이 이를 반올림합니다. 그러나 작은 차이는 후속 계산에서 복잡해질 수 있으며 잘못된 답변을 제공하는 것으로 보입니다.

데이터베이스 시스템은 종종 소수를 사용하여 통화를 저장하고 계산을 수행합니다. 이 계산은 더 작은 범위이지만 정밀도를 더 잘 제어합니다. 기본적으로 캔버스 앱은 통화를 부동 소수점 값 안팎으로 매핑합니다. 따라서 결과는 기본 10 진수 데이터 유형에서 수행된 계산과 다를 수 있습니다. 이러한 유형의 불일치로 인해 문제가 발생하면 이 섹션에서 이전에 설명한 큰 정수를 취급할 때와 같이 Text와 같은 값으로 작업할 수 있습니다.

기본값 및 변환

노트

Power Apps는 현재 실수만 지원하며 모든 숫자의 유형입니다. 소수 지원이 곧 추가될 예정입니다.

대부분의 Power Fx 호스트는 기본적으로 소수를 사용합니다. 이는 다음 사항에 영향을 미칩니다.

  • 수식의 리터럴 숫자. 숫자 1.234소수 값으로 해석됩니다. 예를 들어, 수식은 1.234 * 21.2342소수로 해석하고 소수 결과를 반환합니다.
  • Value 함수. Value( "1.234" )소수 값을 반환합니다. 예를 들어, 수식 Value( "1.234" ) * 2Value 함수는 텍스트 문자열 "1.234"의 콘텐츠를 소수로 해석합니다.

실수 값으로 작업하기 위해서는 Float 함수가 사용됩니다. 위의 예를 확장하면 Float( 1.234 )소수1.234실수로 변환됩니다. 실수Value을 대체하여 Float( "1.234" )와 같은 부동 소수점 숫자가 포함된 문자열을 실수 값으로 변환하는 데 사용할 수도 있습니다. 이는 숫자가 소수로 표시될 수 없는 경우에 필요합니다.

요약:

사용 소수 실수
수식의 리터럴 숫자 1.234 Float( 1.234 )
Float( "1.234" )
텍스트 문자열에서 변환 Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
숫자 유형 간 변환 Decimal( float ) Float( decimal )
텍스트 문자열로 변환 Text( decimal ) Text( float )

숫자 유형 혼합

실수소수 값을 자유롭게 혼합할 수 있습니다. 혼합하면 범위가 더 넓어지기 때문에 소수 값이 실수 값으로 변환됩니다. 이로 인해 정밀도가 손실될 수 있으므로 두 가지를 불필요하게 혼합하지 않는 것이 중요합니다. 실수는 기본 리터럴 데이터 형식이고 대부분의 숫자 함수는 형식을 유지하므로 원하지 않고 실수로 이동하는 것을 방지하는 것이 상대적으로 쉽습니다.

예를 들어, Power Platform CLI를 설치한 후 pac power-fx repl을 사용하여 다음 계산을 고려해 보십시오. 두 숫자 모두 소수이므로 계산은 소수로 수행되고 결과는 전체 정밀도를 유지합니다.

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

대신 두 번째 피연산자가 실수로 변경되면 전체 계산은 실수로 수행되고 작은 소수 부분은 손실됩니다.

>> 1.0000000000000000000000000001 * Float(2)
2

날짜, 시간, Datetime

표준 시간대

날짜/시간 값은 다음 범주에 속합니다.

  • 로컬 사용자: 이 값들은 UTC(협정 세계시)에 저장되지만 앱 사용자의 시간대는 앱이 이러한 값을 표시하는 방법과 앱 사용자가 이를 지정하는 방법에 영향을 줍니다. 예를 들어, 캐나다에 있는 사용자에게는 일본에 있는 사용자와 같은 순간이 다르게 나타납니다.
  • 표준 시간대 독립: 앱은 이러한 값을 동일한 방식으로 표시하며 앱 사용자는 시간대와 상관없이 동일한 방식으로 값을 지정합니다. 예를 들어, 캐나다에 있는 사용자와 일본에 있는 사용자에게 같게 나타납니다. 앱이 다른 시간대에서 실행될 것으로 기대하지 않는 앱 제작자는 전체적으로 더 단순한 이 값을 사용합니다.

이 테이블은 몇 가지 예를 보여줍니다.

날짜/시간 유형 데이터베이스에 저장된 값 UTC에서 서쪽으로 7시간 동안 표시된 값 UTC에서 동쪽으로 4시간 동안 표시된 값
사용자 현지 시간 Sunday,May19,2019
4:00 AM
Saturday,May18,2019
9:00 PM
Sunday,May19,2019
8:00 AM
표준 시간대 독립 Sunday,May19,2019
4:00 AM
Sunday,May19,2019
4:00 AM
Sunday,May19,2019
4:00 AM

사용자 현지 날짜/시간에 대해 캔버스 앱은 브라우저 또는 디바이스의 시간대를 사용하지만 모델 중심 앱은 Dataverse의 사용자 설정을 사용합니다 . 이러한 설정은 일반적으로 일치하지만 설정이 다르면 결과가 달라집니다.

DateAddTimeZoneInformation 함수를 사용해 현지 시간을 UTC로 변환하고 되돌립니다. 이러한 함수에 대해서는 설명서 끝의 예제를 참조하십시오.

동등한 숫자

캔버스 앱은 사용자 현지 시간이든 UTC의 표준 시간대 독립이든 모든 날짜/시간 값을 가지고 계산합니다. 앱은 값을 표시할 때와 앱 사용자가 이를 지정할 때 앱 사용자의 시간대를 기준으로 값을 변환합니다.

캔버스 앱이 데이터 원본의 시간대 독립 값을 읽거나 이 값을 데이터 원본에 쓸 때 앱이 자동적으로 값을 앱 사용자의 표준 시간대에 맞게 조정합니다. 그런 다음 앱은 앱의 다른 모든 날짜/시간 값과 일치하는 값을 UTC 값으로 처리합니다. 이 조정으로 인해 원래의 시간대 독립 값은 앱이 앱 사용자 시간대의 UTC 값을 조정할 때 나타납니다.

날짜/시간 값에 대한 숫자 값에 액세스하는 Value 함수를 사용하여 이 동작을 보다 자세히 관찰할 수 있습니다. 이 함수는 날짜/시간 값을 1970년 1월 1일 00:00:00.000 UTC 이후의 밀리초 수로 반환합니다.

모든 날짜/시간 값은 UTC로 유지되므로 또 Date 함수가 UTC 날짜를 반환하므로 Value( Date( 1970, 1, 1 ) ) 수식은 세계 대부분의 지역에서 0을 반환하지 않습니다. 예를 들어 이 수식은 UTC에서 8시간 오프셋된 시간대에서 28,800,000을 반환합니다. 이 숫자는 8시간의 밀리초 수를 나타냅니다.

위의 예제:

날짜/시간 유형 데이터베이스에 저장된 값 UTC에서 서쪽으로 7시간 동안 표시된 값 Value 함수 반환
사용자 현지 시간 Sunday,May19,2019
4:00 AM
Saturday,May18,2019
9:00 PM
1,558,238,400,000
(Sunday,May19,2019
4:00 AM UTC)
표준 시간대 독립 Sunday,May19,2019
4:00 AM
Sunday,May19,2019
4:00 AM
1,558,263,600,000
(Sunday,May19,2019
11:00 AM UTC)

유닉스 시간 변환

유닉스 시간은 1월 1일 (1970 00:00:00 UTC) 이후의 초 수를 반영합니다. 캔버스 앱은 초 대신 밀리초를 사용하므로 1,000을 곱하거나 나누면 둘 사이를 변환할 수 있습니다.

예를 들어 유닉스 시간은 2001년 9월 9일 01:46:40 UTC 1,000,000,000로 표시됩니다. 캔버스 앱에서 해당 날짜/시간 값을 표시하려면 해당 숫자에 1,000을 곱하여 밀리초로 변환한 다음 Text 함수에서 사용합니다. Text( 1000000000 * 1000, DateTimeFormat.UTC ) 수식은 문자열 2001-09-09T01:46:40.000Z를 반환합니다.

UTC에서 -7 시간 오프셋되는 표준 시간대에서 DateTimeFormat.LongDateTime24 형식을 사용한다면 함수는 Saturday, September 8, 2001 18:46:40를 반환합니다. 이 결과는 DateTime 값을 현지 시간대를 기준으로 정확하게 보여줍니다.

유닉스 시간으로 변환하려면 Value의 결과를 1,000으로 나눕니다.
RoundDown( Value( UnixTime ) / 1000, 0 )

자세한 계산 또는 Power Apps 내의 표시를 위해 Date 값에서 유닉스 시간이 필요하다면 이 수식을 사용합니다.
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server는 Datetime, Datetime2 및 기타 날짜/시간 데이터 유형을 가지며 이는 시간대 오프셋을 포함하지 않으며 현재 시간대를 나타내지 않습니다. 캔버스 앱은 이러한 값이 UTC로 저장되어 있다고 간주하고 사용자 현지 시간으로 취급합니다. 값이 표준 시간대 독립인 경우 TimeZoneOffset 함수를 사용해 UTC 변환을 합니다.

캔버스 앱은 앱의 내부 UTC 표시로 값을 변환할 때 Datetimeoffset 필드에서 포함된 표준 시간대 정보를 사용합니다. 앱은 데이터를 쓸 때 항상 UTC를 시간대(제로 시간대 오프셋)로 사용합니다.

캔버스 앱은 SQL Server의 Time 데이터 유형의 값을 ISO 8601 기간 형식에서 텍스트 문자열로 읽고 씁니다. 예를 들어, 이 문자열 형식을 구문 분석하고 Time 함수를 사용해 문자열 "PT2H1M39S"Time 값으로 변환합니다.

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)

날짜 및 시간 정보 혼합

Date, Time, DateTime은 이름이 다르지만 날짜와 시간에 대한 정보는 모두 동일합니다.

Date 값은 일반적으로 자정인 시간 정보를 포함할 수 있습니다. Time 값은 일반적으로 1970년 1월 1일인 날짜 정보를 전달할 수 있습니다. Dataverse 는 시간 정보를 Date Only 필드에 저장하지만 기본적으로 날짜 정보만 보여줍니다. 마찬가지로 캔버스 앱은 기본 형식과 컨트롤을 결정하기 위해 이러한 데이터 유형을 구분하기도 합니다.

시간대 및 기타 변환으로 인해 결과가 혼동될 수 있으므로 날짜 및 시간 값을 직접 더하거나 빼지 않는 것이 좋습니다. Value 함수를 사용해 날짜/시간 값을 밀리초로 먼저 변환하고 사용자의 표준 시간대를 고려하거나 DateAddDateDiff 함수를 사용해 이러한 값을 더하거나 뺍니다

선택 항목 및 예/아니요

선택 항목 및 두 가지 옵션 데이터 유형은 앱 사용자가 선택할 수 있는 두 가지 이상의 선택 사항을 제공합니다. 예를 들어, 주문 상태 선택에서는 신규, 배송됨, 청구됨종료됨을 선택할 수 있습니다. 두 옵션 데이터 유형은 두 가지 선택만 제공합니다.

이 두 데이터 유형 모두 레이블을 텍스트 문자열 컨텍스트로 표시합니다. 예를 들어, 레이블 컨트롤은 컨트롤의 Text 속성이 해당 선택 항목을 참조하는 수식으로 설정된 경우 주문 상태 옵션 중 하나를 표시합니다. 옵션 레이블은 다른 위치에 있는 앱 사용자를 위해 현지화될 수 있습니다.

앱 사용자가 옵션을 선택하고 해당 변경 사항을 저장하면 앱은 데이터를 데이터베이스에 전송합니다. 데이터베이스는 언어와 무관한 표현으로 해당 데이터를 저장합니다. 선택 항목의 옵션은 숫자로 전송되어 저장되고, 두 가지 옵션 데이터 유형의 옵션은 부울 값으로 전송되어 저장됩니다.

레이블은 표시 용입니다. 레이블은 언어에 따라 다르므로 레이블과 직접 비교할 수 없습니다. 대신 각 선택 항목에는 기본 숫자 또는 부울 값으로 작동하는 열거가 있습니다. 예를 들어 이 수식을 사용할 수 없습니다.

If( ThisItem.OrderStatus = "Active", ...

그러나 이 수식은 사용할 수 있습니다.

If( ThisItem.OrderStatus = OrderStatus.Active, ...

전역 선택(공유할 테이블)의 경우 옵션 집합 열거의 이름은 전역 선택의 이름과 일치합니다. 로컬 선택(테이블 범위)의 경우 이름에 테이블 이름이 포함될 수 있습니다. 이 동작은 여러 테이블에 동일한 이름을 가진 선택 항목이 있는 경우 충돌을 방지합니다. 예를 들어 계정 테이블에 주문 상태 선택 항목이 있고 그 이름은 주문 상태(계정)일 수 있습니다. 해당 이름은 하나 이상의 공백과 괄호를 포함하므로 수식에서 참조할 경우 작은 따옴표로 묶어야 합니다.

또한 두 옵션 값은 부울 값으로 동작할 수도 있습니다. 예를 들어, 이름이 두 개인 옵션 값 TaxStatusTaxableNon-Taxable 레이블을 가지고 이는 각각 truefalse에 해당합니다. 예를 들어 이 수식을 사용할 수 있습니다.

If( ThisItem.Taxable = TaxStatus.Taxable, ...

또한 동일하게 이 수식을 사용할 수 있습니다.

If( ThisItem.Taxable, ...