소개

완료됨

DAX(Data Analysis Expressions) 수식을 작성하여 계산된 테이블을 모델에 추가할 수 있습니다. 수식은 기존 모델 데이터를 복제하거나 변환하여 새 테이블을 생성할 수 있습니다.

참고

계산된 테이블은 외부 데이터에 연결할 수 없습니다. 이렇게 하려면 파워 쿼리를 사용해야 합니다.

계산된 테이블 수식은 테이블 개체를 반환해야 합니다. 가장 간단한 수식은 기존 모델 테이블을 복제할 수 있습니다.

계산된 테이블에는 다음과 같은 비용이 듭니다. 모델 스토리지 크기가 증가하며 데이터 새로 고침 시간이 길어질 수 있습니다. 그 이유는 새로 고친 테이블에 대한 수식 종속성이 있을 경우 계산된 테이블이 다시 계산되기 때문입니다.

테이블 복제

다음 섹션에서는 계산된 테이블을 만들어 해결할 수 있는 일반적인 디자인 문제에 대해 설명합니다. 먼저 Adventure Works DW 2020 M03.pbix 파일을 다운로드하여 연 다음 모델 다이어그램으로 전환합니다.

모델 다이어그램에서 Sales 테이블에는 Date 테이블에 대한 세 개의 관계가 있습니다.

이미지는 다음 두 개의 테이블을 보여 줍니다. Sales 및 Date. 테이블 간의 관계는 세 가지가 있습니다. 하나의 관계만 활성 상태입니다.

Sales 테이블은 주문 날짜, 배송 날짜 및 기한을 기준으로 판매 데이터를 저장하기 때문에 모델 다이어그램은 세 가지 관계를 보여 줍니다. OrderDateKey, ShipDateKeyDueDateKey 열을 살펴보면 하나의 관계가 실선으로 표시되는데, 이것이 활성 관계입니다. 파선으로 표시되는 다른 관계는 비활성 관계입니다.

참고

두 모델 테이블 사이에는 하나의 활성 관계만 존재할 수 있습니다.

다이어그램에서 활성 관계 위로 커서를 이동하여 관련 열을 강조 표시하면 모델 다이어그램과 상호 작용하여 관련 열에 대해 알아볼 수 있습니다. 이 경우 활성 관계는 Sales 테이블의 OrderDateKey 열을 필터링합니다. 따라서 Date 테이블에 적용되는 필터는 주문 날짜별로 필터링하기 위해 Sales 테이블로 전파됩니다. 배송 날짜 또는 기한을 기준으로는 필터링되지 않습니다.

다음 단계는 Date 테이블과 Sales 테이블 간의 두 비활성 관계를 삭제하는 것입니다. 관계를 삭제하려면 관계를 마우스 오른쪽 단추로 클릭한 다음 상황에 맞는 메뉴에서 삭제 를 선택합니다. 두 비활성 관계를 모두 삭제해야 합니다.

그런 다음 보고서 사용자가 배송 날짜별로 판매를 필터링 할 수 있도록 새 테이블을 추가합니다. 보고서 뷰로 전환한 다음 모델링 리본 탭의 계산 그룹에서 새 테이블 을 선택합니다.

이미지는 Power BI Desktop 모델링 리본 탭을 보여 줍니다. 계산 그룹에서 새 테이블 명령이 강조 표시되어 있습니다.

리본 아래에 있는 수식 상자에 다음 계산된 테이블 정의를 입력한 다음 Enter 키를 누릅니다.

Ship Date = 'Date'

계산된 테이블 정의는 Date 테이블 데이터를 복제하여 Ship Date 라는 새 테이블을 생성합니다. Ship Date 테이블에는 Date 테이블과 정확히 동일한 열과 행이 있습니다. Date 테이블 데이터를 새로 고칠 때 Ship Date 테이블이 다시 계산되므로 항상 동기화됩니다.

모델 다이어그램으로 전환하면 Ship Date 테이블이 추가된 것을 볼 수 있습니다.

이미지는 Date 테이블과 동일한 열로 구성된 Ship Date 테이블을 보여 줍니다.

그런 다음 Ship Date 테이블의 DateKey 열과 Sales 테이블의 ShipDateKey 열 간에 관계를 만듭니다. Ship Date 테이블의 DateKey 열을 Sales 테이블의 ShipDateKey 열로 끌면 관계를 만들 수 있습니다.

계산된 테이블은 데이터만 복제합니다. 열 표시 유형 또는 계층 구조와 같은 모델 구성은 복제되지 않습니다. 필요에 따라 새 테이블을 구성해야 합니다.

계산된 테이블의 열 이름을 바꿀 수 있습니다. 이 예제에서는 해당 용도를 더 잘 설명하도록 열 이름을 바꾸는 것이 좋습니다. 예를 들어 Ship Date 테이블의 Fiscal Year 열은 이름을 Ship Fiscal Year 로 바꿀 수 있습니다. Ship Date 테이블의 필드를 시각적 개체에서 사용하면 해당 이름이 시각적 개체 제목 또는 축 레이블과 같은 캡션에 자동으로 포함됩니다.

Ship Date 테이블의 디자인을 완료하려면 다음을 수행할 수 있습니다.

  • 다음과 같이 열 이름을 변경합니다.

    • DateShip Date

    • Fiscal YearShip Fiscal Year

    • Fiscal QuarterShip Fiscal Quarter

    • MonthShip Month

    • Full DateShip Full Date

  • Ship Full Date 열을 Ship Date 열 기준으로 정렬합니다.

  • Ship Month 열을 MonthKey 열 기준으로 정렬합니다.

  • MonthKey 열을 숨깁니다.

  • 다음 수준이 포함된 Fiscal 이라는 계층 구조를 만듭니다.

    • Ship Fiscal Year

    • Ship Fiscal Quarter

    • Ship Month

    • Ship Full Date

  • Ship Date 열을 사용하여 Ship Date 테이블을 날짜 테이블로 표시합니다.

앞서 설명한 대로 계산된 테이블은 두 테이블 간에 여러 관계가 있는 시나리오에서 유용합니다. 모델에 날짜 테이블을 추가하는 데에도 사용할 수 있습니다. 날짜 테이블은 시간 인텔리전스라는 특수 시간 필터를 적용하는 데 필요합니다.

날짜 테이블 만들기

다음 예제에서는 두 번째 계산 테이블을 이번에는 CALENDARAUTO DAX 함수를 사용하여 만듭니다.

다음 정의를 사용하여 Due Date 계산된 테이블을 만듭니다.

Due Date = CALENDARAUTO(6)

CALENDARAUTO 함수는 연도의 마지막 달 번호에 해당하는 단일 선택적 인수를 사용하고 단일 열 테이블을 반환합니다. 월 번호를 전달하지 않으면 12(12월)로 간주됩니다. 예를 들어 Adventure Works에서는 회계연도가 매년 6월 30일에 종료되므로 6월에 대한 값 6이 전달됩니다.

이 함수는 모델의 모든 날짜 및 날짜/시간 열을 검색하여 저장된 가장 빠른 날짜 값과 가장 늦은 날짜 값을 확인합니다. 그런 다음 모델의 모든 날짜가 포함되는 전체 날짜 집합을 생성하여 전체 연도의 날짜가 로드되도록 합니다. 예를 들어 모델에 저장된 가장 빠른 날짜가 2017년 10월 15일이면 CALENDARAUTO 함수에서 반환하는 첫 번째 날짜는 2017년 7월 1일입니다. 모델에 저장된 최신 날짜가 2020년 6월 15일이면 CALENDARAUTO 함수에서 반환하는 마지막 날짜는 2020년 6월 30일입니다.

CALENDARAUTO 함수는 다음의 날짜 테이블 표시 요구 사항을 충족하도록 유효하게 보장합니다.

  • 테이블에 날짜 데이터 형식의 열이 포함되어야 합니다.

  • 열이 전체 연도를 포함해야 합니다.

  • 열에 누락된 날짜가 없어야 합니다.

CALENDAR DAX 함수를 사용하여 날짜 테이블을 만들 수도 있습니다. 이 함수를 사용하면 두 날짜 값을 전달하여 날짜 범위를 나타낼 수 있습니다. 함수는 범위 내의 각 날짜마다 하나의 행을 생성합니다. 정적 날짜 값을 전달하거나 모델의 특정 열에서 가장 빠른/가장 늦은 날짜를 검색하는 식을 전달할 수 있습니다.

다음으로, 데이터 뷰로 전환한 다음 필드 창에서 Due Date 테이블을 선택합니다. 이제 날짜 열을 검토합니다. Date 열 머리글 안의 화살표를 선택한 다음 오름차순으로 정렬하여 첫 번째 행에 가장 빠른 날짜를 표시하도록 순서를 지정할 수 있습니다.

참고

열 정렬 또는 필터링은 값이 저장되는 방식을 변경하지 않습니다. 이러한 함수를 통해 데이터를 탐색하고 이해할 수 있습니다.

데이터 뷰의 기한 테이블을 보여 주는 스크린샷.

이제 Date 열을 선택했으므로 상태 표시줄(왼쪽 아래 모서리)에서 메시지를 검토합니다. 이 메시지는 테이블에 저장되는 행 수와 선택한 열에 있는 고유 값 수를 설명합니다.

이미지는 상태 메시지를 보여 줍니다. TABLE: Due Date (1,461 rows) COLUMN: Date (1,461 distinct values).

테이블 행과 고유 값이 같으면 열에 고유한 값이 포함되어 있음을 의미합니다. 이 요소는 다음 두 가지 이유로 중요합니다. 이는 날짜 테이블 표시 요구 사항을 충족하고 이 열을 모델 관계에서 한 쪽으로 사용할 수 있도록 합니다.

날짜 열이 포함된 테이블을 새로 고칠 때마다 Due Date 계산된 테이블이 다시 계산됩니다. 즉, 주문 날짜가 2020년 7월 1일이면 Sales 테이블에 행이 로드될 때 Due Date 테이블은 회계 연도의 끝, 즉 2021년 6월 30일까지의 날짜를 포함하도록 자동으로 확장됩니다.

Due Date 테이블에는 알려진 필터링 및 그룹화 요구 사항, 특히 연, 분기, 월을 지원하기 위해 추가 열이 필요합니다.