한국부동산원 주간 아파트 시계열 파워쿼리 고급편집기로 pbix 파워bi 보고서 파일 만들기(2026년2월 기준)

한국부동산원 주간 아파트 매매가격 시계열 데이터를 활용해 파워BI(Power BI) 보고서를 만드는 법을 소개합니다. 매번 업데이트되는 엑셀 파일을 일일이 수정할 필요 없이, 파워쿼리 고급 편집기를 이용해 ‘데이터 피벗 해제’와 ‘동적 업데이트’ 설정을 자동화하는 핵심 노하우를 확인해 보세요. 초보자도 쉽게 시각화 보고서를 완성할 수 있습니다.

아래 관련포스팅으로 직접 작성하다가 모르는 부분들은 참고하길 바랍니다.

관련포스팅

파워쿼리 편집기에서 새쿼리 추가하는 법

파워쿼리편집기에서새쿼리만들기

아래 코드에서 공통적으로 각자 PC ‘경로’로 수정

각각 원본 파일의 경로들을 여러분들의 경로(path)로 수정해주세요.

한국부동산원 주간 아파트 시계열 ‘매매지수’ 새쿼리 만들기

가장 먼저 아파트 가격의 흐름을 보여주는 ‘매매지수’ 데이터를 가져옵니다. 이 코드의 핵심은 [열 피벗 해제]입니다. 엑셀 열로 나열된 날짜들을 세로로 정렬하여, 매주 새로운 데이터가 추가되더라도 별도의 코드 수정 없이 자동으로 업데이트되도록 설계되었습니다.

F#
let
    원본 = Excel.Workbook(File.Contents("D:\powerbi114\시계열\r1_week.xlsx"), null, true),
    매매지수_Sheet = 원본{[Item="매매지수",Kind="Sheet"]}[Data],
    #"승격된 헤더" = Table.PromoteHeaders(매매지수_Sheet, [PromoteAllScalars=true]),
    #"필터링된 행" = Table.SelectRows(#"승격된 헤더", each ([#"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"] <> null and [#"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"] <> "       지역#(lf)#(lf)#(lf)#(lf)#(lf) 날짜")),
    #"행/열을 바꾼 테이블" = Table.Transpose(#"필터링된 행"),
    #"승격된 헤더1" = Table.PromoteHeaders(#"행/열을 바꾼 테이블", [PromoteAllScalars=true]),
    #"추가된 인덱스" = Table.AddIndexColumn(#"승격된 헤더1", "인덱스", 1, 1, Int64.Type),
    #"피벗 해제된 다른 열 수" = Table.UnpivotOtherColumns(#"추가된 인덱스", {"인덱스"}, "특성", ""),
    #"변경된 유형2" = Table.TransformColumnTypes(#"피벗 해제된 다른 열 수",{{"특성", type date}, {"", type number}}),
    #"추가된 사용자 지정 항목" = Table.AddColumn(#"변경된 유형2", "종류", each "매매지수")
in
    #"추가된 사용자 지정 항목"

한국부동산원 주간 아파트 시계열 ‘전세지수’ 새쿼리 만들기

매매 시장과 함께 분석해야 할 ‘전세지수’ 데이터 처리 과정입니다. 매매지수와 동일한 구조를 유지하면서도 전세 시트만의 특성을 반영해 데이터를 정제합니다. 파워쿼리를 활용하면 복잡한 전세 시계열 데이터도 한 번의 설정으로 깔끔하게 데이터화할 수 있습니다.

F#
let
    원본 = Excel.Workbook(File.Contents("D:\powerbi114\시계열\r1_week.xlsx"), null, true),
    전세지수_Sheet = 원본{[Item="전세지수",Kind="Sheet"]}[Data],
    #"승격된 헤더" = Table.PromoteHeaders(전세지수_Sheet, [PromoteAllScalars=true]),
    #"필터링된 행" = Table.SelectRows(#"승격된 헤더", each ([#"4. 주간 아파트 전세가격지수(2026.2.2=100.0)"] <> null)),
    #"제거된 상위 행 수" = Table.Skip(#"필터링된 행",1),
    #"행/열을 바꾼 테이블" = Table.Transpose(#"제거된 상위 행 수"),
    #"승격된 헤더1" = Table.PromoteHeaders(#"행/열을 바꾼 테이블", [PromoteAllScalars=true]),
    #"추가된 인덱스" = Table.AddIndexColumn(#"승격된 헤더1", "인덱스", 1, 1, Int64.Type),
    #"피벗 해제된 다른 열 수" = Table.UnpivotOtherColumns(#"추가된 인덱스", {"인덱스"}, "특성", ""),
    #"변경된 유형2" = Table.TransformColumnTypes(#"피벗 해제된 다른 열 수",{{"특성", type date}, {"", type number}}),
    #"추가된 사용자 지정 항목" = Table.AddColumn(#"변경된 유형2", "종류", each "전세지수")
in
    #"추가된 사용자 지정 항목"

한국부동산원 주간 아파트 시계열 ‘매매증감’ 새쿼리 만들기

단순 지수를 넘어 전주 대비 얼마나 올랐는지 확인하기 위한 ‘매매증감’ 쿼리입니다. 현재 주간의 지수와 이전 주간의 지수를 파워쿼리 내에서 [쿼리 병합]을 통해 비교 계산합니다. 이를 통해 변동률 그래프를 자유자재로 그릴 수 있는 기반 데이터가 완성됩니다.

F#
let
    원본 = Excel.Workbook(File.Contents("D:\powerbi114\시계열\r1_week.xlsx"), null, true),
    매매지수_Sheet = 원본{[Item="매매지수",Kind="Sheet"]}[Data],
    #"승격된 헤더" = Table.PromoteHeaders(매매지수_Sheet, [PromoteAllScalars=true]),
    #"필터링된 행" = Table.SelectRows(#"승격된 헤더", each ([#"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"] <> null and [#"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"] <> "       지역#(lf)#(lf)#(lf)#(lf)#(lf) 날짜")),
    #"행/열을 바꾼 테이블" = Table.Transpose(#"필터링된 행"),
    #"승격된 헤더1" = Table.PromoteHeaders(#"행/열을 바꾼 테이블", [PromoteAllScalars=true]),
    #"추가된 인덱스" = Table.AddIndexColumn(#"승격된 헤더1", "인덱스", 1, 1, Int64.Type),
    #"피벗 해제된 다른 열 수" = Table.UnpivotOtherColumns(#"추가된 인덱스", {"인덱스"}, "특성", ""),
    #"변경된 유형2" = Table.TransformColumnTypes(#"피벗 해제된 다른 열 수",{{"특성", type date}, {"", type number}}),
    #"추가된 사용자 지정 항목" = Table.AddColumn(#"변경된 유형2", "종류", each "매매증감"),
    #"병합된 쿼리" = Table.NestedJoin(#"추가된 사용자 지정 항목", {"특성"}, 주간, {"주간"}, "주간", JoinKind.LeftOuter),
    #"확장된 주간" = Table.ExpandTableColumn(#"병합된 쿼리", "주간", {"인덱스"}, {"인덱스.1"}),
    #"추가된 사용자 지정 항목1" = Table.AddColumn(#"확장된 주간", "사용자 지정", each [인덱스.1]-1),
    #"병합된 쿼리1" = Table.NestedJoin(#"추가된 사용자 지정 항목1", {"사용자 지정"}, 주간, {"인덱스"}, "주간", JoinKind.LeftOuter),
    #"확장된 주간1" = Table.ExpandTableColumn(#"병합된 쿼리1", "주간", {"주간"}, {"주간.1"}),
    #"필터링된 행1" = Table.SelectRows(#"확장된 주간1", each ([주간.1] <> null)),
    #"병합된 쿼리2" = Table.NestedJoin(#"필터링된 행1", {"인덱스", "주간.1"}, 매매지수, {"인덱스", "특성"}, "매매지수", JoinKind.LeftOuter),
    #"확장된 매매지수" = Table.ExpandTableColumn(#"병합된 쿼리2", "매매지수", {""}, {"값.1"}),
    #"추가된 사용자 지정 항목2" = Table.AddColumn(#"확장된 매매지수", "사용자 지정.1", each ([]-[값.1])/[값.1]*100),
    #"제거된 열 수" = Table.RemoveColumns(#"추가된 사용자 지정 항목2",{"", "인덱스.1", "사용자 지정", "주간.1", "값.1"}),
    #"다시 정렬한 열 수1" = Table.ReorderColumns(#"제거된 열 수",{"인덱스", "특성", "사용자 지정.1", "종류"}),
    #"이름을 바꾼 열 수" = Table.RenameColumns(#"다시 정렬한 열 수1",{{"사용자 지정.1", ""}}),
    #"변경된 유형3" = Table.TransformColumnTypes(#"이름을 바꾼 열 수",{{"", type number}})
in
    #"변경된 유형3"

한국부동산원 주간 아파트 시계열 ‘전세증감’ 새쿼리 만들기

전세 시장의 등락 폭을 분석하기 위한 ‘전세증감’ 데이터입니다. 매매증감과 마찬가지로 이전 시점의 데이터를 동적으로 참조하여 상승/하락률을 자동 계산합니다. 시장의 변곡점을 파악하는 데 매우 유용한 데이터셋이 됩니다.

F#
let
    원본 = Excel.Workbook(File.Contents("D:\powerbi114\시계열\r1_week.xlsx"), null, true),
    전세지수_Sheet = 원본{[Item="전세지수",Kind="Sheet"]}[Data],
    #"승격된 헤더" = Table.PromoteHeaders(전세지수_Sheet, [PromoteAllScalars=true]),
    #"필터링된 행" = Table.SelectRows(#"승격된 헤더", each ([#"4. 주간 아파트 전세가격지수(2026.2.2=100.0)"] <> null)),
    #"제거된 상위 행 수" = Table.Skip(#"필터링된 행",1),
    #"행/열을 바꾼 테이블" = Table.Transpose(#"제거된 상위 행 수"),
    #"승격된 헤더1" = Table.PromoteHeaders(#"행/열을 바꾼 테이블", [PromoteAllScalars=true]),
    #"추가된 인덱스" = Table.AddIndexColumn(#"승격된 헤더1", "인덱스", 1, 1, Int64.Type),
    #"피벗 해제된 다른 열 수" = Table.UnpivotOtherColumns(#"추가된 인덱스", {"인덱스"}, "특성", ""),
    #"변경된 유형2" = Table.TransformColumnTypes(#"피벗 해제된 다른 열 수",{{"특성", type date}}),
    #"추가된 사용자 지정 항목" = Table.AddColumn(#"변경된 유형2", "종류", each "전세증감"),
    #"병합된 쿼리" = Table.NestedJoin(#"추가된 사용자 지정 항목", {"특성"}, 주간, {"주간"}, "주간", JoinKind.LeftOuter),
    #"확장된 주간" = Table.ExpandTableColumn(#"병합된 쿼리", "주간", {"인덱스"}, {"인덱스.1"}),
    #"추가된 사용자 지정 항목1" = Table.AddColumn(#"확장된 주간", "사용자 지정", each [인덱스.1]-1),
    #"병합된 쿼리1" = Table.NestedJoin(#"추가된 사용자 지정 항목1", {"사용자 지정"}, 주간, {"인덱스"}, "주간", JoinKind.LeftOuter),
    #"확장된 주간1" = Table.ExpandTableColumn(#"병합된 쿼리1", "주간", {"주간"}, {"주간.1"}),
    #"필터링된 행1" = Table.SelectRows(#"확장된 주간1", each ([주간.1] <> null)),
    #"병합된 쿼리2" = Table.NestedJoin(#"필터링된 행1", {"인덱스", "주간.1"}, 전세지수, {"인덱스", "특성"}, "전세지수", JoinKind.LeftOuter),
    #"확장된 전세지수" = Table.ExpandTableColumn(#"병합된 쿼리2", "전세지수", {""}, {"값.1"}),
    #"추가된 사용자 지정 항목2" = Table.AddColumn(#"확장된 전세지수", "사용자 지정.1", each ([]-[값.1])/[값.1]*100),
    #"제거된 열 수" = Table.RemoveColumns(#"추가된 사용자 지정 항목2",{"", "인덱스.1", "사용자 지정", "주간.1", "값.1"}),
    #"다시 정렬한 열 수1" = Table.ReorderColumns(#"제거된 열 수",{"인덱스", "특성", "사용자 지정.1", "종류"}),
    #"이름을 바꾼 열 수" = Table.RenameColumns(#"다시 정렬한 열 수1",{{"사용자 지정.1", ""}}),
    #"변경된 유형3" = Table.TransformColumnTypes(#"이름을 바꾼 열 수",{{"", type number}})
in
    #"변경된 유형3"

한국부동산원 주간 아파트 시계열 ‘주간’ 새쿼리 만들기

데이터 리포트의 기준이 될 ‘날짜(주간)’ 마스터 테이블을 생성합니다. 부동산원 시계열 데이터에서 고유한 날짜 목록을 추출하고 인덱스를 부여함으로써, 보고서 내에서 시간 순서대로 데이터를 정렬하고 필터링하는 컨트롤 타워 역할을 수행합니다.

F#
let
    원본 = Excel.Workbook(File.Contents("D:\powerbi114\시계열\r1_week.xlsx"), null, true),
    매매지수_Sheet = 원본{[Item="매매지수",Kind="Sheet"]}[Data],
    #"승격된 헤더" = Table.PromoteHeaders(매매지수_Sheet, [PromoteAllScalars=true]),
    #"제거된 다른 열 수" = Table.SelectColumns(#"승격된 헤더",{"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"}),
    #"필터링된 행" = Table.SelectRows(#"제거된 다른 열 수", each ([#"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"] <> null and [#"2. 주간 아파트 매매가격지수(2026.2.2=100.0)"] <> "       지역#(lf)#(lf)#(lf)#(lf)#(lf) 날짜")),
    #"정렬된 행 수" = Table.Sort(#"필터링된 행",{{"2. 주간 아파트 매매가격지수(2026.2.2=100.0)", Order.Ascending}}),
    #"이름을 바꾼 열 수" = Table.RenameColumns(#"정렬된 행 수",{{"2. 주간 아파트 매매가격지수(2026.2.2=100.0)", "주간"}}),
    #"변경된 유형1" = Table.TransformColumnTypes(#"이름을 바꾼 열 수",{{"주간", type date}}),
    #"추가된 인덱스" = Table.AddIndexColumn(#"변경된 유형1", "인덱스", 1, 1, Int64.Type)
in
    #"추가된 인덱스"

한국부동산원 주간 아파트 시계열 ‘r1_week’ 새쿼리 만들기

앞서 개별적으로 만든 매매/전세의 지수와 증감 데이터를 하나로 통합하는 과정입니다. [테이블 추가(Combine)] 기능을 사용하여 모든 데이터를 세로로 길게 쌓아 관리합니다. 이렇게 통합된 데이터는 시각화 단계에서 종류별(매매/전세 등) 필터링을 가능하게 해줍니다.

F#
let
    원본 = Table.Combine({매매지수, 전세지수, 매매증감, 전세증감})
in
    원본

한국부동산원 주간 아파트 시계열 ‘r1_지역명’ 새쿼리 만들기

부동산 데이터 분석의 핵심은 ‘지역’입니다. 지역 코드와 시도, 시군구 명칭이 담긴 JSON 파일을 불러와 데이터 모델에 연결합니다. 이 쿼리를 통해 사용자가 원하는 지역만 콕 집어서 분석할 수 있는 ‘지역 선택 슬라이서’를 만들 수 있습니다.

json파일로새쿼리만들기
F#
let
    원본 = Json.Document(File.Contents("D:\powerbi114\시계열\r1_지역명.json")),
    #"테이블로 변환됨" = Table.FromList(원본, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"확장된 Column1" = Table.ExpandRecordColumn(#"테이블로 변환됨", "Column1", {"index", "sang", "ha", "area_code", "sido", "sigun", "gubun"}, {"index", "sang", "ha", "area_code", "sido", "sigun", "gubun"}),
    #"변경된 유형" = Table.TransformColumnTypes(#"확장된 Column1",{{"index", Int64.Type}, {"sang", type text}, {"ha", type text}, {"area_code", type text}, {"sido", type text}, {"sigun", type text}, {"gubun", Int64.Type}})
in
    #"변경된 유형"

테이블 관계설정으로 지역선택 필터링 하기

데이터 로드가 끝났다면 마지막으로 모델 보기에서 [관계 설정]을 진행합니다. 지역명 테이블과 통합 데이터(r1_week)를 ‘인덱스’ 또는 ‘지역코드’로 연결합니다. 이 관계가 올바르게 설정되어야 슬라이서에서 지역을 선택했을 때 모든 차트가 유기적으로 반응하게 됩니다.

테이블관계설정하기

댓글 남기기

Leave a Comment