날짜 테이블 만들기

완료됨

Power BI에서 보고서를 만드는 동안 일반적인 비즈니스 요구 사항은 날짜 및 시간을 기반으로 계산을 수행하는 것입니다. 조직은 월, 분기, 회계 연도 등에 걸쳐 비즈니스 업무 방식을 파악하고자 합니다. 이러한 이유로, 이러한 시간 값의 형식을 올바르게 지정하는 것이 중요합니다. Power BI에서는 날짜 열과 테이블이 자동 검색되지만, 날짜를 조직에서 요구하는 형식으로 가져오기 위해 추가 단계를 수행해야 하는 상황이 발생할 수 있습니다.

예를 들어 조직의 영업 팀을 위한 보고서를 개발한다고 가정해 보겠습니다. 데이터베이스에는 판매, 주문, 제품 등의 테이블이 포함되어 있습니다. Sales 및 Orders 등 많은 테이블에는 다음 그림의 Sales 및 Orders 테이블에 있는 ShipDate 열과 OrderDate 열처럼 고유한 날짜 열이 있는 것을 볼 수 있습니다. 연간 및 월별로 총 판매량과 주문량을 보여 주는 테이블을 개발해야 합니다. 각각 고유한 날짜 열을 참조하는 여러 테이블을 사용하여 시각적 개체를 작성하려면 어떻게 하면 될까요?

Sales.ShipDate 및 Order.OrderDate가 강조 표시된 의미 체계 모델 발췌 스크린샷

이 문제를 해결하기 위해 여러 테이블에서 사용할 수 있는 공용 날짜 테이블을 만들 수 있습니다. 다음 섹션에서는 Power BI에서 이 작업을 수행하는 방법을 설명합니다.

공용 날짜 테이블 만들기

공용 날짜 테이블을 작성할 수 있는 방법은 다음과 같습니다.

  • 원본 데이터

  • DAX

  • 파워 쿼리

원본 데이터

경우에 따라 원본 데이터베이스와 데이터 웨어하우스에는 이미 고유한 날짜 테이블이 있습니다. 데이터베이스를 디자인한 관리자가 철저하게 처리했다면 이러한 테이블을 사용하여 다음 작업을 수행할 수 있습니다.

  • 회사 휴일 식별

  • 역년과 회계 연도 구분

  • 주말과 평일 식별

원본 데이터 테이블이 완성도가 높고 즉시 사용할 준비가 되어 있습니다. 이와 같은 테이블이 있는 경우 의미 체계 모델로 가져와서 이 섹션에 설명된 다른 메서드를 사용하지 마세요. 원본 데이터 테이블은 Power BI 외에 사용할 수도 있는 다른 도구와 공유될 수 있으므로 이 테이블을 사용하는 것이 좋습니다.

원본 데이터 테이블이 없는 경우 다른 방법을 사용하여 공용 날짜 테이블을 작성할 수 있습니다.

DAX

DAX(Data Analysis Expression) 함수인 CALENDARAUTO() 또는 CALENDAR()를 사용하여 공용 날짜 테이블을 작성할 수 있습니다. CALENDAR() 함수는 함수에 인수로 입력된 시작 날짜와 종료 날짜를 기준으로 연속 날짜 범위를 반환합니다. 또는 CALENDARAUTO() 함수는 의미 체계 모델에서 자동으로 결정되는 연속적이고 전체 날짜 범위를 반환합니다. 시작 날짜는 의미 체계 모델에 있는 가장 빠른 날짜로 선택되며 종료 날짜는 의미 체계 모델에 있는 최신 날짜와 CALENDARAUTO() 함수에 인수로 포함하도록 선택할 수 있는 회계 월로 채워진 데이터입니다. 이 예제에서는 2011년 5월 31일(영업 팀에서 이 데이터를 추적하기 시작한 첫날)부터 이후 10년간의 데이터만 표시하려고 하므로 CALENDAR() 함수를 사용합니다.

Power BI Desktop 새 테이블을 선택한 다음, 다음 DAX 수식에 를 입력합니다.

Dates  = CALENDAR(DATE(2011, 5, 31), DATE(2022, 12, 31))

Power BI의 CALENDAR 수식 스크린샷.

이제 사용할 수 있는 날짜 열이 있습니다. 하지만 이 열은 약간 스파스입니다. 또한 연도, 월 번호, 해당 연도의 주, 요일에 대해서만 열을 표시하려고 합니다. 리본 메뉴에서 새 열를 선택하고 Date 테이블에서 연도를 검색하는 다음 DAX 수식을 입력하여 이 작업을 수행할 수 있습니다.

Year = YEAR(Dates[Date])

DAX 수식을 사용하여 열을 추가하는 스크린샷.

동일한 프로세스를 수행하여 월 번호, 주 번호 및 요일을 검색할 수 있습니다.

MonthNum = MONTH(Dates[Date])
WeekNum = WEEKNUM(Dates[Date])
DayoftheWeek = FORMAT(Dates[Date], "DDDD")

완료되면 테이블에 다음 그림과 같은 열이 포함됩니다.

DAX 테이블의 최종 열 스크린샷.

이제 DAX를 사용하여 공용 날짜 테이블을 만들었습니다. 이 프로세스는 의미 체계 모델에만 새 테이블을 추가합니다. 날짜 테이블과 Sales 및 Order 테이블 간의 관계를 설정한 다음, 테이블을 의미 체계 모델의 공식 날짜 테이블로 표시해야 합니다. 그러나 이러한 작업을 완료하기 전에 공용 날짜 테이블을 작성하는 다른 방법, 즉 파워 쿼리를 사용하는 방법을 고려해야 합니다.

파워 쿼리

파워 쿼리에서 쿼리를 작성하는 데 사용되는 개발 언어인 M 언어를 사용하여 공용 날짜 테이블을 정의할 수 있습니다.

Power BI Desktop에서 데이터 변환을 선택하여 파워 쿼리로 이동합니다. 왼쪽 쿼리 창의 빈 공간을 마우스 오른쪽 단추로 클릭하여 다음 드롭다운 메뉴를 엽니다. 여기서 새 쿼리 > 빈 쿼리를 선택합니다.

Power BI의 새 쿼리 작성 스크린샷.

나타나는 새 쿼리 뷰에서 다음 M 수식을 입력하여 달력 테이블을 작성합니다.

= List.Dates(#date(2011,05,31), 365*10, #duration(1,0,0,0))

M 수식을 사용한 일정 테이블 개발 스크린샷.

판매 데이터의 경우 시작 날짜에 데이터에 존재하는 가장 이른 날짜인 2011년 5월 31일을 반영하고자 합니다. 또한 이후 날짜를 포함하여 다음 10년에 해당하는 날짜를 확인하려고 합니다. 이러한 접근 방식을 사용하면 새 판매 데이터가 유입될 때 이 테이블을 다시 만들 필요가 없습니다. 기간을 변경할 수도 있습니다. 이 경우 매일에 해당하는 데이터 요소를 사용하고 싶지만 시간, 분, 초 단위로 증분할 수도 있습니다. 다음 그림은 결과를 보여 줍니다.

판매 일정 목록 스크린샷.

이 프로세스에서 성공하면 날짜 테이블이 아니라 날짜 목록을 얻게 됩니다. 이 오류를 해결하려면 리본의 변환 탭으로 이동하고 변환 > 테이블로를 선택합니다. 이름에서 알 수 있듯이, 이 기능은 목록을 테이블로 변환합니다. 열 이름을 DateCol로 바꿀 수도 있습니다.

Power Query 편집기에서 목록을 테이블로 변환하는 스크린샷.

다음으로, 시각적 개체에서 계층 구조를 만들 수 있도록 새 테이블에 열을 추가하여 연도, 월, 주, 일을 기준으로 날짜를 표시하고자 합니다. 그러기 위한 첫 번째 작업은 열 이름 옆에 있는 아이콘을 선택하고 결과로 나타나는 드롭다운 메뉴에서 날짜 형식을 선택하여 열의 형식을 변경하는 것입니다.

유형을 날짜로 변경하는 스크린샷.

날짜 형식을 선택한 후에는 연도, 월, 주, 일에 대한 열을 추가할 수 있습니다. 열 추가로 이동하여 다음 그림과 같이 날짜 아래의 드롭다운 메뉴를 선택한 후 연도를 선택합니다.

파워 쿼리를 통해 열을 추가하는 스크린샷.

Power BI가 DateCol에서 끌어온 모든 연도의 열을 추가한 것을 볼 수 있습니다.

파워 쿼리를 사용하여 테이블에 열을 추가하는 스크린샷.

동일한 프로세스를 월, 주, 일에 대해 완료합니다. 이 프로세스가 완료되면 테이블에 다음 그림과 같은 열이 포함됩니다.

DateCol, Year, Month, Week of Year 및 Day Name 열 스크린샷.

이제 파워 쿼리를 사용하여 공용 날짜 테이블을 작성했습니다.

이전 단계에서는 테이블을 의미 체계 모델로 가져오는 방법을 보여줍니다. 이제 테이블을 공식 날짜 테이블로 표시하여 Power BI에서 모든 향후 값에 대해 테이블을 인식하고 서식이 올바른지 확인할 수 있도록 해야 합니다.

공식 날짜 테이블로 표시

테이블을 공식 날짜 테이블로 표시하는 첫 번째 작업은 Fields 창에서 새 테이블을 찾는 것입니다. 테이블의 이름을 마우스 오른쪽 단추로 클릭한 후 다음 그림과 같이 날짜 테이블로 표시를 선택합니다.

테이블을 날짜 테이블로 표시하면 Power BI에서는 유효성 검사를 수행하여 데이터가 Null 값을 포함하지 않고, 고유하며, 일정 기간에 걸친 연속 날짜 값을 포함하는지 확인합니다. 테이블에서 날짜로 표시할 특정 열을 선택할 수도 있습니다. 이 방법은 테이블에 많은 열이 있을 때 유용할 수 있습니다. 테이블을 마우스 오른쪽 단추로 클릭하고 날짜 테이블로 표시를 선택한 다음, 날짜 테이블 설정을 선택합니다. 날짜로 표시할 열을 선택할 수 있는 다음 창이 나타납니다.

날짜 테이블로 표시 대화 상자 스크린샷.

날짜 테이블로 표시를 선택하면 날짜 테이블로 표시한 테이블의 날짜 필드에서 자동 생성된 계층 구조가 제거됩니다. 다른 날짜 필드의 경우에는 해당 필드와 날짜 테이블 간에 관계를 설정할 때까지, 또는 자동 날짜/시간 기능을 비활성화할 때까지 자동 계층 구조가 계속 존재합니다. 필드 창에서 연도, 월, 주 또는 일 열을 마우스 오른쪽 단추로 클릭한 다음 새 계층 구조를 선택하는 방법으로 공용 날짜 테이블에 계층 구조를 수동으로 추가할 수 있습니다. 이 프로세스는 이 모듈의 뒷부분에서 자세히 설명합니다.

시각적 개체 작성

Sales 테이블과 Orders 테이블 간의 시각적 개체를 작성하려면 새로운 이 공용 날짜 테이블과 Sales 테이블 및 Orders 테이블 간에 관계를 설정해야 합니다. 그러면 새 날짜 테이블을 사용하여 시각적 개체를 작성할 수 있게 됩니다. 이 작업을 완료하려면 Model>관계 관리로 이동합니다. 여기서 OrderDate 열을 사용하여 공용 날짜 테이블과 Orders 테이블 및 Sales 테이블 간에 관계를 만들 수 있습니다. 다음 스크린샷에서는 이 관계의 예를 보여 줍니다.

관계 만들기 대화 상자 스크린샷.

관계를 만든 후에는 DAX 또는 파워 쿼리 메서드를 사용하여 개발한 공용 날짜 테이블을 사용하여 시간별 총 판매 및 주문 수량 시각적 개체를 작성할 수 있습니다.

총 판매량을 결정하려면, Sales 테이블의 Amount 열에서 총 판매 수익이 아닌 각 판매의 수익만 살펴보기 때문에 판매량을 모두 더해야 합니다. 다음 측정 계산을 사용하여 이 작업을 완료할 수 있습니다. 이 계산에 대해서는 이후 논의에서 설명합니다. 이 측정을 작성할 때 사용하는 계산은 다음과 같습니다.

#Total Sales = SUM(Sales[‘Amount’])

완료되면 시각화 탭으로 돌아간 후 테이블 시각적 개체를 선택하여 테이블을 만들 수 있습니다. 연도와 월을 기준으로 총 주문 및 판매를 확인하려고 하므로 날짜 테이블, OrderQty 열, #TotalSales 측정에서 Year 열과 Month 열을 포함하면 됩니다. 계층 구조에 대해 알아볼 때 연도에서 월로 드릴다운할 수 있는 계층 구조를 만들 수도 있습니다. 이 예에서는 이 구조를 나란히 볼 수 있습니다. 이제 공용 날짜 테이블을 사용하여 시각적 개체를 만들었습니다.

DAX를 사용한 공용 날짜 열 스크린샷.