목차
개요
날짜를 포함한 데이터를 분석할 때 DAX 식으로 만든 캘린더 테이블을 연결해서 사용해 여러 가지 측정값을 효과적으로 만들 수 있었고, power BI 시간 인텔리전스 기능으로 시각화 개체에서 날짜 계층화를 활용할 수 있었습니다.
데이터 원본은 텍스트 형식 CSV 파일 또는 엑셀 파일이 대표적인데요, 날짜 데이터가 Power BI에 딱 맞는 형태가 아닌 경우도 많습니다. 엑셀을 오래 사용했어도 날짜/시간 데이터를 다루는 데 쉽지 않죠.
아래처럼 Power BI 캘린더 테이블을 연결했음에도, 시각적 개체의 필터 컨텍스트가 동작하지 않는 경우가 있습니다.
이번 포스트는 이 문제를 어떻게 해결할 수 있는지 다루도록 할게요.
DAX 식으로 만든 캘린더 테이블은 아래 포스트를 참고하세요.
Power BI DAX 기초 - 캘린더 만들기
목차 개요 우리가 분석하려고 하는 대부분의 데이터는 날짜 정보를 담고 있습니다. 그리고 이를 바탕으로 분석을 하려고 때, 그룹화 또는 계층화 (일, 월, 분기, 연) 할 수 있으면 특정 기간을
brightsomuch.tistory.com
예제 원본 데이터
DAX 식으로 만든 캘린더와 연결할 때 주의해야 할 데이터 형식을 갖는 원본 데이터입니다.
텍스트 형식 CSV 파일로 만들었는데, [Incident Date]와 캘린더를 연결할 예정입니다. 형식을 보면 날짜와 시간 정보를 모두 포함하고 있습니다.
날짜/시간 타입을 갖는 원본 데이터 로딩
원본 데이터 가져오기
Power BI Desktop에서 홈 메뉴의 데이터 가져오기, 텍스트/CSV를 통해 CSV 파일을 모델에 넣을 수 있습니다.
많은 경우 Power BI에 포함된 파워 쿼리가 알아서 동작을 잘 하지만, 항상 "데이터 변환"을 선택해서 확인하는 습관은 필요합니다.
이번에도 "데이터 변환"을 선택해 원본 데이터 CSV 파일이 어떤 변환을 거쳐 Power BI 테이블이 되는지 확인을 합니다.
파워 쿼리 실행
"데이터 변환"을 선택하면 아래 화면처럼 파워 쿼리 (Power Query) 프로그램이 실행됩니다. 참고로 엑셀에 기본으로 탑재되어 있는 파워 쿼리와 동일합니다.
파워 쿼리에 대한 자세한 설명은 다른 포스트에서 다루기로 하고, 기본적으로 파워 쿼리는 적용된 단계에 정의된 순서에 따라 수행합니다.
특히 마지막 단계의 변경된 유형의 내용을 보면, [Incident Date] 열이 datetime (날짜/시간) 형식으로 변환되었다는 것을 알 수 있습니다. 이는 파워 쿼리가 텍스트를 자동으로 분석해서 어떤 형식인지 판단하는 기능을 갖고 있기 때문입니다.
이러한 파워 쿼리의 동작으로 어떤 결과가 만들어지는지 확인하기 위해서 아무런 수정을 하지 않습니다.
그리고 홈 메뉴에서 닫기 및 적용을 선택해 파워 쿼리를 종료합니다.
Power BI 시간 인텔리전스
데이터가 로딩된 이후 Power BI에서 [Incident Date]를 어떤 형식을 갖고 있는지 확인합니다. 파워 쿼리가 만든 날짜/시간 형식으로 되어 있네요.
이에 따라 Power BI 시간 인텔리전스 기능은 [Incident Date] 데이터를 날짜 계층 구조로 만듭니다.
Power BI 시간 인텔리전스 기능은 아래 포스트를 참고하세요.
Power BI DAX 기초 - 시간 인텔리전스
목차 개요 날짜/시간 정보가 포함되어 있는 데이터를 분석하려고 할 때, 특정 기간 동안의 데이터를 효과적으로 계산하기 위해 Power BI Desktop은 “시간 인텔리전스” 기능을 제공합니다. 이
brightsomuch.tistory.com
결과를 확인하기 위해 간단한 측정값 [Count of Region]을 아래와 같이 만들어둡니다.
COUNT ( datetime_calendar[Region] )
Power BI 시간 인텔리전스 기능이 활성화 되어 있는 상태이기 때문에, datetime_calendar [Incident Date]는 날짜별 계층화가 되어 있습니다. 따라서 시각적 개체에서 활용할 수 있습니다.
시각적 개체 테이블에서 Year/Month 필터 컨텍스트가 잘 동작하고 있습니다.
캘린더 연결 그리고 문제점
캘린더 테이블 생성 및 연결
지금 상태에서 DAX로 만든 캘린더를 연결해 보도록 하겠습니다.
CALENDARAUTO 함수를 사용했는데, 자동으로 날짜 형식을 갖는 열 ([Incident Date])을 감지해서 아래와 같이 2021년 날짜 테이블이 만들어졌습니다.
관계는 일대다 (1:*)로 만들어야 합니다. 캘린더는 날짜가 유일하지만, 연결할 테이블에는 동일 날짜가 하나 이상 있을 수 있습니다.
Calendar [Date]와 datetime_calendar [Incident Date]를 연결하면 아래와 같이 그 결과를 확인할 수 있습니다.
- 모델 보기: 일대다 (1:*) 형태로 연결되어 있습니다.
- 보고서 보기: datetime_calendar [Incident Date]은 날짜 계층화 성질을 잃었습니다.
날짜 데이터 형식 불일치
이 상태에서 시각적 개체를 통해 그 결과를 확인해보면 어떻게 될까요?
전체 개수는 맞지만, 우리가 원하는 필터 컨텍스트로 측정값 [Count of Region]이 계산을 못하고 있습니다.
뭐가 문제일까요?
필터 컨텍스트가 이상하다는 것은 날짜 계층별로 필터링을 못하고 있다는 의미입니다.
datetime_calendar [Incident Date]와 Calendar [Date]의 데이터 형식이 다르기 때문에 발생합니다.
Power BI에서 테이터 형식 변환 - 효과 없음
테이블 보기에서 [Incident Date] 열을열을 “날짜/시간” 에서 “날짜”로 변경해 봅니다.
그러나 문제가 해결되지 않습니다.
Power BI에 로딩되기 전에 데이터 형식이 바뀌어 있어야 합니다.
해결 방안 - 파워 쿼리에서 날짜 테이터 형식 일치 작업
파워 쿼리 작업
Power BI에 데이터가 로딩되기 전에 파워 쿼리에서 데이터를 가공할 수 있습니다.
홈 메뉴의 데이터 변화를 선택해 파워 쿼리를 실행시킵니다.
[Inciden Date] 열에서 마우스 오른쪽 버튼을 클릭해 형식 변경, 날짜를 선택합니다.
열 형식 변경을 묻는 창이 뜨는데, 여기에서 "새 단계 추가"를 선택합니다. 기존 단계 다음에 변환을 수행한다는 의미입니다.
- 현재 전환 바꾸기: 기존 형식 전환은 텍스트에서 날짜/시간으로 바꾸었던 것이었죠. 그래서 기존 것을 바꿔 텍스트에서 날짜로 바꾸겠다는 의미입니다. 가끔 인식을 잘못해서 오류가 발생합니다.
새 단계 추가를 선택하면 아래처럼날짜/시간으로 바뀐 결과에서 날짜로 변환하는 새로운 단계 “변경된 유형1”을 만들게 됩니다.
그 결과 [Incident Date] 열은 날짜 형식을 갖게 되었습니다.
필요한 파워 쿼리 작업은 모두 끝났습니다. 홈 메뉴에서 닫기 및 적용을 선택해 파워 쿼리를 종료합니다.
Power BI - 필터 컨텍스트 정상 동작
Power BI 테이블 보기에서도 데이터 형식이 날짜로 바뀌어 있음을 알 수 있습니다.
이제 필터 컨텍스트는 제대로 동작합니다.
마치며
캘린더 테이블이 주는 장점이 크기 때문에, 많은 DAX 식과 시각적 개체는 캘린더 테이블 기반으로 작성됩니다.
따라서 날짜를 포함한 원본 데이터를 로딩한 이후 캘린더 테이블과 연결이 잘 되는지 확인하는 것은 맨 처음 해야 할 중요한 단계죠.
그래서 간단한 측정값을 만들어 날짜 계층화에 따라 원하는 결과가 나오는지, 즉 필터 컨텍스트가 날짜 계층화를 포함했을 때 결과를 확인한 후에 작업 진행해야 합니다.
이번 포스트에서 보셨듯이 Power BI에서는 데이터 형식을 일치시키는 것이 정말 중요합니다.
그래서 캘린더 연결 뿐 아니라 다른 작업 시에도 비슷한 문제가 발생할 때, 혹시 데이터 형식이 일치하지 않아서 발생하는 문제는 아닌지 살펴볼 필요가 있습니다.
'Power BI' 카테고리의 다른 글
Power BI DAX 기초 – DAX 캘린더와 Power BI 시간 인텔리전스 기능 구분 (0) | 2024.07.30 |
---|---|
Power BI 매개변수 동적 범례 활용하기 (0) | 2024.07.26 |
Power BI 측정값 관리 - 테이블 (4) | 2024.07.24 |
Power BI DAX 기초 – DATESINPERIOD 이동 평균값 구하기 (2) | 2024.07.23 |
Power BI DAX 기초 – DATESYTD 연도별 누적값 구하기 (3) | 2024.07.22 |