마이크로소프트/Power Automate

[PowerAutomate] Data operation - filter array, select, join, create csv file, create html file, UTF-8 BOM 인코딩

Olivia-BlackCherry 2023. 6. 12. 12:40

목차

<사전준비>

연습으로 사용할 데이터는 jsonplaceholder.typicode.com의 users이다. 

https://jsonplaceholder.typicode.com/users

 

<Data Operation>

데이터 처리에 관해 power automate에서 사용하는 문법은 아래와 같다. 

parse json
composefilter array
select
join
create CSV table
create HTML table

 

지금부터 차례차례 살펴본다. 

 

1. parse json

  • 개념

JSON은 속성과 값의 집합이다. 

{"property1" : "value1", "property2" : "value2" }

JSON을 그대로 보면, 이해하기가 어렵고 복잡하다.

그래서 VIEWR를 통해 JSON 코드를  코드를 보기 좋게 만들어주는 사이트가 있다. 

CodeBeautify.org/jsonviewer

 

  • 스키마

웹 페이지와 웹 서버가 통신할 때, 정해진 JSON 스키마를 기본으로 데이터를 해석한다. 

schema agreement라고 한다.

 

  • 파워오토메이트에서 JSON 처리하기

parse json 액션을 사용한다.

- 파워오토메이트는 내가 가진 JSON 형식의 데이터를 입력하면, 해당 스키마를 자동으로 생성해낸다.

- 만약 data type이 array라면 Apply to each 액션이 실행된다. 

 

 

 

2. compose

python에서 print와 같은 역할을 한다. 

값을 출력해서, 현재 상황이 어떤 정도로 이루어지고 있는지 확인한다.

 

 

 

3. Filter Array

- 가져오는 값, 반환하는 값이 모두 array

- 주어진 array에서 특정한 항목의 값을 배열로 추출한다.

- 횡적인 개념이다. 여러 개의 array 중 내가 가져오고 싶은 행의 항목만 가져오기 때문이다.

 

아래의 users 데이터에서 addreess 안의 suite의 속성의 값이 Apt인 것만 추출하고 싶다.

manually trigger a flow

-내가 트리거를 수동으로 눌렀을 때 실행된다.

http

- method:get, URL넣기 

parse json

- content: body, schema 생성

filter array

parse Json한 data의 body 중에서 suite 안에 'Apt'가 포함된 것을 추출한다.

 

만약 Parse JSON하지 않는 data를 가져온다면, 

아래와 같이 구성한다.

- from의 body는 http의 body로

- value는 item().address.suite 라고 적는다. dynamic content가 구체적으로 생성되지 않기 때문에

item()의 adrress 속성의 suite 속성을 차례로 지정해야 하는 것이다.

 

두 값모두 outputs은 같다.

 

 

4. Select

select

종적인 개념이다. 내가 원하는 컬럼만 가져오게 한다.

특정 속성과 값만 추출해서 JSON형태로 사용하고 싶을 때 사용한다.

이같은 경우는 앞에서처럼 Parse JSON을 하지 않아도 된다.

item().company.name
item().name
이렇게 추출하고자 하는 데이터의 값을 적어준다.
 
 
 

5. Join 

join

array를 풀어서, 하나로 연결하여 만든다. 

아래의 경우 ;로 join을 했다.

결과는 아래와 같다.

각각의 array가 ;로 연결되어진 것을 볼 수 있다.

{"companyName":"Romaguera-Crona","id":1,"username":"Leanne Graham","zipcode":"92998-3874"};{"companyName":"Deckow-Crist","id":2,"username":"Ervin Howell","zipcode":"90566-7771"};{"companyName":"Romaguera-Jacobson","id":3,"username":"Clementine Bauch","zipcode":"59590-4157"};{"companyName":"Robel-Corkery","id":4,"username":"Patricia Lebsack","zipcode":"53919-4257"};{"companyName":"Keebler LLC","id":5,"username":"Chelsey Dietrich","zipcode":"33263"};{"companyName":"Considine-Lockman","id":6,"username":"Mrs. Dennis Schulist","zipcode":"23505-1337"};{"companyName":"Johns Group","id":7,"username":"Kurtis Weissnat","zipcode":"58804-1099"};{"companyName":"Abernathy Group","id":8,"username":"Nicholas Runolfsdottir V","zipcode":"45169"};{"companyName":"Yost and Sons","id":9,"username":"Glenna Reichert","zipcode":"76495-3109"};{"companyName":"Hoeger LLC","id":10,"username":"Clementina DuBuque","zipcode":"31428-2261"}

 

 

 

6. create CSV table

create csv table

select2의 output을 사용하여 만든다.

show advance 버튼을 누르면 automatic으로 할지 custom으로 개인화할지를 선택한다. 

automatic 선택!

 

 

create file

csv형식의 데이터를 파일로 저장해보자.

두 가지 방법으로 연습해보자. 

첫 번째는 원드라이브에 저장하는 것, 두 번째는 쉐어포인트에 저장하는 것이다. 

쉐어포인트에 저장되는 것은 매번 flow를 실행할 때마다 새로운 파일이 생성되므로, 파일명을 바꿔줘야 한다.

다만 원드라이브는 안의 내용을 수정해준다.

결과는!

onedrive와 sharepoint에 모두 잘 저장되었다. 

 

 

  • UTF-8 BOM 인코딩

다만, 입력값이 한글값이라면 데이터가 깨진다. 

이를 방지하기 위해서

UTF-8 BOM으로 텍스트 파일을 인코딩하여 에러요소를 제거한다.

 

Byte Order Mark(BOM) 를 text에 추가하는데, 우선 

concat() 함수로, 인자로 아래의 값을 넣는다. 

uriComponentToString('%EF%BB%BF'), body('Create_CSV_table')

 

uriComponentToString은 UTF-8을 의미한다. 

%EF%BB%BF은 BOM(Byte Order Mark)를 의미한다.

 

 

compose

 

expression에 넣기
concat(uriComponentToString('%EF%BB%BF'), body('Create_CSV_table'))

 

file content를 compose의 output으로 변경

 

 

결과는 성공!

 

 

 

 

7. create HTML table

html table을 만들어서 create file을 한다.

 

html 테이블이다.

 

결과이다. html 파일이기 때문에 link로 share가 가능하다.