다음을 통해 공유


RecordOf 및 Type 함수

적용 대상: 캔버스 앱

사용자 정의 함수 및 형식화되지 않은 값과 함께 사용할 사용자 정의 형식을 생성합니다.

중요

Description

Power Fx의 모든 함수는 매개 변수로 전달할 수 있는 값의 형식과 출력의 형식을 정의합니다. 수식을 작성할 때 유형이 확인되고 예상과 일치하지 않는 경우 오류가 표시됩니다. 유형은 또한 편집기에서 함수에 전달할 항목에 대한 좋은 옵션을 제안하고 가능한 한 빨리 오류를 감지하는 데 사용됩니다.

사용자 정의 함수를 직접 만들 때는 입력 및 출력 형식을 지정해야 합니다. 소수 또는 텍스트와 같은 간단한 형식의 경우 이러한 기본 형식이 미리 정의되어 있으므로 쉽습니다. 레코드나 테이블과 같은 더 복잡한 형식의 경우 Type 함수를 사용하여 형식을 만듭니다.

또한 Type 함수를 사용하면 형식화되지 않은 개체를 더 쉽게 사용할 수 있습니다. ParseJSON, IsTypeAsType 함수를 사용하면 형식화되지 않은 개체를 형식화된 개체로 변환할 수 있으며, 이 경우 사용 시점에 열을 개별적으로 형식화할 필요가 없습니다.

Type 함수는 TypeSpecification을 유일한 인수로 사용합니다. 가장 간단한 형식 사양은 기존 형식(예: Type( Text ))을 참조하는 것입니다. 레코드 또는 테이블에 대한 형식 사양은 리터럴 값을 사용하여 레코드 또는 테이블을 정의하는 것과 유사하며, 여기서 값은 형식 이름으로 바뀝니다. 예를 들어, {Name: "Jane"}Type( {Name: Text} )로 입력됩니다. Table 함수를 사용하는 것이 아니라, 테이블은 대괄호로 지정하며, 레코드는 하나만 제공될 수 있습니다. 예를 들어, [1,2,3]Type( [Number] )로 입력됩니다.

RecordOf 함수를 사용하여 테이블 형식에서 레코드 형식을 추출합니다. 예를 들어, Type( RecordOf( Library ) )는 라이브러리에서 단일 책의 유형을 반환합니다. 레코드 종류에서 테이블 종류를 만들려면 레코드 종류를 대괄호로 묶습니다. 예를 들어, Type( [ Book ] )은 라이브러리를 정의합니다. RecordOfType 함수 내에서만 사용할 수 있습니다.

Type 함수와 이 함수가 반환하는 유형 값은 Power Fx의 특정 위치(예: ParseJSON의 두 번째 인수)에서만 사용할 수 있습니다. 캔버스 앱에서 Type 함수는 App.Formulas에서 명명된 수식과 함께 사용할 수 있습니다.

구문

RecordOf( TableType )

  • TableType – 필수입니다. 테이블의 형식 이름입니다. 형식 사양을 허용하지 않으며 테이블에 대해 이전에 정의된 형식의 이름이어야 합니다.

Type( TypeSpecification )

  • TypeSpecification – 필수입니다. 형식 사양입니다.

Type 함수

App.Formulas에서 다음 정의를 고려하십시오.

Library = 
  [ { Title: "A Study in Scarlet", Author: "Sir Arthur Conan Doyle", Published: 1887 }, 
    { Title: "And Then There Were None", Author: "Agatha Christie", Published: 1939 },
    { Title: "The Marvelous Land of Oz", Author: "L. Frank Baum", Published: 1904 } ];

// Type definition for a single book
BookType := Type( { Title: Text, Author: Text, Published: Number } );

// Type definition for a table of books
LibraryType := Type( [ BookType ] );

실제 제목 텍스트 "A Study in Scarlet"가 유형 사양에서 유형 이름 Text로 대체되는 방식에 주목하세요. 이는 모든 텍스트 값에 대한 플레이스홀더입니다. BookType 유형의 매개 변수나 변수는 Library의 책 중 하나를 보관할 수 있는 반면, LibraryType은 전체 표를 보관할 수 있습니다. 이러한 유형을 사용하면 다음과 같은 사용자 정의 함수를 정의할 수 있습니다.

SortedBooks( books: LibraryType ): LibraryType = 
    SortByColumns( Library, Author, SortOrder.Ascending, Title, SortOrder.Ascending );

PublishedInLeapYear( book: BookType ): Boolean = 
    Mod( book.Published, 4 ) = 0 And 
    (Mod( book.Published, 100 ) <> 0 Or Mod( book.Published, 400 ) = 0);

BookType을 사용하여 책이 포함된 JSON 문자열을 구문 분석할 수도 있습니다.

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

ParseJSON의 두 번째 인수로 BookType을 사용하면 다른 Power Fx 레코드처럼 사용할 수 있는 형식화된 레코드가 생성됩니다.

RecordOf 함수

Type 함수 예제에서는 BookType으로 시작해서 이를 표를 래핑하여 LibraryType을 빌드합니다. 이러한 유형을 다음과 같이 역순으로 정의할 수 있습니다.

// Type definition for a table of books
RecordOfLibraryType := Type( [ { Title: Text, Author: Text, Published: Number } ] );

// Type definition for a single book
RecordOfBookType := Type( RecordOf( RecordOfLibraryType ) );