다른 쿼리 또는 값에 동일한 변환 집합을 적용해야 하는 상황에서 필요한 만큼 재사용할 수 있는 파워 쿼리 사용자 지정 함수를 만드는 것이 도움이 될 수 있습니다. 파워 쿼리 사용자 지정 함수는 입력 값 집합에서 단일 출력 값으로의 매핑이며 네이티브 M 함수 및 연산자에서 생성됩니다.
이 문서에서는 파워 쿼리 사용자 인터페이스를 통해서만 제공되는 이 환경과 이를 최대한 활용하는 방법에 중점을 둡니다.
중요
이 문서에서는 파워 쿼리 사용자 인터페이스에서 액세스할 수 있는 일반적인 변환을 사용하여 파워 쿼리를 사용하여 사용자 지정 함수를 만드는 방법을 간략하게 설명합니다. 사용자 지정 함수를 만드는 핵심 개념과 이 문서에서 참조하는 특정 변환에 대한 자세한 내용은 파워 쿼리 설명서의 추가 문서 링크에 중점을 둡니다.
테이블 참조에서 사용자 지정 함수 만들기
참고
다음 예제는 Power BI Desktop에서 찾은 데스크톱 환경을 사용하여 만들어졌으며 Windows용 Excel에서 찾은 파워 쿼리 환경을 사용하여 따를 수도 있습니다.
다음 다운로드 링크에서 이 문서에 사용된 샘플 파일을 다운로드하여 이 예제를 따를 수 있습니다. 간단히 하기 위해 이 문서에서는 폴더 커넥터를 사용합니다. 폴더 커넥터에 대해 자세히 알아보려면 폴더로 이동합니다. 이 예제의 목표는 모든 파일의 모든 데이터를 단일 테이블로 결합하기 전에 해당 폴더의 모든 파일에 적용할 수 있는 사용자 지정 함수를 만드는 것입니다.
먼저 폴더 커넥터 환경을 사용하여 파일이 있는 폴더로 이동하고 데이터 변환 또는 편집을 선택합니다. 이러한 단계를 수행하면 파워 쿼리 환경으로 이동합니다. 콘텐츠 필드에서 선택한 이진 값을 마우스 오른쪽 단추로 클릭하고 새 쿼리로 추가 옵션을 선택합니다. 이 예제에서는 목록의 첫 번째 파일에 대해 4월 2019.csv 파일이 선택되었습니다.
이 옵션은 해당 파일에 대한 탐색 단계를 이진으로 직접 사용하여 새 쿼리를 효과적으로 만들고, 이 새 쿼리의 이름은 선택한 파일의 파일 경로입니다. 이 쿼리의 이름을 샘플 파일로 바꿉니다.
파일 매개 변수 이름 및 이진 형식을 사용하여 새 매개 변수를 만듭니다. 샘플 파일 쿼리를 기본값 및 현재 값으로 사용합니다.
참고
파워 쿼리에서 매개 변수를 만들고 관리하는 방법을 더 잘 이해하려면 매개 변수에 대한 문서를 읽어보는 것이 좋습니다.
모든 매개 변수 형식을 사용하여 사용자 지정 함수를 만들 수 있습니다. 사용자 지정 함수에 이진을 매개 변수로 포함할 필요가 없습니다.
이진 매개 변수 형식은 이진으로 계산되는 쿼리가 있는 경우에만 매개 변수 대화 상자 형식 드롭다운 메뉴 내에 표시됩니다.
매개 변수 없이 사용자 지정 함수를 만들 수 있습니다. 이는 일반적으로 함수가 호출되는 환경에서 입력을 유추할 수 있는 시나리오에서 볼 수 있습니다. 예를 들어 환경의 현재 날짜 및 시간을 사용하고 해당 값에서 특정 텍스트 문자열을 만드는 함수입니다.
쿼리 창에서 파일 매개 변수를 마우스 오른쪽 단추로 클릭합니다. 참조 옵션을 선택합니다.
새로 만든 쿼리의 이름을 파일 매개 변수(2)에서 변환 샘플 파일로 바꿉니다.
이 새 변환 샘플 파일 쿼리를 마우스 오른쪽 단추로 클릭하고 함수 만들기 옵션을 선택합니다.
이 작업은 샘플 변환 파일 쿼리와 연결되는 새 함수를 효과적으로 만듭니다. 변환 샘플 파일 쿼리에 대한 변경 내용은 자동으로 사용자 지정 함수에 복제본(replica). 이 새 함수를 만드는 동안 Transform 파일을함수 이름으로 사용합니다.
함수를 만든 후에는 함수 이름으로 새 그룹이 만들어집니다. 이 새 그룹에는 다음이 포함됩니다.
변환 샘플 파일 쿼리에서 참조된 모든 매개 변수입니다.
일반적으로 샘플 쿼리라고 하는 변환 샘플 파일 쿼리입니다.
새로 만든 함수(이 경우 변환 파일)입니다.
샘플 쿼리에 변환 적용
새 함수를 만든 상태에서 변환 샘플 파일이라는 이름의 쿼리를 선택합니다. 이 쿼리는 이제 Transform 파일 함수와 연결되었으므로 이 쿼리의 변경 내용이 함수에 반영됩니다. 이 연결은 함수에 연결된 샘플 쿼리의 개념이라고 합니다.
이 쿼리에 대해 수행해야 하는 첫 번째 변환은 이진 파일을 해석하는 변환입니다. 미리 보기 창에서 이진 파일을 마우스 오른쪽 단추로 클릭하고 CSV 옵션을 선택하여 이진 파일을 CSV 파일로 해석할 수 있습니다.
폴더에 있는 모든 CSV 파일의 형식은 동일합니다. 모두 첫 번째 상위 4개 행에 걸쳐 있는 헤더가 있습니다. 열 머리글은 5행에 있으며 데이터는 다음 이미지와 같이 행 6에서 아래쪽으로 시작됩니다.
변환 샘플 파일에 적용해야 하는 다음 변환 단계 집합은 다음과 같습니다.
상위 4개 행을 제거합니다. 이 작업은 파일의 머리글 섹션의 일부로 간주되는 행을 제거합니다.
참고
행을 제거하거나 행 위치별로 테이블을 필터링하는 방법에 대해 자세히 알아보려면 행 위치별로 필터링으로 이동합니다.
머리글 승격 - 이제 마지막 테이블의 머리글이 테이블의 첫 번째 행에 있습니다. 다음 이미지와 같이 승격할 수 있습니다.
열 머리글을 승격한 후 파워 쿼리는 기본적으로 각 열의 데이터 형식을 자동으로 검색하는 새 변경된 형식 단계를 자동으로 추가합니다. 변환 샘플 파일 쿼리는 다음 이미지와 같습니다.
참고
머리글을 승격 및 강등하는 방법에 대해 자세히 알아보려면 열 머리글 승격 또는 수준 내리기로 이동 하세요.
주의
Transform 파일 함수는 변환 샘플 파일 쿼리에서 수행되는 단계에 의존합니다. 그러나 Transform 파일 함수에 대한 코드를 수동으로 수정하려고 하면 다음과 같은 경고가 표시됩니다.The definition of the function 'Transform file' is updated whenever query 'Transform Sample file' is updated. However, updates will stop if you directly modify function 'Transform file'.
사용자 지정 함수를 새 열로 호출
이제 사용자 지정 함수를 만들고 모든 변환 단계를 통합하면 폴더의 파일 목록이 있는 원래 쿼리로 돌아갈 수 있습니다(이 예제의 CSV 파일 ). 리본의 열 추가 탭 내에서 일반 그룹에서 사용자 지정 함수 호출을 선택합니다. 사용자 지정 함수 호출 창 내에서 출력 테이블을새 열 이름으로 입력합니다. 함수 쿼리 드롭다운에서 함수의 이름인 변환 파일을 선택합니다. 드롭다운 메뉴에서 함수를 선택하면 함수의 매개 변수가 표시되고 테이블에서 이 함수의 인수로 사용할 열을 선택할 수 있습니다. 파일 매개 변수에 전달할 값/인수로 콘텐츠 열을 선택합니다.
확인을 선택하면 출력 테이블이라는 이름의 새 열이 만들어집니다. 이 열에는 다음 이미지와 같이 셀에 Table 값이 있습니다. 간단히 하기 위해 이름 및 출력 테이블을 제외한 모든 열을 이 테이블에서 제거합니다.
함수는 Content 열의 값을 함수의 인수로 사용하여 테이블의 모든 단일 행에 적용되었습니다. 데이터가 원하는 셰이프로 변환되었으므로 확장 아이콘을 선택하여 출력 테이블 열을 확장할 수 있습니다. 확장된 열에는 접두사를 사용하지 마세요.
이름 또는 날짜 열의 값을 검사 폴더에 있는 모든 파일의 데이터가 있는지 확인할 수 있습니다. 이 경우 각 파일에는 지정된 연도의 한 달 동안의 데이터만 포함되므로 Date 열의 값을 검사 수 있습니다. 둘 이상이 표시되면 여러 파일의 데이터를 단일 테이블로 성공적으로 결합했음을 의미합니다.
참고
지금까지 읽은 내용은 기본적으로 파일 결합 환경 중에 발생하지만 수동으로 수행하는 프로세스와 동일합니다.
또한 파일 결합 개요 및 CSV 파일 결합에 대한 문서를 읽어 파워 쿼리에서 파일 결합 환경이 작동하는 방식과 사용자 지정 함수가 수행하는 역할을 더 자세히 이해하는 것이 좋습니다.
기존 사용자 지정 함수에 새 매개 변수 추가
현재 빌드한 항목 위에 새로운 요구 사항이 있다고 상상해 보십시오. 새로운 요구 사항을 사용하려면 파일을 결합하기 전에 파일 내의 데이터를 필터링하여 Country가 파나마와 동일한 행만 가져와야 합니다.
이 요구 사항을 수행하려면 텍스트 데이터 형식을 사용하여 Market이라는 새 매개 변수를 만듭니다. 현재 값에 파나마 값을 입력합니다.
이 새 매개 변수를 사용하여 샘플 변환 파일 쿼리를 선택하고 Market 매개 변수의 값을 사용하여 국가 필드를 필터링합니다.
이 새 단계를 쿼리에 적용하면 Transform 파일 함수가 자동으로 업데이트되며, 이제 Transform 샘플 파일에서 사용하는 두 개의 매개 변수를 기반으로 두 개의 매개 변수가 필요합니다.
그러나 CSV 파일 쿼리 옆에 경고 기호가 있습니다. 이제 함수가 업데이트되었으므로 두 개의 매개 변수가 필요합니다. 따라서 함수를 호출하는 단계에서는 호출된 사용자 지정 함수 단계에서 변환 파일 함수에 인수 중 하나만 전달되었기 때문에 오류 값이 발생합니다.
오류를 해결하려면 적용된 단계에서 호출된 사용자 지정 함수를 두 번 클릭하여 사용자 지정 함수 호출 창을 엽니다. Market 매개 변수에서 파나마 값을 수동으로 입력합니다.
이제 적용된 단계에서 확장된 출력 테이블로 돌아갈 수 있습니다. 쿼리를 확인하여 Country가 파나마와 같은 행만 CSV 파일 쿼리의 최종 결과 집합에 표시되는지 확인합니다.
재사용 가능한 논리 조각에서 사용자 지정 함수 만들기
동일한 변환 집합이 필요한 여러 쿼리 또는 값이 있는 경우 다시 사용할 수 있는 논리의 역할을 하는 사용자 지정 함수를 만들 수 있습니다. 나중에 선택한 쿼리 또는 값에 대해 이 사용자 지정 함수를 호출할 수 있습니다. 이 사용자 지정 함수는 시간을 절약하고 언제든지 수정할 수 있는 중앙 위치에서 변환 집합을 관리하는 데 도움이 될 수 있습니다.
예를 들어 여러 코드가 텍스트 문자열로 있고 다음 샘플 표와 같이 해당 값을 디코딩하는 함수를 만들려고 하는 쿼리를 생각해 보세요.
코드
PTY-CM1090-LAX
LAX-CM701-PTY
PTY-CM4441-MIA
MIA-UA1257-LAX
LAX-XY2842-MIA
먼저 예제로 사용되는 값이 있는 매개 변수를 사용합니다. 이 경우 PTY-CM1090-LAX 값입니다.
해당 매개 변수에서 필요한 변환을 적용하는 새 쿼리를 만듭니다. 이 경우 코드 PTY-CM1090-LAX 를 여러 구성 요소로 분할하려고 합니다.
원본 = PTY
Destination = LAX
Airline = CM
FlightID = 1090
다음 M 코드는 해당 변환 집합을 보여 줍니다.
let
Source = code,
SplitValues = Text.Split( Source, "-"),
CreateRow = [Origin= SplitValues{0}, Destination= SplitValues{2}, Airline=Text.Start( SplitValues{1},2), FlightID= Text.End( SplitValues{1}, Text.Length( SplitValues{1} ) - 2) ],
RowToTable = Table.FromRecords( { CreateRow } ),
#"Changed Type" = Table.TransformColumnTypes(RowToTable,{{"Origin", type text}, {"Destination", type text}, {"Airline", type text}, {"FlightID", type text}})
in
#"Changed Type"