PowerApps 테이블 및 레코드에 대한 이해Understand tables and records in PowerApps

Microsoft Excel, SharePoint, SQL Server 및 레코드와 테이블에 데이터를 저장하는 다른 여러 원본의 정보에 액세스하는 앱을 만들 수 있습니다.You can create an app that accesses information in Microsoft Excel, SharePoint, SQL Server, and several other sources that store data in records and tables. 이러한 종류의 데이터로 가장 효과적으로 작업하려면 이러한 구조의 기반이 되는 개념을 검토합니다.To work most effectively with this kind of data, review the concepts that underlie these structures.

  • 레코드는 사람, 장소 또는 사물에 대한 하나 이상의 정보 범주를 포함합니다.A record contains one or more categories of information about a person, a place, or a thing. 예를 들어 레코드에는 단일 고객의 이름, 이메일 주소 및 전화 번호가 포함될 수 있습니다.For example, a record might contain the name, the email address, and the phone number of a single customer. 다른 도구에서는 레코드를 "행" 또는 "항목"이라고 합니다.Other tools refer to a record as a "row" or an "item."
  • 테이블은 동일한 범주의 정보가 포함된 하나 이상의 레코드를 포함합니다.A table holds one or more records that contain the same categories of information. 예를 들어 테이블에는 50명 고객의 이름, 이메일 주소 및 전화 번호가 포함될 수 있습니다.For example, a table might contain the names, the email addresses, and the phone numbers of 50 customers.

앱에서 수식을 사용하여 레코드와 테이블을 생성, 업데이트 및 조작합니다.In your app, you'll use formulas to create, update, and manipulate records and tables. 아마 확장된 테이블인 외부 데이터 원본에서도 데이터를 읽고 쓸 것입니다.You'll probably read and write data to an external data source, which is an extended table. 또한 컬렉션라고 하는 하나 이상의 내부 테이블을 만들 수도 있습니다.In addition, you might create one or more internal tables, which are called collections.

Excel 수식에서 하나 이상의 셀 참조를 인수로 사용하는 것처럼 테이블 이름을 인수로 사용하여 다양한 수식을 작성할 수 있습니다.You can build a variety of formulas that take the name of a table as an argument, just as a formula in Excel takes one or more cell references as arguments. PowerApps 수식 중 일부는 지정한 다른 인수를 반영하는 테이블을 반환합니다.Some formulas in PowerApps return a table that reflects the other arguments that you specify. 예를 들어 다음을 수행하는 수식을 만들 수 있습니다.For example, you might create a formula:

  • Patch 함수에 대한 여러 인수 중 하나로 테이블을 지정하여 테이블의 레코드를 업데이트합니다.to update a record in a table by specifying that table as one of multiple arguments for the Patch function
  • AddColumns, DropColumns 또는 RenameColumns 함수에 대한 인수로 테이블을 지정하여 해당 테이블의 열을 추가, 제거 및 이름 변경합니다.to add, remove, and rename columns in a table by specifying that table as an argument for the AddColumns, DropColumns, or RenameColumns function. 이러한 함수 중 어느 것도 원래 테이블을 수정하지는 않지만,None of those functions modifies the original table. 지정한 다른 인수에 따라 다른 테이블을 반환합니다.Instead, the function returns another table based on the other arguments that you specify.

테이블 요소Elements of a table

레코드Records

각 레코드에는 사람, 장소 또는 사물에 대한 정보 범주가 하나 이상 포함됩니다.Each record contains at least one category of information for a person, a place, or a thing. 위의 예제에서는 각 제품(초콜릿, 음료수)에 대한 레코드와 각 정보 범주에 대한 열(Price, Quantity on HandQuantity on Order)을 표시합니다.The example above shows a record for each product (Chocolate, Bread, and Water) and a column for each category of information (Price, Quantity on Hand, and Quantity on Order).

수식에서는 테이블의 컨텍스트 외부에 중괄호를 사용하여 레코드를 단독으로 참조할 수 있습니다.In a formula, you can refer to a record by itself, outside of a table's context, by using curly braces. 예를 들어 { Name: "딸기", Price: 7.99 } 레코드는 테이블과 관련이 없습니다.For example, this record { Name: "Strawberries", Price: 7.99 } isn't associated with a table.

필드Fields

필드는 레코드의 개별 정보 요소입니다.A field is an individual piece of information in a record. 이러한 종류의 필드를 특정 레코드에 대한 열의 값으로 시각화할 수 있습니다.You can visualize this sort of field as a value in a column for a particular record.

컨트롤과 마찬가지로 레코드에 .Just as with a control, you refer to a field of a record by using the . 연산자를 사용하여 레코드의 필드를 참조합니다.operator on the record. 예를 들어 First(Products).NameProducts 테이블의 첫 번째 레코드에 대한 Name 필드를 반환합니다.For example, First(Products).Name returns the Name field for the first record in the Products table.

필드는 GroupBy 함수의 예제와 같이 다른 레코드 또는 테이블을 포함할 수 있습니다.A field can contain another record or table, as the example for the GroupBy function shows. 많은 수준의 레코드와 테이블을 원하는 만큼 중첩할 수 있습니다.You can nest as many levels of records and tables as you want.

Columns

열은 테이블에 있는 하나 이상의 레코드에 대해 동일한 필드를 참조합니다.A column refers to the same field for one or more records in a table. 위의 예제에서 각 제품에는 가격 필드가 있으며, 해당 가격은 모든 제품에 대해 동일한 열에 있습니다.In the above example, each product has a price field, and that price is in the same column for all products. 위의 테이블에는 4개의 열이 있으며, 위쪽에서 가로로 표시됩니다.The above table has four columns, shown horizontally across the top:

  • NameName
  • PricePrice
  • Quantity on HandQuantity on Hand
  • Quantity on OrderQuantity on Order

열의 이름은 해당 열의 필드를 반영합니다.The column's name reflects the fields in that column.

열 내의 모든 값은 동일한 데이터 형식입니다.All values within a column are of the same data type. 위의 예제에서 "Quantity on Hand"는 항상 숫자를 포함하며, 한 레코드에서 "12 단위"와 같은 문자열은 포함할 수 없습니다.In the above example, the "Quantity on Hand" column always contains a number and can't contain a string, such as "12 units," for one record. 모든 필드의 값이 '공백'일 수도 있습니다.The value of any field may also be blank.

다른 도구에서 열을 "필드"로 참조했을 수도 있습니다.You may have referred to columns as "fields" in other tools.

참고: 공백이 있는 열 이름이 포함된 SharePoint 및 Excel 데이터 원본의 경우 PowerApps는 공백을 "_x0020_"으로 바꿉니다.Note: For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". 예를 들어 SharePoint 또는 Excel의 "Column Name"은 데이터 레이아웃에 표시되거나 수식에 사용될 때 PowerApps에 "Column_x0020_Name"으로 나타납니다.For example, "Column Name" in SharePoint or Excel will appear as "Column_x0020_Name" in PowerApps when displayed in the data layout or used in a formula.

테이블Table

테이블은 하나 이상의 레코드로 구성되며, 각 레코드에는 레코드 간에 일관된 이름을 갖는 여러 필드가 있습니다.A table comprises one or more records, each with multiple fields that have consistent names across the records.

데이터 원본 또는 컬렉션에 저장된 모든 테이블에는 테이블을 참조하고 테이블을 인수로 사용하는 함수로 전달하는 데 사용되는 이름이 있습니다.Any table that's stored in a data source or a collection has a name, which you use to refer to the table and pass it to functions that take tables as arguments. 또한 테이블은 함수 또는 수식의 결과일 수도 있습니다.Tables can also be the result of a function or a formula.

다음 예제와 같이 중괄호로 표현된 레코드 집합이 포함된 Table 함수를 사용하여 수식에서 테이블을 표현할 수 있습니다.As in the following example, you can express a table in a formula by using the Table function with a set of records, which you express in curly braces:

Table( { Value: "딸기" }, { Value: "바닐라" } )Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

대괄호가 있는 단일 열 테이블도 정의할 수 있습니다.You can also define a single-column table with square brackets. 위에서 작성한 방법과 동일합니다.An equivalent way to write the above:

[ "딸기", "바닐라" ][ "Strawberry", "Vanilla" ]

테이블 수식Table formulas

Excel 및 PowerApps에서는 수식을 사용하여 숫자와 텍스트 문자열을 비슷한 방식으로 조작합니다.In Excel and PowerApps, you use formulas to manipulate numbers and strings of text in similar ways:

  • Excel의 경우 A1 셀에 42와 같은 값을 입력한 다음, 다른 셀에 A1+2와 같은 수식을 입력하여 44라는 값을 표시합니다.In Excel, type a value, such as 42, in cell A1, and then type a formula, such as A1+2, in another cell to show the value of 44.
  • PowerApps의 경우 Slider1Default 속성을 42로 설정하고, 레이블의 Text 속성을 Slider1.Value + 2로 설정하여 44라는 값을 표시합니다.In PowerApps, set the Default property of Slider1 to 42, and set the Text property of a label to Slider1.Value + 2 to show the value of 44.

두 경우 모두 인수 값(예: A1 셀의 숫자 또는 Slider1의 값)을 변경하면 계산된 값이 자동으로 변경됩니다.In both cases, the calculated value changes automatically if you change the values of the arguments (for example, the number in cell A1 or the value of Slider1).

마찬가지로 수식을 사용하여 테이블과 레코드의 데이터에 액세스하고 조작할 수 있습니다.Similarly, you can use formulas to access and manipulate data in tables and records. Min(Catalog, Price)와 같은 일부 수식에서는 Catalog 테이블의 Price 열에 있는 가장 낮은 값을 표시하기 위해 테이블 이름을 인수로 사용할 수 있습니다.You can use names of tables as arguments in some formulas, such as Min(Catalog, Price) to show the lowest value in the Price column of the Catalog table. RenameColumns(Catalog, "Price", "Cost")와 같은 다른 수식은 전체 테이블을 반환 값으로 사용하여 Catalog 테이블의 모든 레코드를 반환하지만 Price 열의 이름을 Cost로 변경합니다.Other formulas provide whole tables as return values, such as RenameColumns(Catalog, "Price", "Cost"), which returns all the records from the Catalog table but changes the name of the Price column to Cost.

숫자와 마찬가지로 테이블과 레코드를 포함한 수식은 기본 테이블 또는 레코드가 변경되면 자동으로 다시 계산됩니다.Just as with numbers, formulas that involve tables and records are automatically recalculated as the underlying table or record changes. Catalog 테이블의 제품 원가가 이전 최소값 아래로 낮아지면 Min 수식의 반환 값이 이러한 변경과 일치하도록 자동으로 변경됩니다.If the cost of a product in the Catalog table is lowered below the previous minimum, the return value of the Min formula will automatically change to match it.

몇 가지 간단한 예제를 살펴보겠습니다.Let's walk through some simple examples.

  1. 텍스트 갤러리 컨트롤을 추가하고, Items 속성을 테이블 이름으로 설정합니다.Add a Text gallery control, and set its Items property to the name of a table.

    기본적으로 갤러리에는 TextualGallerySample 테이블의 자리 표시자 텍스트가 표시됩니다.By default, the gallery shows placeholder text from a table named TextualGallerySample. 갤러리의 Items 속성이 자동으로 해당 테이블로 설정됩니다.The Items property of the gallery is automatically set to that table.

    참고: 일부 컨트롤은 이해를 돕기 위해 다시 정렬되고 확대되었습니다.Note: Some controls have been rearranged and enlarged for illustration purposes.

  2. Items 속성을 테이블 이름으로 설정하는 대신 다음 예제와 같이 테이블 이름을 인수로 포함하는 수식으로 설정합니다.Instead of setting the Items property to the name of a table, set it to a formula that includes the name of the table as an argument, as in this example:
    Sort(TextualGallerySample, Heading, Descending) Sort(TextualGallerySample, Heading, Descending)

    이 수식은 테이블 이름을 첫 번째 인수로 사용하고, 테이블의 열 이름을 두 번째 인수로 사용하는 Sort 함수를 통합합니다.This formula incorporates the Sort function, which takes the name of a table as its first argument and the name of a column in that table as its second argument. 또한 이 함수는 데이터를 내림차순으로 정렬하도록 규정하는 선택적인 세 번째 인수를 지원합니다.The function also supports an optional third argument, which stipulates that you want to sort the data in descending order.

  3. Items 속성을 다음 예제와 같이 이전 단계의 수식을 인수로 사용하고 테이블을 반환하는 수식으로 설정합니다.Set the Items property to a formula that takes the formula from the previous step as an argument and returns a table, as in this example:
    FirstN(Sort(TextualGallerySample, Heading, Descending), 2) FirstN(Sort(TextualGallerySample, Heading, Descending), 2)

    이 수식에서는 FirstN 함수를 사용하여 테이블에 있는 특정 수의 레코드를 표시합니다.In this formula, you use the FirstN function to show a particular number of records in a table. Sort 함수를 FirstN의 첫 번째 인수로, 숫자(이 경우 2)를 두 번째 인수로 사용하여 표시할 레코드 수를 지정합니다.You use the Sort function as the first argument to FirstN and a number (in this case, 2) as the second argument, which specifies how many records to show.

    전체 수식은 TextualGallerySample 테이블에서 Heading 열 기준 내림차순으로 정렬된 처음 두 레코드가 포함된 테이블을 반환합니다.The entire formula returns a table that contains the first two records of the TextualGallerySample table, sorted by the Heading column in descending order.

Table 함수 및 컨트롤 속성Table functions and control properties

대부분의 PowerApps 함수는 테이블 이름을 인수로 사용하고, 동일한 데이터가 포함된 두 번째 테이블을 만들고, 다른 인수를 기반으로 하여 새 테이블을 조작한 다음, 결과를 반환합니다.Many functions in PowerApps take the name of a table as an argument, create a second table that contains the same data, manipulate the new table based the other arguments, and then return the result. 이러한 함수는 데이터 원본인 경우에도 원래 테이블을 수정하지 않습니다.These functions don't modify the original table, even if it's a data source.

  • Sort, Filter - 레코드를 정렬하고 필터링합니다.Sort, Filter - Sorts and filters records.
  • FirstN, LastN - 테이블의 처음 N 또는 마지막 N 레코드를 반환합니다.FirstN, LastN - Returns the first N or last N records of the table.
  • Abs, Sqrt, Round, RoundUp, RoundDown - 단일 열 테이블의 각 레코드에 대한 산술 연산을 수행하여 결과의 단일 열 테이블을 만듭니다.Abs, Sqrt, Round, RoundUp, RoundDown - Arithmetic operations on each record of a single-column table, resulting in a single-column table of results.
  • Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - 단일 열 테이블의 각 레코드에 대한 문자열 조작을 수행하여 문자열의 단일 열 테이블을 만듭니다.Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - String manipulations on each record of a single-column table, resulting in a single-column table of strings.
  • Len - 문자열 열의 경우 각 문자열의 길이가 포함된 단일 열 테이블을 반환합니다.Len - For a column of strings, returns a single-column table that contains the length of each string.
  • Concatenate - 문자열의 여러 열을 연결하여 문자열의 단일 열 테이블을 만듭니다.Concatenate - Concatenates multiple columns of strings, resulting in a single-column table of strings.
  • AddColumns, DropColumns, RenameColumns, ShowColumns - 테이블에 대한 열 조작을 수행하여 다른 열이 포함된 새 테이블을 만듭니다.AddColumns, DropColumns, RenameColumns, ShowColumns - Column manipulation of the table, resulting in a new table with different columns.
  • Distinct - 중복 레코드를 제거합니다.Distinct - Removes duplicates records.
  • Shuffle - 임의의 순서로 레코드를 섞습니다.Shuffle - Shuffles records into a random order.
  • HashTags - 문자열의 해시 태그를 검색합니다.HashTags - Searches for hashtags in a string.
  • Errors - 데이터 원본으로 작업할 때 오류 정보를 제공합니다.Errors - Provides error information when you work with a data source.

함수에서 단일 열을 인수로 사용해야 하는 경우에도 여러 열이 포함된 테이블에서 함수를 실행할 수 있습니다.You can run a function on a table that contains multiple columns, even if the function requires a single column as an argument. 다중 열 테이블에서 단일 열을 추출하려면 다음 예제와 같이 사용하려는 함수의 인수로 ShowColumns 함수를 인수로 사용합니다.To extract a single column from a multi-column table, use the ShowColumns function as an argument for the function that you want to use, as in this example:
Lower( ShowColumns( Products, "Name" ) )Lower( ShowColumns( Products, "Name" ) )

이 수식은 Products 테이블에 있는 Name 열의 모든 데이터를 포함하지만 대문자를 소문자로 변환한 단일 열 테이블을 만듭니다.This formula creates a single-column table that contains all the data from the Name column of the Products table but converts any uppercase letters to lowercase letters. AddColumns, RenameColumns 또는 DropColumns 함수의 인수로 테이블을 지정하면 원하는 테이블을 완전히 다시 만들 수 있습니다.If you specify a table as an argument for the AddColumns, RenameColumns, or DropColumns function, you can completely reshape that table however you want.

이러한 함수 중 하나의 인수로 데이터 원본을 지정하면 해당 데이터 원본의 레코드가 수정되고 일반적으로 데이터 원본의 새 값이 테이블로 반환됩니다.If you specify a data source as an argument for one of these functions, it will modify the records of that data source and, in general, return the data source's new value as a table.

  • Collect, Clear, ClearCollect - 컬렉션을 만들거나 지우거나 추가합니다.Collect, Clear, ClearCollect - Creates, clears, and adds to a collection.
  • Update, UpdateIf - 지정한 하나 이상의 기준과 일치하는 레코드를 업데이트합니다.Update, UpdateIf - Updates records that match one or more criteria that you specify.
  • Remove, RemoveIf - 지정한 하나 이상의 기준과 일치하는 레코드를 삭제합니다.Remove, RemoveIf - Deletes records that match one or more criteria that you specify.

다음 컨트롤에는 테이블인 속성이 있습니다.The following controls have properties that are tables:

  • Items - 갤러리 및 목록 상자에 적용됩니다.Items - Applies to galleries and list boxes. 갤러리에 표시할 테이블입니다.Table to display in the gallery.
  • SelectedItems - 목록 상자에 적용됩니다.SelectedItems - Applies to list boxes. 사용자가 선택한 항목의 테이블입니다.Table of items that the user has selected.

레코드 수식Record formulas

개별 레코드에 대한 데이터를 계산하고, 개별 레코드를 인수로 사용하고, 개별 레코드를 반환 값으로 제공하는 수식을 작성할 수도 있습니다.You can also build a formula that calculates data for an individual record, takes an individual record as an argument, and provides an individual record as a return value. 위의 갤러리 예제로 돌아가서 Gallery1.Selected 속성을 사용하여 사용자가 갤러리에서 선택한 레코드의 정보를 표시해 보겠습니다.Returning to our gallery example above, let's use the Gallery1.Selected property to display information from whatever record the user selects in that gallery.

  1. 단추 하나를 추가하고 이 수식에 OnSelect 속성을 설정합니다.Add a button, and set its OnSelect property to this formula:
    Collect( SelectedRecord, Gallery1.Selected )Collect( SelectedRecord, Gallery1.Selected )
  2. 단추가 선택되지 않은 경우 단추를 클릭하여 선택한 다음 다시 클릭하여 수식을 실행합니다.If the button isn't selected, click it to select it, and then click it again to run the formula.
  3. 파일 메뉴에서 컬렉션을 선택합니다.In the File menu, select Collections.

이 수식은 갤러리에서 현재 선택한 레코드의 데이터뿐만 아니라 해당 갤러리의 각 컨트롤도 포함한 레코드를 반환합니다.This formula returns a record that includes not only the data from the record that's currently selected in the gallery but also each control in that gallery. 예를 들어 원래 테이블의 Body 열과 일치하는 Body 열 및 해당 열의 데이터가 표시되는 레이블을 나타내는 Body1 열이 레코드에 모두 포함됩니다.For example, the record contains both a Body column, which matches the Body column in the original table, and a Body1 column, which represents the label that shows the data from that column. Body1 열에서 테이블 아이콘을 선택하여 해당 데이터를 드릴합니다.Select the table icon in the Body1 column to drill into that data.

이제 선택한 레코드가 있으므로 . 연산자를 사용하여 해당 레코드에서 개별 필드를 추출할 수Now that you have the selected record, you can extract individual fields from it with the . 있습니다.operator.

  1. Esc 키를 눌러 기본 작업 영역으로 돌아간 다음 갤러리 아래에 레이블을 추가합니다.Press Esc to return to the default workspace, and then add a label below the gallery.
  2. 레이블의 Text 속성을 다음 수식으로 설정합니다.Set the Text property of the label to this formula:
    Gallery.Selected.HeadingGallery.Selected.Heading

레코드인 Selected 속성을 가져와서 Heading 속성을 추출했습니다.You've taken the Selected property, which is a record, and extracted the Heading property from it.

또한 레코드를 명명된 관련 값에 대한 범용 컨테이너로 사용할 수도 있습니다.You can also use a record as a general-purpose container for related named values.

  • UpdateContextNavigate 함수 주위에 수식을 작성하면 레코드를 사용하여 업데이트하려는 컨텍스트 변수를 수집합니다.If you build a formula around the UpdateContext and Navigate functions, use a record to gather the context variables that you want to update.
  • 편집 양식 컨트롤에 Updates 속성을 사용하여 양식에서 사용자가 변경한 내용을 수집합니다.Use the Updates property on an Edit form control to gather the changes that have been made by the user in a form.
  • Patch 함수를 사용하여 데이터 원본을 업데이트하고 레코드도 병합합니다.Use the Patch function to update a data source but also to merge records.

이 경우 레코드는 테이블의 일부가 되지 않습니다.In these cases, the record was never a part of a table.

레코드 함수 및 컨트롤 속성Record functions and control properties

레코드를 반환하는 함수는 다음과 같습니다.Functions that return records:

  • FirstN, LastN - 테이블의 첫 번째 또는 마지막 레코드 또는 레코드를 반환합니다.FirstN, LastN - Returns the first or last record or records of the table.
  • Lookup - 테이블에서 하나 이상의 기준과 일치하는 첫 번째 레코드를 반환합니다.Lookup - Returns the first record from a table that matches one or more criteria.
  • Patch - 데이터 원본을 업데이트하거나 레코드를 병합합니다.Patch - Updates a data source or merges records.
  • Defaults - 데이터 원본에 대한 기본값을 반환합니다.Defaults - Returns the default values for a data source.

레코드를 반환하는 속성은 다음과 같습니다.Properties that return records:

  • Selected - 갤러리 및 목록 상자에 적용됩니다.Selected - Applies to galleries and list boxes. 현재 선택한 레코드를 반환합니다.Returns the currently selected record.
  • Updates - 갤러리에 적용됩니다.Updates - Applies to galleries. 사용자가 데이터 입력 양식에서 수행한 모든 변경 내용을 함께 가져옵니다.Pulls together all the changes that a user makes in a data-entry form.
  • Update - 텍스트 입력 컨트롤 및 슬라이더와 같은 입력 컨트롤에 적용됩니다.Update - Applies to input controls such as text-input controls and sliders. 갤러리에서 함께 가져올 수 있도록 개별 속성을 설정합니다.Sets up individual properties for the gallery to pull together.

레코드 범위Record scope

일부 함수는 테이블의 모든 레코드에서 수식을 개별적으로 평가하여 작동합니다.Some functions operate by evaluating a formula across all the records of a table individually. 수식 결과는 다음과 같이 다양한 방법으로 사용됩니다.The formula's result is used in various ways:

  • Filter, Lookup - 수식에서 레코드가 출력에 포함되어야 하는지 여부를 결정합니다.Filter, Lookup - Formula determines if the record should be included in the output.
  • Sort - 수식에서 레코드를 정렬할 값을 제공합니다.Sort - Formula provides the value to sort the records on.
  • Concat - 수식에서 함께 연결할 문자열을 결정합니다.Concat - Formula determines the strings to concatenate together.
  • ForAll - 수식에서 잠재적으로 부작용이 있는 모든 값을 반환할 수 있습니다.ForAll - Formula can return any value, potentially with a side effect.
  • Distinct - 수식에서 중복된 레코드를 식별하는 데 사용되는 값을 반환합니다.Distinct - Formula returns a value, used to identify duplicate records.
  • AddColumns - 수식에서 추가된 필드의 값을 제공합니다.AddColumns - Formula provides the value of the added field.
  • Average, Max, Min, Sum, StdevP, VarP - 수식에서 집계할 값을 제공합니다.Average, Max, Min, Sum, StdevP, VarP - Formula provides the value to aggregate.

이러한 수식 내에서는 처리되는 레코드의 필드를 참조할 수 있습니다.Inside these formulas, you can reference the fields of the record being processed. 이러한 각 함수는 수식이 평가되는 "레코드 범위"를 만들어 레코드의 필드를 최상위 식별자로 사용할 수 있습니다.Each of these functions creates a "record scope" in which the formula is evaluated, where the fields of the record are available as top-level identifiers. 또한 앱 전체에서 컨트롤 속성과 다른 값을 참조할 수도 있습니다.You can also reference control properties and other values from throughout your app.

예를 들어 다음 Products 테이블을 가져옵니다.For example, take a table of Products:

이러한 제품 중 하나라도 사용 가능한 것 보다 더 많은 요청이 있었는지 확인하려면 다음을 수행합니다.To determine if any of any of these products had more requested than is available:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Filter의 첫 번째 인수는 작업할 레코드의 테이블이고, 두 번째 인수는 수식입니다.The first argument to Filter is the table of records to operate on, and the second argument is a formula. Filter는 각 레코드의 필드를 사용할 수 있는 이 수식을 평가할 레코드 범위를 만듭니다. 이 경우에는 Product, Quantity RequestedQuantity Available입니다.Filter creates a record scope for evaluating this formula in which the fields of each record are available, in this case Product, Quantity Requested, and Quantity Available. 비교 결과는 각 레코드가 함수의 결과에 포함되어야 하는지 여부를 결정합니다.The result of the comparison determines if each record should be included in the result of the function:

이 예제에 추가하여 주문할 각 제품의 양을 계산할 수 있습니다.Adding to this example, we can calculate how much of each product to order:

AddColumns( Filter( Products, '' > 'Quantity Available' ), "Quantity on Order", 'Quantity Requested' - 'Quantity Available' )AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' )

여기서는 계산 열을 결과에 추가합니다.Here we are adding a calculated column to the result. AddColumns에는 요청된 항목과 사용 가능한 항목 간의 차이를 계산하는 데 사용하는 자체의 레코드 범위가 있습니다.AddColumns has its own record scope that it uses to calculate the difference between what has been requested and what is available.

마지막으로 결과 테이블을 원하는 열만으로 줄일 수 있습니다.Finally, we can reduce the result table to just the columns that we desire:

ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity on Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity on Order" )ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )

위의 예제에서 일부 항목에는 큰따옴표(")를 사용하고 다른 항목에는 작은따옴표(')를 사용했습니다.Note that in the above, we used double quotes (") in some places and single quotes (') in other places. 개체 이름에 공백이 포함된 개체(예: 필드 또는 테이블)의 값을 참조할 때는 작은따옴표가 필요합니다.Single quotes are required when referencing the value of an object, such as a field or table, in which the name of the object contains a space. 큰따옴표는 AddColumns의 경우와 같이 개체의 값을 참조하지 않고 해당 개체에 대해 언급하는 경우, 특히 개체가 아직 없는 상황에서 사용됩니다.Double quotes are used when we are not referencing the value of an object but instead talking about it, especially in situations in which the object does not yet exist, as in the case of AddColumns.

명확성Disambiguation

레코드 범위에 추가된 필드 이름은 앱의 다른 위치에서 동일한 이름을 재정의합니다.Field names added with the record scope override the same names from elsewhere in the app. 이 경우 @ 명확성 연산자를 사용하여 레코드 범위 외부의 값에 계속 액세스할 수 있습니다.When this happens, you can still access values from outside the record scope with the @ disambiguation operator:

  • 중첩된 레코드 범위의 값에 액세스하려면 Table[@FieldName] 패턴을 사용하여 작업 중인 테이블의 이름에 @ 연산자를 사용합니다.To access values from nested record scopes, use the @ operator with the name of the table being operated upon using the pattern Table[@FieldName].
  • 데이터 원본, 컬렉션 및 컨텍스트 변수와 같은 전역 값에 액세스하려면 [@ObjectName](테이블 지정 없음) 패턴을 사용합니다.To access global values, such as data sources, collections, and context variables, use the pattern [@ObjectName] (without a table designation).

작업 중인 테이블이 Filter( table, ... )과 같은 식이면 명확성 연산자를 사용할 수 없습니다.If the table being operated upon is an expression, such as Filter( table, ... ), then the disambiguation operator cannot be used. 가장 안쪽의 레코드 범위만 명확성 연산자를 사용하지 않고 이 테이블 식의 필드에 액세스할 수 있습니다.Only the innermost record scope can access fields from this table expression, by not using the disambiguation operator.

예를 들어 X 컬렉션이 있다고 가정해 보겠습니다.For example, imagine having a collection X:

ClearCollect( X, [1, 2] )를 사용하여 이 컬렉션을 만들 수 있습니다.You can create this collection with ClearCollect( X, [1, 2] ).

그리고 또 다른 Y 컬렉션이 있습니다.And another collection Y:

ClearCollect( Y, ["A", "B"] )를 사용하여 이 컬렉션을 만들 수 있습니다.You can create this collection with ClearCollect( Y, ["A", "B"] ).

또한 UpdateContext( {Value: "!"} ) 수식을 사용하여 Value라는 컨텍스트 변수를 정의합니다.In addition, define a context variable named Value with this formula: UpdateContext( {Value: "!"} )

이제 모두 정리해 보겠습니다.Let's put it all together. 이 컨텍스트에서 수식은 다음과 같습니다.In this context, the following formula:

  • Ungroup( ForAll( X, ForAll( Y, Y[@Value] & Text( X[@Value] ) & [@Value] ) ), "Value" )Ungroup( ForAll( X, ForAll( Y, Y[@Value] & Text( X[@Value] ) & [@Value] ) ), "Value" )

다음 테이블이 생성됩니다.produces this table:

여기서는 무슨 일이 있나요?What is going on here? 가장 바깥쪽의 ForAll 함수는 X에 대한 레코드 범위를 정의하므로 처리되는 각 레코드의 Value 필드에 대한 액세스를 허용합니다.The outermost ForAll function defines a record scope for X, allowing access to the Value field of each record as it is processed. 단순히 Value 단어를 사용하거나 X[@Value]를 사용하여 액세스할 수 있습니다.It can be accessed by simply using the word Value or by using X[@Value].

가장 안쪽의 ForAll 함수는 Y에 대한 다른 레코드 범위를 정의합니다. 이 테이블에는 Value 필드가 정의되어 있으므로 여기서 Value를 사용하면, Y 레코드의 필드를 참조하고 더 이상 X의 필드는 참조하지 않습니다. 여기서 XValue 필드에 액세스하려면 명확성 연산자와 함께 더 긴 버전을 사용해야 합니다.The innermost ForAll function defines another record scope for Y. Since this table also has a Value field defined, using Value here refers to the field in Y's record and no longer the one from X. Here, to access X's Value field, we must use the longer version with the disambiguation operator.

Y가 가장 안쪽의 레코드 범위이므로 이 테이블의 필드에 액세스하는 데 명확성이 필요하지 않습니다. 따라서 다음 수식을 사용하여 동일한 결과를 얻을 수 있습니다.Since Y is the innermost record scope, accessing fields of this table do not require disambiguation, allowing us to use this formula with the same result:

  • Ungroup( ForAll( X, ForAll( Y, Value & Text( X[@Value] ) & [@Value] ) ), "Value" )Ungroup( ForAll( X, ForAll( Y, Value & Text( X[@Value] ) & [@Value] ) ), "Value" )

모든 ForAll 레코드 범위는 전역 범위를 재정의합니다.All the ForAll record scopes override the global scope. 정의한 Value 컨텍스트 변수는 명확성 연산자가 없이 이름으로 사용할 수 없습니다.The Value context variable we defined is not available by name without the disambiguation operator. 이 값에 액세스하려면 [@Value]을 사용해야 합니다.To access this value we must use [@Value].

중첩된 ForAll 함수에서 중첩된 결과 테이블을 생성하므로 Ungroup은 결과를 평면화합니다.Ungroup flattens the result, since nested ForAll functions will result in a nested result table.

인라인 구문Inline syntax

레코드Records

레코드는 명명된 필드 값이 포함된 중괄호를 사용하여 표현합니다.You express records by using curly braces that contain named field values. 예를 들어 다음 수식을 사용하여 이 항목의 시작 부분에 테이블의 첫 번째 레코드를 표현할 수 있습니다.For example, you can express the first record in the table at the start of this topic by using this formula:

{ Name: "초콜릿", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

다음 예제와 같이 다른 수식 내에 수식을 포함할 수도 있습니다.You can also embed formulas within other formulas, as this example shows:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

다음 예제와 같이 중괄호를 중첩하여 레코드를 중첩할 수 있습니다.You can nest records by nesting curly braces, as this example shows:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

공백이나 콜론과 같은 특수 문자가 포함된 각각의 열 이름은 작은따옴표로 묶습니다.Enclose each column name that contains a special character, such as a space or a colon, in single quotes. 열 이름 내에서 작은따옴표를 사용하려면 작은따옴표를 두 번 지정합니다.To use a single quote within a column name, double it.

Price 열의 값에는 $ 기호와 같은 통화 기호가 포함되지 않습니다.Note that the value in the Price column doesn't include a currency symbol, such as a dollar sign. 값이 표시될 때 해당 형식이 적용됩니다.That formatting will be applied when the value is displayed.

테이블Tables

Table 함수와 레코드 집합을 사용하여 테이블을 만들 수 있습니다.You can create a table by using the Table function and a set of records. 다음 수식을 사용하여 이 항목의 시작 부분에 테이블을 표현할 수 있습니다.You can express the table at the start of this topic by using this formula:

Table( { Name: "초콜릿", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
            { Name: "빵", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
            { Name: "음료수", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } )
Table( { Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
            { Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
            { Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } )

테이블을 중첩할 수도 있습니다.You can also nest tables:

Table( { Name: "초콜릿",
            'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                        { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) } )
Table( { Name: "Chocolate",
            'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                        { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) } )

Value 테이블Value tables

대괄호 안에 값을 지정하여 단일 열 테이블을 만들 수 있습니다.You can create single-column tables by specifying values in square brackets. 결과 테이블에는 Value라는 단일 열이 있습니다.The resulting table has a single column, named Value.

예를 들어 [ 1, 2, 3, 4 ]Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )와 동일하며 다음 테이블을 반환합니다.For example, [ 1, 2, 3, 4 ] is equivalent to Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) and returns this table: