실습 ②: 흐름 + Excel 커넥터 — Office Script 없이, 필터의 힘으로

시간 소요 수강생 역할
10:36 12분 🟡 따라보기

실습 ①흐름도 코드도 쓰지 않는 가장 가벼운 길이었습니다. 그런데 결과를 자동화로 보내거나 큰 데이터를 다듬어야 할 때는 흐름이 필요합니다. 흐름이라고 해서 반드시 Office Script까지 가야 하는 것은 아닙니다. 이 실습은 Excel 커넥터의 표준 작업 — 테이블 행 가져오기 — 와 OData 필터/정렬/상위 N 만으로도 강력한 분석 파이프라인이 만들어진다는 사실을 직접 확인합니다.

목차

  1. 1. 왜 이 길이 따로 있나 — 세 길 비교
  2. 2. 이 실습이 만드는 것 — 3단 콤보
  3. Part A. 흐름 만들기 (Step 1~10)
    1. Step 1. 흐름 생성
    2. Step 2. OneDrive에 임시 저장
    3. Step 3. 테이블 가져오기 (Get tables) ⭐
    4. Step 4. 작성 (Compose) — 첫 테이블 이름 추출
    5. Step 5. 테이블 행 가져오기 (List rows in table) ⭐⭐
    6. Step 6. 작성 (Compose) — JSON 직렬화
    7. Step 7. AI 프롬프트 노드 추가
    8. Step 8. 사용자 지정 프롬프트 작성
    9. Step 9. 흐름으로 돌아와 AI 프롬프트 입력 매핑
    10. Step 10. 응답 노드 + 전체 테스트
  4. Part B. 토픽에 흐름 연결 (Step 11~14)
    1. Step 11. 새 토픽 만들기
    2. Step 12. 질문 노드 2개
    3. Step 13. 흐름 호출 노드
    4. Step 14. 결과 메시지 + 게시 + 테스트
  5. 3. 필터의 힘 — 작은 실험 (2분)
  6. 4. 한계와 다음 단계

1. 왜 이 길이 따로 있나 — 세 길 비교

흐름 Office Script OData 필터 적합한 순간
실습 ① 일회성 자연어 질의 / 토픽 후속 대화
실습 ② (이 페이지) ✅ 핵심 후속 자동화는 필요하지만 코드까지는 과한 경우
실습 ③ (선택) 수천~수만 행 / 컬럼 변환·피벗 등 결정적 처리

이 실습의 진가는 “코드를 안 쓰고도 데이터를 슬라이싱할 수 있다” 입니다. OData 필터는 SharePoint·Dataverse 등 다른 커넥터에도 동일 문법 으로 재사용되는 자산이라 학습 가치도 큽니다.


2. 이 실습이 만드는 것 — 3단 콤보

실습 ①과 동일하게 사용자가 첨부한 Excel 파일 을 받아 흐름으로 넘기고, 흐름에서는 다음 3단으로 처리합니다.

[사용자] → 토픽
   ├ 질문 노드 ① — 요청문
   ├ 질문 노드 ② — 파일
   ↓ 흐름 호출 (요청문 + 파일 record)
[Power Automate 흐름]
   ├ ① OneDrive 임시 저장
   ├ ② 테이블 가져오기 → 첫 테이블 이름 추출
   ├ ③ 테이블 행 가져오기 (필터 쿼리 ⭐)
   ├ ④ JSON 직렬화
   ├ ⑤ AI 프롬프트 (스키마 명시)
   ↓
[토픽 메시지 노드] → [사용자]

Office Script가 없는 대신, OData 필터 가 데이터 슬라이싱을 담당합니다. 코드 없이도 토큰을 절약하고 컨텍스트를 좁힐 수 있습니다.


Part A. 흐름 만들기 (Step 1~10)

Step 1. 흐름 생성

  1. make.powerautomate.com 접속
  2. 만들기 → 인스턴트 클라우드 흐름
  3. 트리거: Copilot Studio (V2) → “Copilot에서 흐름을 호출할 때”
  4. 흐름 이름: 엑셀분석_커넥터_흐름
  5. 트리거 입력:
    • 요청문 (텍스트)
    • 파일 (파일)

Step 2. OneDrive에 임시 저장

  1. 새 작업: OneDrive for Business → 파일 만들기
  2. 폴더 경로: /Apps/엑셀분석_임시/
  3. 파일 이름: temp_@{utcNow('yyyyMMddHHmmss')}.xlsx
  4. 파일 콘텐츠: 트리거 입력의 파일 콘텐츠

포인트: 작업 이름을 파일만들기 로 정리해두면 다음 단계 동적 콘텐츠를 찾기 쉽습니다.

Step 3. 테이블 가져오기 (Get tables) ⭐

사용자가 첨부한 엑셀의 테이블 이름을 모르더라도 자동으로 알아내기 위한 단계입니다.

  1. 새 작업: Excel Online (Business) → 테이블 가져오기 (Get tables)
  2. 매개변수:
    • 위치: OneDrive for Business
    • 문서 라이브러리: OneDrive
    • 파일: Step 2에서 만든 파일의 ID (동적 콘텐츠)

포인트: 이 작업이 워크북에 정의된 모든 Excel Table 의 목록(이름·범위 등)을 돌려줍니다. 학습자마다 첨부 파일이 다를 수 있고 테이블 이름도 다를 수 있어 — 첫 번째 테이블을 자동으로 골라 쓰는 패턴 이 가장 견고합니다.

Step 4. 작성 (Compose) — 첫 테이블 이름 추출

  1. 새 작업: 데이터 작업 → 작성 (Compose)
  2. 이름 변경: 첫_테이블_이름
  3. 입력 수식:

    first(outputs('테이블_가져오기')?['body/value'])?['name']
    

    액션 이름이 테이블 가져오기 가 아니라 다른 이름이면 그에 맞춰 수정하세요. UI에서 “동적 콘텐츠 → 테이블 가져오기 → 이름” 을 클릭해도 동일한 결과가 됩니다.

Step 5. 테이블 행 가져오기 (List rows in table) ⭐⭐

이 실습의 핵심 작업 입니다. 필터·정렬·상위 N을 여기서 다룹니다.

  1. 새 작업: Excel Online (Business) → 테이블에 있는 행 나열 (List rows present in a table)
  2. 매개변수:
    • 위치: OneDrive for Business
    • 문서 라이브러리: OneDrive
    • 파일: Step 2의 파일 ID
    • 테이블: Step 4 출력 (첫_테이블_이름)
  3. 고급 옵션 펼치기 → 다음 세 가지를 설정해봅니다:
옵션 처음 입력값 설명
필터 쿼리 연도 ge 2024 2024·2025년만 통과
순서 기준 (Order By) 연도 asc, 분기 asc 정렬
상위 개수 (Top Count) 100 안전 상한

포인트 — OData 필터 문법:

  • 비교: eq ne gt ge lt le
  • 조합: and or not
  • 문자열은 작은따옴표: 과일 eq '사과'
  • 예시:
    • 과일 eq '사과' — 사과만
    • 연도 ge 2024 and 과일 ne '감' — 2024 이후 사과·배만
    • 판매량 gt 1500 — 판매량 1,500 초과

한글 컬럼명·한글 값도 그대로 동작합니다. SharePoint 목록·Dataverse 테이블에서도 같은 문법 으로 필터링되니, 이 한 번의 학습이 폭넓게 재활용됩니다.

⚠️ 커넥터 한계: 기본 256행 / 최대 5,000행. 그 이상은 페이지네이션을 켜거나 실습 ③(Office Script)로 가야 합니다.

Step 6. 작성 (Compose) — JSON 직렬화

  1. 새 작업: 데이터 작업 → 작성 (Compose)
  2. 이름 변경: 데이터JSON
  3. 입력 수식:

    string(outputs('테이블에_있는_행_나열')?['body/value'])
    

    UI 동적 콘텐츠의 “ (테이블에 있는 행 나열)” 을 string() 으로 감싸도 동일합니다.

포인트: value 는 record 배열이라 그대로 AI 프롬프트에 넣을 수 없습니다. string() 으로 한 번 직렬화해 텍스트로 만들어야 다음 단계 입력에 매핑됩니다.

Step 7. AI 프롬프트 노드 추가

  1. 새 작업: AI Builder → 프롬프트로 텍스트 만들기 (Create text with GPT using a prompt)
  2. 새 프롬프트 만들기 클릭

Step 8. 사용자 지정 프롬프트 작성

프롬프트 이름: 엑셀_분석_프롬프트_커넥터

프롬프트 본문:

당신은 Excel 데이터 분석가입니다. 아래 [데이터]는 Excel 테이블의 행 중
필터링된 결과를 JSON 배열로 변환한 것입니다. [요청문]에 따라 데이터를 분석하고,
한국어로 친절하게 답변하세요.

[데이터 스키마]
- 연도 (number): 2006 ~ 2025
- 분기 (string): "Q1" | "Q2" | "Q3" | "Q4"
- 과일 (string): "사과" | "배" | "감"
- 판매량 (number): 정수

[참고] 이 데이터는 흐름 단계에서 OData 필터로 이미 한 번 걸러진 결과입니다.
[데이터]에 없는 행은 "필터에 의해 제외되었거나 데이터가 없습니다" 라고 답하세요.

[규칙]
- 숫자는 천 단위 콤마로 표기합니다.
- 평균/합계 등 계산이 필요하면 정확히 계산합니다.
- 데이터에 없는 값은 추측하지 말고 "데이터에 없습니다"라고 답하세요.
- 답변은 결론 한 줄 + 근거 표(또는 목록)로 구성하세요.

[요청문]


[데이터]

입력 변수: 요청문 (텍스트), 데이터JSON (텍스트)

모델: GPT-5 (또는 사용 가능한 최신 모델). 코드 인터프리터는 꺼두기를 권장 — 이 실습은 데이터를 미리 좁혀 LLM이 직접 푸는 길을 선호합니다.

테스트 후 저장.

Step 9. 흐름으로 돌아와 AI 프롬프트 입력 매핑

  1. AI 프롬프트 노드에 두 입력이 보임
  2. 요청문 → 트리거 요청문 동적 콘텐츠
  3. 데이터JSON → Step 6 데이터JSON (Compose) 출력

Step 10. 응답 노드 + 전체 테스트

  1. 마지막 작업: Copilot Studio에 응답 (Respond to Copilot)
  2. 출력 추가: 결과텍스트 (텍스트) = AI 프롬프트의 응답 텍스트
  3. 저장 → 테스트 → 수동으로
  4. 결과 텍스트가 자연어 분석으로 나오는지 확인

체크포인트: 테이블 가져오기·행 가져오기 결과를 흐름 실행 이력에서 펼쳐 보세요. 필터가 실제로 행 수를 줄였는지 한눈에 확인할 수 있습니다.


Part B. 토픽에 흐름 연결 (Step 11~14)

실습 ①의 토픽과 충돌 없이 별개 토픽 으로 만듭니다. 같은 에이전트 안에서 세 실습의 결과를 비교할 수 있게 둡니다.

Step 11. 새 토픽 만들기

  1. Copilot Studio → 실습 ①의 에이전트 열기 → 토픽 → 새 토픽 (빈 토픽)
  2. 토픽 이름: 엑셀 분석 (커넥터)
  3. 트리거 구문:
    • 엑셀 분석 커넥터
    • 커넥터로 엑셀 분석

Step 12. 질문 노드 2개

  1. 질문 ① (요청문)
    • 메시지: “어떤 분석을 원하시나요? (예: 2024년 이후 사과·배 판매량 비교)”
    • 식별: 사용자의 전체 응답 (텍스트)
    • 변수: Topic.요청문
  2. 질문 ② (파일)
    • 메시지: “분석할 Excel 파일을 첨부해주세요.”
    • 식별: 파일 (File)
    • 변수: Topic.첨부파일
    • 속성 → 고급 → 파일 메타데이터 활성화 ← 체크

Step 13. 흐름 호출 노드

  1. 새 노드 추가 → 작업(Action) → 흐름 → 엑셀분석_커넥터_흐름
  2. 입력 매핑:
    • 요청문Topic.요청문
    • 파일 → 수식(fx):

      {
        name: Topic.첨부파일.Name,
        contentBytes: Topic.첨부파일.Content
      }
      

포인트: 테넌트 버전에 따라 속성 이름이 Name/Content 또는 name/contentBytes 등으로 다를 수 있습니다. 흐름 트리거의 입력 스키마와 일치하도록 확인하세요.

Step 14. 결과 메시지 + 게시 + 테스트

  1. 흐름 호출 노드 다음 → 메시지 노드 추가, 흐름 출력 결과텍스트 삽입
  2. 토픽 저장 + 게시
  3. 우측 테스트 → 새 대화 시작
    • 입력: 엑셀 분석 커넥터
    • 요청문: 2024년 이후 사과·배 판매량을 비교해줘
    • 파일: 과일판매_Table.xlsx
  4. 약 5~10초 대기 후 분석 결과 확인

3. 필터의 힘 — 작은 실험 (2분)

흐름 디자이너로 돌아가 Step 5의 필터 쿼리만 바꿔가며 같은 요청문으로 테스트해 보세요. 코드 한 줄 없이 결과 컨텍스트가 어떻게 달라지는지 체감하는 게 이 실습의 진짜 학습 포인트입니다.

필터 쿼리 행 수 결과 답변의 변화
(비움) 192 모든 행 — 분석 범위 넓음
연도 ge 2024 ~24 최근 2년만 — 최신 트렌드 강조
과일 eq '사과' and 연도 ge 2020 ~24 사과 + 코로나 이후만
판매량 gt 1500 (가변) 베스트셀러 분기만

💡 깨달음: “데이터를 LLM에 모두 던지면 똑똑하게 알아서 한다” 는 환상보다, “필요한 만큼만 좁혀서 던지면 더 정확하고 더 빠르고 더 싸다” 가 실제 운영의 진실에 가깝습니다.


4. 한계와 다음 단계

한계 어디로 가야 하나
행이 5,000행 초과 (커넥터 상한) 실습 ③ — Office Script 사전 집계
컬럼 변환·피벗·복잡한 그룹화가 필요 실습 ③ — Office Script로 결정적 처리
사용자가 매번 다른 필터를 자유롭게 지정해야 토픽 질문 노드 추가 + 흐름 입력 필터쿼리 매개변수
첨부 엑셀에 Table이 없음 사용자에게 Ctrl+T 안내 (실습 ①과 동일 원칙)

💡 현장 팁: 실무 90% 시나리오는 “특정 조건으로 필터된 데이터에 대해 자연어 질의” 입니다. 이 패턴 하나만으로 다수의 업무 자동화가 커버됩니다. Office Script는 정말 필요한 시나리오에만 — 그 길은 실습 ③ 에서.


문과생을 위한 Copilot Studio — 개발자 없이 만드는 우리 팀 전용 AI

This site uses Just the Docs, a documentation theme for Jekyll.