PowerApps 데이터 원본에 대한 이해Understand data sources in PowerApps

대부분의 PowerApps 앱에서는 데이터 원본이라는 클라우드 서비스에 저장된 외부 정보를 사용합니다.Most PowerApps apps use external information stored in cloud services called Data Sources. 일반적인 예로 비즈니스용 OneDrive에 저장된 Excel 파일의 테이블이 있습니다.A common example is a table in an Excel file stored in OneDrive for Business. 앱에서 연결을 사용하여 이러한 데이터 원본에 액세스합니다.Apps access these data sources by using Connections.

이 문서에서는 다양한 종류의 데이터 원본 및 테이블 데이터 원본을 사용하는 방법에 대해 설명합니다.This article discusses the different kinds of data sources, and how to work with table data sources.

데이터 원본에 대한 기본 읽기 및 쓰기를 수행하는 앱을 만드는 것은 쉽습니다.It is easy to create an app that does basic reading and writing to a data source. 하지만 때로는 데이터가 앱 내/외부로 흐르는 방식을 더 자세히 제어하려는 경우가 있습니다.But sometimes you want more control over how data flows in and out of your app. 이 문서에서는 Patch, DataSourceInfo, ValidateErrors 함수에서 더 많은 컨트롤을 제공하는 방법에 대해 설명합니다.This article describes how the Patch, DataSourceInfo, Validate, and Errors functions provide more control.

데이터 원본의 종류Kinds of data sources

데이터 원본은 클라우드 서비스에 연결되거나 앱에 로컬로 연결될 수 있습니다.Data sources can be connected to a cloud service, or they can be local to an app.

연결된 데이터 원본Connected data sources

가장 일반적인 데이터 원본은 정보를 검색하고 저장하는 데 사용할 수 있는 테이블입니다.The most common data sources are tables, which you can use to retrieve and store information. 데이터 원본에 대한 연결을 사용하여 비즈니스용 OneDrive, DropBox, SQL Server 등과 같은 클라우드 서비스에 저장할 수 있는 Microsoft Excel 통합 문서, SharePoint 목록, SQL 테이블 및 다른 많은 형식의 데이터를 읽고 쓸 수 있습니다.You can use connections to data sources to read and write data in Microsoft Excel workbooks, SharePoint lists, SQL tables, and many other formats, which can be stored in cloud services like OneDrive for Business, DropBox, SQL Server, etc.

테이블 이외의 데이터 원본으로 전자 메일, 캘린더, Twitter 및 알림이 포함되지만, 이 문서에서는 이러한 다른 종류의 데이터 원본은 설명하지 않습니다.Data sources other than tables include email, calendars, Twitter, and notifications, but this article doesn't discuss these other kinds of data sources.

로컬 데이터 원본Local data sources

갤러리, 표시 양식편집 양식 컨트롤을 사용하면 데이터 원본의 데이터를 읽고 쓰는 앱을 쉽게 만들 수 있습니다.Using the Gallery, Display form, and Edit form controls, it is easy to create an app that reads and writes data from a data source. 시작하려면 데이터 양식 이해 문서를 참조하세요.To get started, read the article Understand data forms.

데이터에서 앱을 만들도록 PowerApps에 요청할 때 이러한 컨트롤이 사용됩니다.When you ask PowerApps to create an app from data, these controls are used. 내부적으로 앱은 내부 테이블을 사용하여 데이터 원본에서 제공되는 데이터를 저장하고 조작합니다.Behind the scenes, the app uses an internal table to store and manipulate the data that comes from the data source.

특별한 종류의 데이터 원본으로 컬렉션이 있습니다. 이는 클라우드의 서비스에 대한 연결로 지원되지 않고 로컬로 앱에 연결되므로, 동일한 사용자 또는 다른 사용자의 장치 간에 정보를 공유할 수 없습니다.A special kind of data source is the Collection, which is local to the app and not backed by a connection to a service in the cloud, so the information can not be shared across devices for the same user or between users. 컬렉션은 로드하고 로컬에 저장할 수 있습니다.Collections can be loaded and saved locally.

테이블의 종류Kinds of tables

PowerApps 앱의 내부에 있는 테이블은 숫자 또는 문자열이 값일 때와 마찬가지로 고정된 값입니다.Tables that are internal to a PowerApps app are fixed values, just as a number or a string is a value. 내부 테이블은 어디에도 저장되지 않고 앱의 메모리에만 존재합니다.Internal tables aren't stored anywhere, they just exist in your app's memory. 테이블의 구조와 데이터는 직접 수정할 수 없습니다.You can't directly modify the structure and data of a table. 대신 수식을 통해 새 테이블을 만들 수 있습니다. 이 수식을 사용하여 원본 테이블의 수정된 복사본을 만듭니다.What you can do instead is to create a new table through a formula: you use that formula to make a modified copy of the original table.

외부 테이블은 나중의 검색 및 공유를 위해 데이터 원본에 저장됩니다.External tables are stored in a data source for later retrieval and sharing. PowerApps는 저장된 데이터를 읽고 쓰는 "연결"을 제공합니다.PowerApps provides "connections" to read and write stored data. 연결 내에서 여러 정보 테이블에 액세스할 수 있습니다.Within a connection, you can access multiple tables of information. 앱에서 사용할 테이블을 선택하고 각 테이블은 별도의 '데이터 원본'이 됩니다.You'll select which tables to use in your app, and each will become a separate data source.

자세한 내용은 테이블 작업에서 내부 테이블에 대해 자세히 설명하지만, 클라우드 서비스에 상주하는 외부 테이블에도 적용할 수 있습니다.To learn more, Working with tables goes into more detail about internal tables, but it is also applicable to external tables residing in a cloud service.

테이블 작업Working with tables

PowerApps 내부 테이블을 사용하는 것과 동일한 방식으로 테이블 데이터 원본을 사용할 수 있습니다.You can use table data sources the same way that you use an internal PowerApps table. 내부 테이블과 마찬가지로 각 데이터 원본에는 레코드, 및 수식에 사용할 수 있는 속성이 있습니다.Just like an internal table, each data source has records, columns, and properties that you can use in formulas. 또한,In addition:

  • 데이터 원본은 연결의 기본 테이블과 동일한 열 이름 및 데이터 형식을 갖습니다.The data source has the same column names and data types as the underlying table in the connection.

    참고: 공백이 있는 열 이름이 포함된 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.

  • 데이터 원본은 앱이 로드될 때 서비스에서 자동으로 로드됩니다.The data source is loaded from the service automatically when the app is loaded. Refresh 함수를 사용하여 강제로 데이터를 새로 고칠 수 있습니다.You can force the data to refresh by using the Refresh function.
  • 사용자가 앱을 실행하면 레코드를 생성, 수정 및 삭제하고, 변경 내용을 서비스의 기본 테이블로 다시 푸시할 수 있습니다.As users run an app, they can create, modify, and delete records and push those changes back to the underlying table in the service.
    • 레코드는 PatchCollect 함수로 만들 수 있습니다.Records can be created with the Patch and Collect functions.
    • 레코드는 Patch, UpdateUpdateIf 함수로 수정할 수 있습니다.Records can be modified with the Patch, Update, and UpdateIf functions.
    • 레코드는 RemoveRemoveIf 함수로 제거할 수 있습니다.Records can be removed with the Remove and RemoveIf functions.
    • Errors 함수를 통해 데이터 원본으로 작업할 때 발생하는 오류를 사용할 수 있습니다.Errors when working with a data source are available through the Errors function.
  • DataSourceInfo, DefaultsValidate 함수는 사용자 환경을 최적화하는 데 사용할 수 있는 데이터 원본에 대한 정보를 제공합니다.The DataSourceInfo, Defaults, and Validate functions provide information about the data source that you can use to optimize the user experience.

데이터 원본 만들기Creating data sources

PowerApps는 연결된 데이터 원본을 만들거나 구조를 수정하는 데 사용할 수 없습니다. 이는 데이터 원본이 이미 어딘가의 서비스에 존재해야 하기 때문입니다.PowerApps can't be used to create a connected data source, or modify its structure; the data source must already exist in a service somewhere. 예를 들어 OneDrive에 저장된 Excel 통합 문서에 테이블을 만들려면 먼저 OneDrive에서 Excel Online을 사용하여 통합 문서를 만듭니다.For example, to create a table in an Excel workbook stored on OneDrive, you first use Excel Online on OneDrive to create a workbook. 다음으로 앱에서 이 문서에 대한 연결을 만듭니다.Next you create a connection to it from your app.

그러나 컬렉션 데이터 원본은 앱 내에서 "만들고 수정할 수 있지만" 일시적인 것입니다.However, collection data sources can be created and modified inside an app, but are only temporary.

하나 이상의 레코드 표시Display one or more records

위의 다이어그램에서는 앱에서 데이터 원본의 정보를 읽을 때 수행되는 정보 흐름을 보여 줍니다. The diagram above shows the flow of information when an app reads the information in a data source:

  • 이 정보는 저장소 서비스(이 경우 Office 365 사이트의 SharePoint 목록)를 통해 저장되고 공유됩니다.The information is stored and shared through a storage service (in this case, a SharePoint list of an Office 365 site).
  • 연결을 사용하면 앱에서 이 정보를 사용할 수 있습니다.A connection makes this information available to the app. 연결은 사용자의 인증을 통해 정보에 액세스합니다.The connection takes care of authentication of the user to access the information.
  • 앱이 시작되거나 Refresh 함수를 누르면 정보가 로컬에서 사용하기 위해 정보를 연결에서 앱의 데이터 원본으로 가져옵니다.When the app is started or the Refresh function is pressed, information is drawn from the connection into a data source in the app for local use.
  • 수식은 정보를 읽고 사용자에게 표시될 수 있는 컨트롤에 정보를 공개하는 데 사용됩니다.Formulas are used to read the information and expose it in controls that the user can see. 화면의 갤러리를 사용하고 Items 속성을 데이터 원본에 연결하여(Gallery.Items = DataSource) 데이터 원본의 레코드를 표시할 수 있습니다.You can display the records of a data source by using a gallery on a screen and wiring the Items property to the data source: Gallery.Items = DataSource. 컨트롤의 Default 속성을 사용하여 갤러리 내의 컨트롤을 갤러리에 연결합니다.You wire controls within the gallery, to the gallery, using the controls' Default property.
  • 데이터 원본도 테이블입니다.The data source is also a table. 따라서 데이터 원본 전체를 사용하기 전에 Filter, Sort, AddColumns 및 기타 함수를 사용하여 데이터 원본을 구체화하고 보강합니다.So you can use Filter, Sort, AddColumns, and other functions to refine and augment the data source before using it as a whole. 또한 Lookup, First, Last 및 기타 함수를 사용하여 개별 레코드로 작업할 수 있습니다.You can also use the Lookup, First, Last, and other functions to work with individual records.

레코드 수정Modify a record

이전 섹션에서는 데이터 원본을 읽는 방법을 알아보았습니다.In the prededing section, you saw how to read a data source. 위의 다이어그램에 있는 화살표는 한 가지 방법입니다.Note that the arrows in the diagram above are one way. 데이터 원본에 대한 변경 내용은 데이터가 검색된 동일한 수식을 통해 다시 푸시되지 않습니다.Changes to a data source aren't pushed back through the same formulas in which the data was retrieved. 대신 새 수식이 사용됩니다.Instead, new formulas are used. 종종 다른 화면이, 특히 모바일 장치에서 레코드 검색보다는 레코드 편집에 사용됩니다.Often a different screen is used for editing a record than for browsing records, especially on a mobile device.

데이터 원본의 기존 레코드를 수정하려면 원래의 데이터 원본에서 레코드를 가져와야 합니다.Note that, to modify an existing record of a data source, the record must have originally come from the data source. 레코드는 갤러리, 컨텍스트 변수 및 임의 개수의 수식을 통해 이동할 수 있지만 해당 원본은 데이터 원본에서 다시 추적 가능해야 합니다.The record may have traveled through a gallery, a context variable, and any number of formulas, but its origin should be traceable back to the data source. 이는 추가 정보가 고유하게 식별되는 레코드와 함께 이동함에 따라 레코드를 올바르게 수정해야 하므로 중요합니다.This is important because additional information travels with the record that uniquely identifies it, ensuring that you modify the correct record.

위의 다이어그램에서는 데이터 원본을 업데이트하는 정보의 흐름을 보여 줍니다. The diagram above shows the flow of information to update a data source:

  • 편집 양식 컨트롤은 텍스트 입력 컨트롤 또는 슬라이더와 같은 사용자 입력 컨트롤로 구성된 입력 카드에 대한 컨테이너를 제공합니다.An Edit form control provides a container for input cards, which are made up of user input controls such as a text-input control or a slider. DataSourceItem 속성은 편집할 레코드를 식별하는 데 사용됩니다.The DataSource and Item properties are used to identify the record to edit.
  • 각 입력 카드에는 일반적으로 Default 속성이 있으며, 이 속성은 대개 양식의 ThisItem 레코드 필드로 설정됩니다.Each input card has a Default property, which is usually set to the field of the form's ThisItem record. 그러면 입력 카드 내의 컨트롤이 Default에서 입력 값을 가져옵니다.The controls within the input card will then take their input values from Default. 일반적으로 이 속성은 수정할 필요가 없습니다.Normally you do not need to modify this.
  • 각 입력 카드는 Update 속성을 노출합니다.Each input card exposes an Update property. 이 속성은 사용자 입력을 레코드의 특정 필드에 매핑하여 데이터 원본에 다시 씁니다.This property maps the user's input to a specific field of the record for writing back to the data source. 일반적으로 이 속성은 수정할 필요가 없습니다.Normally you do not need to modify this.
  • 화면의 단추 또는 이미지 컨트롤을 사용하여 레코드 변경 내용을 저장할 수 있습니다.A button or an image control on the screen enables the user to save changes to the record. 컨트롤의 OnSelect 수식은 SubmitForm 함수를 호출하여 이 작업을 수행합니다.The OnSelect formula of the control calls the SubmitForm function to do this work. SubmitForm은 카드의 Update 속성을 모두 읽고 이를 사용하여 데이터 원본에 쓰기 저장합니다.SubmitForm reads all the Update properties of the cards and uses this to write back to the data source.
  • 때로는 문제가 있을 수 있습니다.Sometimes there will be issues. 네트워크 연결이 중단되거나 앱에서 인식하지 못하는 서비스에서 유효성 검사가 수행될 수 있습니다.A network connection may be down, or a validation check is made by the service that the app didn't know about. 양식 컨트롤의 ErrorErrorKind 속성을 통해 이 정보를 사용할 수 있으므로 해당 정보가 사용자에게 표시될 수 있습니다.The Error and ErrorKind properties of the form control makes this information available, so you can display it to the user.

프로세스에 대해 더 자세히 제어하려면 PatchErrors 함수를 사용할 수도 있습니다.For more fine grained control over the process, you can also use the Patch and Errors function. 편집 양식 컨트롤은 Updates 속성을 노출하므로 양식의 필드 값을 읽을 수 있습니다.The Edit form control exposes an Updates property so that you can read the values of the fields within the form. 또한 이 속성을 사용하여 PatchSubmitForm 함수를 완전히 무시하고 연결에서 사용자 지정 커넥터를 호출할 수도 있습니다.You can also use this property to call a custom connector on a connection, completely bypassing the Patch and SubmitForm functions.

유효성 검사Validation

레코드를 변경하기 전에 앱에서 변경 내용을 적용할 수 있는지 확인해야 합니다.Before making a change to a record, the app should do what it can to make sure the change will be acceptable. 여기에는 두 가지 이유가 있습니다.There are two reasons for this:

  • 사용자에 대한 즉각적인 피드백.Immediate feedback to the user. 문제를 해결하기 위한 가장 적합한 시기는 문제가 발생할 때, 즉 사용자의 마음 속에 선명하게 있을 때입니다.The best time to fix a problem is right when it happens, when it is fresh in the user's mind. 실제로 각 터치 또는 키 입력을 사용하면 해당 항목에 있는 문제를 식별하는 빨간색 텍스트가 표시될 수 있습니다.Literally with each touch or keystroke, red text can appear that identifies an issue with their entry.
  • 네트워크 트래픽 감소 및 사용자 대기 시간 감소 -Less network traffic and less user latency. 앱에서 발견된 문제가 많을수록 네트워크를 통한 대화 수가 줄어들어 문제를 검색하고 해결할 수 있습니다.More issues detected in the app means fewer conversations over the network to detect and resolve issues. 각 대화에는 사용자가 계속 이동하기 전에 기다려야 하는 시간이 필요합니다.Each conversation takes time during which the user must wait before they can move on.

PowerApps는 유효성 검사를 위한 두 가지 도구를 제공합니다.PowerApps offers two tools for validation:

  • 데이터 원본은 유효하거나 유효하지 않은 항목에 대한 정보를 제공할 수 있습니다.The data source can provide information about what is and isn't valid. 예를 들어 숫자에 최소값과 최대값이 있을 수 있으며, 하나 이상의 항목이 필요할 수 있습니다.For example, numbers can have minimum and maximum values, and one or more entries can be required. DataSourceInfo 함수를 사용하여 이 정보에 액세스할 수 있습니다.You can access this information with the DataSourceInfo function.
  • Validate 함수는 이 동일한 정보를 사용하여 단일 열 또는 전체 레코드의 값을 확인합니다.The Validate function uses this same information to check the value of a single column or of an entire record.

오류 처리Error handling

아주 멋지게 레코드에 대한 유효성을 검사했군요.Great, you've validated your record. 이제는 Patch를 사용하여 해당 레코드를 업데이트할 시간입니다!Time to update that record with Patch!

그러나 슬프게도 아직 문제가 있을 수 있습니다.But, alas, there may still be a problem. 네트워크가 중단되었거나, 서비스에서 유효성 검사가 실패했거나, 사용자에게 앱에 발생할 수 있는 몇 가지 오류의 이름을 지정하는 데 있어 적절한 권한이 없습니다.The network is down, validation at the service failed, or the user doesn't have the right permissions, just to name a few of the possible errors your app may encounter. 오류 상황에 적절하게 대응하여 사용자에게 피드백을 제공하고 올바르게 만들 수 있는 수단을 제공해야 합니다.It needs to respond appropriately to error situations, providing feedback to the user and a means for them to make it right.

데이터 원본에 오류가 발생하면 앱에서 자동으로 오류 정보를 기록하고 Errors 함수를 통해 이 오류 정보를 사용할 수 있도록 합니다.When errors occur with a data source, your app automatically records the error information and makes it available through the Errors function. 오류는 문제가 있는 레코드와 관련이 있습니다.Errors are associated with the records that had the problems. 사용자가 해결할 수 있는 문제(예: 유효성 검사 문제)이면 레코드를 다시 제출할 수 있으며 오류가 지워집니다.If the problem is something the user can fix, such as a validation problem, they can resubmit the record, and the errors will be cleared.

Patch 또는 Collect를 사용하여 레코드를 만들 때 오류가 발생하면 오류와 관련된 레코드가 없습니다.If an error occurs when a record is created with Patch or Collect, there is no record to associate any errors with. 이 경우 공백Patch에서 반환되고 Errors에 대한 레코드 인수로 사용될 수 있습니다.In this case, blank will be returned by Patch and can be used as the record argument to Errors. 만들기 오류는 다음 작업을 수행하면 지워집니다.Creation errors are cleared with the next operation.

Errors 함수는 오류 정보 테이블을 반환합니다.The Errors function returns a table of error information. 특정 열로 인해 오류가 발생하면 이 정보에 열 정보가 포함될 수 있습니다.This information can include the column information, if the error can be attributed to a particular column. 편집 화면에서 열이 있는 위치에 가까운 레이블 컨트롤에서 열 수준 오류 메시지를 사용합니다.Use column-level error messages in label controls that are close to where the column is located on the edit screen. 오류 테이블의 공백이고 전체 레코드에 대한 저장 단추에 가까운 위치에서 레코드 수준 오류 메시지를 사용합니다.Use record-level error messages where the Column in the error table is blank, in a location close to the Save button for the entire record.

큰 데이터 원본 작업Working with large data sources

큰 데이터 원본(수백만 개의 레코드)에서 보고서를 만들 때는 네트워크 트래픽을 최소화해야 합니다.When you are creating reports from large data sources (perhaps millions of records), you want to minimize network traffic. 뉴욕시에 StatusCode가 "Platinum"인 모든 고객에 대해 보고하려는 경우를 가정해 보겠습니다.Let's say you want to report on all Customers having a StatusCode of "Platinum" in New York City. 그리고 Customers 테이블에는 수백만 개의 레코드가 포함되어 있습니다.And that your Customers table contains millions of records.

이러한 수백만 명의 고객을 앱에 가져와서 원하는 고객을 선택하고 싶지는 않습니다.You do not want to bring those millions of Customers into your app, and then choose the ones you want. 다시 말하면 테이블을 저장하는 클라우드 서비스 내에서 선택 작업을 수행하고 선택한 레코드만 네트워크를 통해 보내려고 합니다.What you want is to have that choosing happen inside the cloud service where your table is stored, and only send the chosen records over the network.

레코드를 선택하는 데 사용할 수 있는 함수는 전부는 아니지만 많은 함수가 '위임'될 수 있습니다. 이는 클라우드 서비스 내에서 실행된다는 것입니다.Many, but not all, functions that you can use to choose records can be delegated, which means that they are run inside the cloud service. 위임에 대한 내용을 참조하면 이 작업을 수행하는 방법을 알아볼 수 있습니다.You can learn how to do this by reading about Delegation.

컬렉션Collections

컬렉션은 특별한 종류의 데이터 원본입니다.Collections are a special kind of data source. 이는 클라우드의 서비스에 대한 연결로 지원되지 않고 로컬로 앱에 연결되므로, 동일한 사용자 또는 다른 사용자의 장치 간에 정보를 공유할 수 없습니다.They're local to the app and not backed by a connection to a service in the cloud, so the information can not be shared across devices for the same user or between users. 몇 가지 예외를 제외하고는 다른 데이터 원본처럼 작동합니다.They operate like any other data source, with a few exceptions:

  • 컬렉션은 Collect 함수를 사용하여 동적으로 만들 수 있습니다.Collections can be created dynamically with the Collect function. 연결 기반 데이터 원본에서 수행하는 것처럼 미리 설정할 필요가 없습니다.They don't need to be established ahead of time, as connection-based data sources do.
  • 컬렉션의 열은 Collect 함수를 사용하여 언제든지 수정할 수 있습니다.The columns of a collection can be modified at any time using the Collect function.
  • 컬렉션에서는 중복 레코드가 허용됩니다.Collections allow duplicate records. 컬렉션에 동일한 레코드의 복사본이 둘 이상 있을 수 있습니다.More than one copy of the same record can exist in a collection. Remove와 같은 함수는 All 인수가 제공되지 않으면 찾은 첫 번째 일치 항목에서 작동합니다.Functions such as Remove will operate on the first match they find, unless the All argument is supplied.
  • SaveDataLoadData 함수를 사용하여 컬렉션의 복사본을 저장하고 다시 로드할 수 있습니다.You can use the SaveData and LoadData functions to save and reload a copy of the collection. 정보는 다른 사용자, 앱 또는 장치에서 액세스할 수 없는 개인 위치에 저장됩니다.The information is stored in a private location that other users, apps, or devices can't access.
  • 내보내기가져오기 컨트롤을 사용하여 컬렉션의 복사본을 사용자가 상호 작용할 수 있는 파일로 저장하고 다시 로드할 수 있습니다.You can use the Export and Import controls to save and reload a copy of the collection to a file that the user can interact with.

컬렉션을 데이터 원본으로 사용하는 방법에 대한 자세한 내용은 컬렉션 만들기 및 업데이트를 참조하세요.For more information on working with a collection as a data source, see create and update a collection.

컬렉션은 일반적으로 앱에 대한 전역 상태를 유지하는 데 사용됩니다.Collections are commonly used to hold global state for the app. 상태 관리에 사용할 수 있는 옵션은 변수 작업을 참조하세요.See working with variables for the options available for managing state.