Power Query 고급: 폴더 드롭·파라미터·오류 로깅·Folding

Power Query 고급 자동화: 폴더 드롭·파라미터·오류 로깅·Folding 최적화

폴더에 파일만 추가해도 자동 집계되는 Power Query 고급 설계를 소개합니다. 스테이징 쿼리, 파라미터, 커스텀 함수, 오류 로깅, Query Folding 최적화까지 실무 템플릿과 M 코드를 제공합니다.

Quick Fix: 10분 자동 집계

  1. 폴더 준비 후 데이터 > 폴더에서를 사용해 결합
  2. 샘플 파일 변환에서 Trim/형식/분할 적용
  3. Group By로 집계 후 닫기 및 로드

설계도

  • 스테이징 → 파라미터 → 커스텀 함수 → 오류 로깅
  • Query Folding 유지: 필터/형식 앞단, 파생 후단

실무 예제

파라미터

  • pFolder: D:\Data\sales\2025-09
  • pMinDate: 2025-09-01
  • pRevenueFloor: 0

fnCleanCsv (커스텀 함수)

(folder as text, name as text) as table =>
let
  src   = Csv.Document(File.Contents(folder & "\" & name), [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
  head  = Table.PromoteHeaders(src, [PromoteAllScalars=true]),
  keep  = Table.SelectColumns(head, {"order_date","category","item","qty","revenue"}),
  types = Table.TransformColumnTypes(keep,{{"order_date", type date},{"category", type text},{"item", type text},{"qty", Int64.Type},{"revenue", Int64.Type}}),
  trimmed = Table.TransformColumns(types,{{"category", Text.Trim, type text},{"item", Text.Trim, type text}})
in
  trimmed

주문 통합 + 오류 로깅

let
  folder = pFolder,
  files  = stg_Files,
  Applied = Table.AddColumn(files, "TryTable", each try fnCleanCsv(folder, [Name])),
  Success = Table.SelectRows(Applied, each [TryTable][HasError] = false),
  Failure = Table.SelectRows(Applied, each [TryTable][HasError] = true),
  Expanded = Table.ExpandTableColumn(Success, "TryTable", {"Value"}, {"Data"}),
  Combined = Table.Combine(Expanded[Data]),
  Filtered = Table.SelectRows(Combined, each [order_date] >= pMinDate and [revenue] >= pRevenueFloor),
  Final = Table.TransformColumnTypes(Filtered, {{"order_date", type date},{"qty", Int64.Type},{"revenue", Int64.Type}})
in
  Final

오류 로그

let
  folder = pFolder,
  files  = stg_Files,
  Applied = Table.AddColumn(files, "TryTable", each try fnCleanCsv(folder, [Name])),
  Failure = Table.SelectRows(Applied, each [TryTable][HasError] = true),
  Log = Table.TransformColumns(Table.AddColumn(Failure, "ErrorMessage", each [TryTable][Error][Message]), {{"ErrorMessage", Text.From, type text}}),
  KeepCols = Table.SelectColumns(Log, {"Name","ErrorMessage"})
in
  KeepCols

성능 팁

  • 필터/형식 지정은 앞단(폴딩 유지)
  • 필요 열만 유지, 단계 최소화
  • Buffer는 최후 수단

Troubleshooting

증상원인해결
새 파일 미반영경로/패턴 불일치pFolder/StartsWith 규칙 확인
날짜 텍스트 인식로케일type date 또는 Date.FromText
합계 0텍스트 숫자Int64.Type로 형식 지정
느린 새로고침폴딩 끊김필터 앞당김/단계 정리/Buffer 최소화
오류행 섞임예외 미처리try … otherwise로 q_Errors 분리

맺음말

폴더 드롭·파라미터·오류 로깅·Folding 최적화로 Power Query 고급 자동화를 완성했습니다. 다음 글은 Power Query 출력과 동적 배열/차트를 연결하는 파이프라인으로 이어집니다.

Leave a Reply

Your email address will not be published. Required fields are marked *