다음을 통해 공유


동적 값

동적 은 복잡하거나 간단한 데이터 구조를 보유할 수 있는 Power Fx의 데이터 형식입니다. 명시적으로 또는 암시적으로 런타임에 직접 사용하고 다른 데이터 형식으로 변환할 수 없습니다. 동적 값의 레코드 필드는 점 표기법을 사용하여 액세스할 수 있으며, 필드의 존재는 런타임에만 확인됩니다.

동적 값을 만드는 방법에는 두 가지가 있습니다.

  • ParseJSON 함수 사용
  • "동적" 형식을 반환하는 커넥터를 사용합니다.

비고

동적 은 이전에 UntypedObject라고 했습니다. 이름만 변경되었으므로 의미 체계는 변경되지 않습니다. 수식에 이름이 표시되는 유일한 위치는 실험적 버전의 사용자 정의 함수 및 사용자 정의 형식입니다.

간단한 형식

동적 값을 포함하는 변수의 값은 직접 사용할 수 없습니다. 항상 해당 형식 생성자를 사용하거나 AsTypeParseJSON 함수를 사용하여 특정 형식으로 변환하여 올바르게 입력해야 합니다.

다음 예제에서는 이름이 DynValue 변수의 값을 변환합니다.

Text(DynValue)
Value(DynValue)

다음 표에서는 Dynamic 을 해당 데이터 형식으로 변환하는 데이터 형식 및 해당 함수를 나열합니다.

데이터 유형 함수 Description
부울 Boolean() 동적부울로 변환할 때 기본 값은 부울 또는 자동으로 변환될 수 있는 형식(예: 문자열 "true")을 나타내야 합니다.
색상 ColorValue() 또는 RGBA() 색상은 CSS(Cascading Style Sheet) 색상 정의 표기법에서 문자열로 또는 개별 RGBA 구성 요소로 표시될 수 있습니다. DynamicColorValue() 함수를 사용하여 CSS(Cascading Style Sheet) 색 정의 문자열에서 직접 변환하거나 RGBA() 함수를 사용하여 개별 RGBA숫자에서 색으로 변환할 수 있습니다.
통화, 숫자 Value() 동적숫자로 변환할 때 기본 값은 자동으로 변환될 수 있는 숫자 또는 형식(예: 문자열 "123.456")을 나타내야 합니다.
날짜, 날짜/시간, 시간 DateValue(), TimeValue() 또는 DateTimeValue() 날짜, 시간 및 datetime은 ISO 8601 형식으로 표현될 때 동적 에서 해당 형식으로 직접 변환할 수 있습니다. 다른 형식은 먼저 Text() 함수를 사용하여 텍스트로 변환한 다음 DateValue(), TimeValue() 또는 DateTimeValue() 함수로 전달되어야 하며, 이 함수는 기본적으로 날짜와 시간을 해석하기 위해 현재 사용자 설정의 언어를 사용합니다.
GUID GUID() 기본 개체가 GUID를 나타내거나 문자열을 나타내는 경우 동적 값을 GUID로 직접 변환할 수 있습니다.
하이퍼 링크, 이미지, 미디어 Text() 이러한 데이터 형식은 텍스트 데이터 형식이며 텍스트로 변환하여 Power Fx에서 사용할 수 있습니다.
선택, 두 가지 옵션 Switch() 또는 If() 선택두 가지 옵션은 Power Fx에서 현지화된 문자열로 표시됩니다. 선택은 숫자로 지원되고 두 가지 옵션은 부울로 지원됩니다. 부울, 숫자 또는 문자열에서 선택 또는 두 가지 옵션으로의 직접적인 변환은 없지만 Switch() 또는 If() 함수를 부울, 텍스트 또는 숫자 값에 사용하여 선택 또는 두 가지 옵션 값을 올바르게 할당할 수 있습니다.
녹음 해당 없음 Dynamic에서 레코드 구조로의 직접 변환은 없지만 동적에서 개별 필드를 검색하여 새 레코드를 만들 수 있습니다.
레코드 참조 해당 없음 레코드 참조는 데이터 원본에 고유하며 Dynamic에서 의미 있는 표현이 없습니다.
테이블 Table()ForAll() 동적은 테이블로 변환할 수 있는 배열을 나타낼 수 있습니다. 이러한 개체는 레코드 배열이거나 사실상 단일 열 테이블인 값 배열일 수 있습니다. ForAll()은 완전한 형식의 레코드가 있는 테이블을 만드는 데 사용할 수 있습니다. 자세한 내용은 이 문서 아래에 있는 예시를 검토하세요.
문자 Text() 텍스트를 직접 변환할 수 있습니다. 동적 값이 숫자를 나타내는 경우 텍스트로 변환하기 전에 먼저 Value()를 사용하여 Dynamic을 숫자로 변환해야 합니다.

레코드 종류

레코드에 사용되는 일반 점 표기법을 사용하여 동적 레코드를 나타내는 변수의 필드에 액세스할 수 있습니다. 그러나 필드의 존재는 런타임까지 확인되지 않습니다. 결과적으로 IntelliSense도 사용할 수 없습니다. 필드가 존재하지 않거나 기본 null 값이 있는 경우 해당 필드에 액세스하면 Blank() 값이 생성됩니다.

레코드의 각 필드는 동적 형식이기도 하며 올바르게 입력해야 합니다. 필드는 단순 형식의 동적 레코드일 수 있습니다. 레코드인 경우 점 표기법을 연결할 수 있습니다. 체인에 필드가 없으면 Blank()가 반환됩니다.

다음 예제에서는 이름이 DynRecord 변수의 필드를 사용합니다.

Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)

필드 이름이 잘못된 식별자 이름으로 구성된 경우(예: 필드 이름이 숫자로 시작하거나 하이픈과 같은 잘못된 문자가 포함된 경우) 필드 이름을 작은 따옴표로 묶을 수 있습니다.

dynamic.'01'
dynamic.'my-field'

동적 컬럼 액세스

경우에 따라 레코드의 열 이름이 동적일 수 있습니다. ColumnNames 함수를 사용하여 레코드에서 사용할 수 있는 열 이름을 확인한 다음 Column 함수를 사용하여 명명된 열의 값을 검색합니다.

예를 들어

LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );

Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"

Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5

배열

동적 변수는 배열을 포함할 수 있습니다. 배열이 레코드 배열이거나 단순 형식의 배열일 수 있지만 Table() 함수를 사용하여 동적 배열을 테이블로 변환하면 항상 단일 열 테이블인 Dynamic이 생성됩니다. ForAll()Index()와 같은 함수는 먼저 Table()을 만들 필요가 없으므로 단일 열 Value 필드를 사용할 필요가 없습니다.

예를 들어 숫자 값() 을 포함하는 [1, 2, 3] 배열에서 두 번째 숫자를 가져오기 위해 다음 수식을 사용하여 표의 두 번째 행을 검색하고 열을 숫자로 변환할 수 있습니다.

Value( Index( UOArray, 2 ) )

DynamicTable()으로 먼저 변환된 경우 결과 단일 열 테이블의 두 번째 행은 Value 포함하는 열입니다.

Value( Index( Table( UOArray ), 2 ).Value )

Field라는 텍스트 열이 있는 레코드 배열의 경우 동일한 논리가 적용됩니다. Dynamic에 직접 액세스할 수 있거나 Table() 함수를 사용하면 단일 열 테이블인 Dynamic이 생성됩니다.

열은 FieldIndex() 함수에서 반환된 동적에서 직접 액세스할 수 있습니다.

Text( Index( UORecordArray, 2 ).Field )

Table() 함수를 사용하는 경우 먼저 단일 열 Value 열을 검색하여 Dynamic을 구한 다음 열에 액세스합니다Field.

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

레코드 배열을 유형이 지정된 테이블로 변환하려면 ForAll() 함수를 사용하고 각 개별 필드를 변환할 수 있습니다.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Dynamic이 먼저 테이블로 변환되는 경우 다시 동적의 결과 단일 열 테이블을 사용하려면 열을 사용하여 Value 필드를 가져와야 합니다.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )

형식화된 레코드 및 테이블로 변환

중요합니다

  • 동적 값과 함께 AsTypeIsType을 사용하는 것은 실험적 기능입니다.
  • 실험적 기능은 프로덕션 사용을 위한 것이 아니며 완료되지 않을 수 있습니다. 이러한 기능은 공식 릴리스 이전에 제공되므로 사용자가 조기에 액세스하고 피드백을 제공할 수 있습니다. 추가 정보: 캔버스 앱의 실험적 기능, 프리뷰 및 사용 중지된 기능 이해
  • 이 문서에서 설명하는 동작은 의 > 실험적 기능이 켜져 있는 경우에만 사용할 수 있습니다(기본적으로 꺼져 있음).
  • 여러분의 피드백은 우리에게 소중합니다. Power Apps 실험적 기능 커뮤니티 포럼에서 여러분의 의견을 들려주세요.

각 단순 값을 개별적으로 변환하는 대신 ParseJSON, IsTypeAsType 함수를 사용하여 Dynamic 을 형식화된 개체로 대량 변환할 수 있습니다. Type 함수를 사용하여 동적 구조를 형식화된 구조체에 매핑하는 형식을 만듭니다.

예를 들어, 여기서는 DateTimeValue 함수를 호출하지 않고도 JSON 문자열을 날짜 시간 값으로 해석합니다.

Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
                     Type( { Start: DateTime, End: DateTime } ) );

DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7