이 숨겨진 엑셀 도구는 데이터를 자동으로 빠르게 정리할 수 있습니다
M은 Power Query를 백그라운드에서 실행하는 강력한 수식 언어입니다. 복잡한 코드처럼 보일 수 있지만, M의 많은 일반적인 작업은 놀라울 정도로 초보자 친화적이며 데이터 정리를 빠르게 자동화할 수 있습니다. 기본적인 엑셀 함수를 작성할 수 있다면, 가장 큰 데이터셋을 처리하기 위해 M 학습을 시작할 수 있습니다.
많은 사람들이 리본의 버튼을 사용하여 파워 쿼리 편집기를 시작하며, 그것 역시 괜찮습니다. 하지만 이 방법은 긴 클릭 마라톤으로 이어지게 만듭니다. M은 여러 변환을 관리, 재사용 및 유지 관리하기 더 쉬운 하나의 단계로 결합할 수 있게 함으로써 혼란을 줄이는 데 도움이 됩니다.
M 언어: 시작하는 방법
Power Query 인터페이스에 익숙해지세요
위 데이터를 방금 받았다고 상상해 보세요. 혼란스러운 주문 ID, 일관되지 않은 대문자 이름, 불완전한 지역 정보가 뒤섞여 있습니다.
이 가이드를 따라가면서 읽으려면, 예제에 사용된 Excel 통합 문서의 무료 사본을 다운로드하세요. 링크를 클릭한 후 화면 오른쪽 상단에서 다운로드 버튼을 찾을 수 있습니다.
M을 사용하여 이를 수정하려면 먼저 환경을 준비해야 합니다. 데이터셋이 이미 T_SalesData라는 Excel 테이블 형식으로 되어 있다고 가정하면, 다음 단계를 따르세요:
- 표의 임의의 셀을 선택하고, 데이터 탭에서 표/범위에서를 클릭하세요.
- 한 번 Power Query 편집기가 열리면, 데이터 그리드 위의 흰색 막대(수식 입력줄)가 보이는지 확인하십시오. 보이지 않는 경우, 보기 탭을 열고 수식 입력줄을 확인하십시오.
- 수식 입력줄 왼쪽에 있는 fx 버튼을 찾으세요. 이 아이콘을 클릭하면 코드를 입력하거나 붙여넣을 수 있는 사용자 지정 단계를 만들 수 있습니다.
스니펫 1: 엉망인 이름 대소문자 표준화
Text.Proper을 사용하여 대문자를 제자리에서 수정하기
목표: CustomerName 열에 있는 이름 중 모든 글자가 대문자이거나, 모두 소문자이거나, 무작위로 섞여 있는 이름을 각 단어의 첫 글자만 대문자로 고치는 것.
새 단계를 만들려면 수식 입력줄 왼쪽에 있는 fx 아이콘을 클릭하세요. 그런 다음, 수식 입력줄의 모든 내용을 다음 코드로 바꾸고 Enter를 누르세요:
= Table.TransformColumns(#"Changed Type", {{"CustomerName", each Text.Proper(_), type text}})
Power Query는 단계에 Custom1과 같은 일반 이름을 지정합니다. Applied Steps 창에서 이 일반 단계 이름을 마우스 오른쪽 버튼으로 클릭하고 이름 바꾸기를 클릭하여 FixCasing과 같이 더 설명적인 이름을 부여합니다.
이 첫 번째 스니펫에 대해서는 아래 표에서 전체 구조를 자세히 분석하겠습니다. 나머지 세 개의 스니펫에 대해서는 전체 패턴이 동일하기 때문에 새롭게 추가되거나 변경된 부분만 집중적으로 살펴보겠습니다.
요소 | 설명 |
|---|---|
Table.TransformColumns(...) | 기존 열을 수정하는 데 사용되는 주요 함수입니다. '함수명()'의 괄호는 함수의 인수를 '감쌉니다'. |
#"형식 변경됨" | 적용된 단계 목록에서 직전 단계를 참조합니다. 각 단계는 다음에 처리할 테이블의 버전을 알아야 합니다. |
중괄호: { } |
목록을 나타냅니다. 여러 열을 한 번에 변환할 수 있으므로, M에서는 이러한 중괄호 안에 지침을 포함해야 합니다. |
고객명 | 변경할 특정 열을 지정합니다. 큰따옴표는 이름을 문자 그대로의 텍스트로 정의합니다. 다른 열에 동일한 단계를 적용하려면 다른 이름을 입력하면 됩니다. |
텍스트를 입력하세요 | 열을 특정 데이터 형식으로 강제 지정합니다. 이를 통해 Excel이 이름을 숫자나 날짜로 잘못 식별하는 것을 방지합니다. |
각 | Power Query에 해당 열의 각 개별 행마다 다음 논리를 반복하도록 지시하는 키워드. |
텍스트.적절 | 적용되는 특정 함수입니다. 이 경우, 텍스트를 제목 형식으로 변환합니다. 모든 글자를 대문자로 하려면, 이를 Text.Upper로 교체하세요. |
언더스코어: _ | 이 셀의 현재 값을 나타내는 자리 표시자. |
표준 Excel 수식과 달리 M 언어는 대소문자를 구분합니다. Table.TransformColumns 대신 table.transformcolumns를 작성하면 오류가 발생하므로 대문자와 소문자 사용에 주의하세요!
스니펫 2: 보이지 않는 서식 오류 제거
열의 레이아웃 정리
목적: CustomerName 열에서 선행 공백과 줄 바꿈을 제거하는 것입니다. 특히 줄 바꿈을 공백으로 대체하여 "jOHN [break] sMITH"가 "John Smith"가 되도록 하려는 것입니다. 이를 통해 "JohnSmith"가 되지 않도록 합니다.
이전과 같이 fx를 클릭하고, 기존 텍스트를 아래 코드로 바꾼 다음 Enter를 누르세요:
= Table.TransformColumns(FixCasing, {{"CustomerName", each Text.Clean(Text.Trim(Text.Replace(_, "#(lf)", " "))), type text}})
괄호 안의 첫 번째 요소는 항상 적용된 단계 목록의 이전 단계 이름과 일치해야 한다는 것을 기억하세요.
CleanTrim 단계를 이름 변경하세요.
각 주요 부분이 하는 일은 다음과 같습니다:
- #(lf): 이것은 M에서 줄 바꿈(line feed)을 나타내는 축약형입니다(엑셀에서 Alt+Enter로 생성되는 보이지 않는 문자—줄 바꿈).
- Text.Replace(_, "#(lf)", " "): 이는 줄 바꿈을 찾아서 공백으로 바꿉니다.
- Text.Trim: 셀의 시작과 끝에 있는 불필요한 공백을 제거합니다.
- Text.Clean: 남아 있는 비인쇄 제어 문자(숨겨진 ASCII 문자 등)를 제거합니다.
스니펫 3: 혼란스러운 문자열에서 숫자 추출
Text.Select로 문자 필터링하기
목적: OrderID 열에서 숫자 이외의 모든 것을 제거하는 것.
fx를 클릭한 후, 아래 코드를 붙여넣고 Enter 키를 누르세요:
= Table.TransformColumns(CleanTrim, {{"OrderID", each Text.Select(_, {"0".."9"}), type text}})
ExtractNumbers 단계를 이름 변경하세요.
여기서 도입한 새로운 요소들을 살펴봅시다:
- Text.Select: M에게 나열된 특정 문자만 "선택"하고 나머지는 모두 버리라고 지시합니다.
- {"0".."9"}: 이는 허용된 문자 목록을 정의합니다. 두 개의 점(..)은 "그리고 그 사이의 모든 것"을 의미하며, 즉 0에서 9까지 모든 숫자가 추출됩니다. 문자와 기호는 이 목록에 없으므로 완전히 삭제됩니다.
스니펫 4: 열 병합 및 'null' 오류 처리
깨끗한 ID-지역 코드를 생성하기
목적: 정리된 OrderID와 Region을 단일 코드(예: 101N)로 결합하는 것입니다. 만약 지역이 비어있다면(null), 'null'이라는 단어가 나타나지 않고 ID만 표시되도록 하고, 그 후 원래의 열들을 삭제하여 테이블을 간결하게 유지합니다.
fx를 클릭하고, 다음 코드를 삽입한 후 Enter를 누르세요:
= Table.SelectColumns(Table.AddColumn(ExtractNumbers, "ID", each [OrderID] & (if [Region] = null then "" else [Region])), {"ID", "CustomerName"})
단계를 MergeIDRegion로 이름을 바꾸세요.
이 코드가 작동하는 방법은 다음과 같습니다:
- if [Region]=null then "" else [Region]: Power Query에게 Region을 살펴보라고 지시합니다. 만약 null을 보면, 이를 빈 문자열("")로 처리합니다. 이렇게 하면 103과 null 값을 결합할 때 103null이 아니라 103이 나오게 됩니다.
- [OrderID] &...: 스니펫 3에서 정리된 숫자 ID를 가져오며, 앰퍼샌드(&)는 Power Query가 지역 텍스트를 그 끝에 바로 붙이도록 지시합니다.
- "ID": 새로운 결합 열의 헤더 이름을 정의합니다.
- {"ID", "CustomerName"}: 마지막에 이 두 열만 나열하면 Power Query에 원래의 OrderID와 Region 열을 버리라고 지시하는 것입니다.
M 언어가 단지 고급 수식들의 모음임을 알게 되면, 두려움은 사라집니다. 이 네 가지 스니펫은 효율성, 정확성으로 나아가는 첫 번째 단계이자, 간결하고 관리 가능한 코드를 사용하여 클릭 피로에서 벗어나는 방법입니다. 이제 개발자처럼 생각하기 시작했으니, 일상 작업에 더 큰 힘을 제공하는 도구인 Excel에서 Python을 사용하는 것으로 전환해 보는 것은 어떨까요.








