추가 시간 인텔리전스 계산

완료됨

단일 날짜를 반환하는 것과 관련된 다른 DAX 시간 인텔리전스 함수가 있습니다. 이러한 함수를 두 가지 시나리오에 적용하며 알아봅니다.

FIRSTDATELASTDATE DAX 함수는 지정된 날짜 열에 대해 현재 필터 컨텍스트의 첫 번째 및 마지막 날짜를 반환합니다.

새 항목 계산

시간 인텔리전스 함수를 사용하는 또 다른 방법은 새 항목을 계산하는 것입니다. 다음 예제에서는 특정 기간 동안 신규 고객 수를 계산하는 방법을 보여 줍니다. 신규 고객은 최초 구매를 한 기간에서 계산됩니다.

첫 번째 작업은 개별 고객 수를 누계(LTD)하는 다음 측정값을 Sales 테이블에 추가하는 것입니다. 누계는 필터 컨텍스트의 처음부터 마지막 날짜까지를 의미합니다. 측정값의 서식을 천 단위 구분 기호를 사용하는 정수로 지정합니다.

Customers LTD =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD

Customers LTD 측정값을 행렬 시각적 개체에 추가합니다. 이 측정값은 각 월의 마지막 날짜까지 개별 고객 LTD의 결과를 생성합니다.

이미지는 행에서 Year 및 Month가 그룹화되고 Revenue, Revenue YTD, Revenue YoY % 및 Customers LTD가 그룹화된 행렬 시각적 개체를 보여 줍니다.

DATESBETWEEN 함수 - 지정된 시작 날짜에서 시작하여 지정된 종료 날짜까지 계속되는 날짜 열이 포함된 테이블을 반환합니다. 시작 날짜가 BLANK이면 날짜 열의 첫 번째 날짜가 사용됩니다. (반대로 종료 날짜가 BLANK이면 날짜 열의 마지막 날짜가 사용됩니다.) 이 경우 마지막 날짜는 필터 컨텍스트의 마지막 날짜를 반환하는 MAX 함수에 의해 결정됩니다. 따라서 2017년 8월이 필터 컨텍스트에 있는 경우 MAX 함수는 2017년 8월 31일을 반환하고 DATESBETWEEN 함수는 2017년 8월 31일까지의 모든 날짜를 반환합니다.

그런 다음, 측정값의 이름을 New Customers로 변경하고 개별 고객 수를 저장하는 두 번째 변수를 필터 컨텍스트의 기간 앞에 추가하여 측정값을 수정합니다. 이제 RETURN 절은 LTD 고객에서 이 값을 뺍니다. 그 결과가 해당 기간의 신규 고객 수입니다.

New Customers =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
    'Sales Order'[Channel] = "Internet"
    )
VAR CustomersPrior =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MIN('Date'[Date]) - 1
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD - CustomersPrior

이미지는 행에서 Year 및 Month가 그룹화되고 Revenue, Revenue YTD, Revenue YoY % 및 New Customers가 그룹화된 행렬 시각적 개체를 보여 줍니다. New Customers 값이 강조 표시되어 있습니다.

CustomersPrior 변수의 경우 DATESBETWEEN 함수는 필터 컨텍스트의 첫 번째 날짜 전일까지의 날짜를 포함합니다. Microsoft Power BI는 내부적으로 날짜를 숫자로 저장하므로 숫자를 더하거나 빼서 날짜를 이동할 수 있습니다.

스냅샷 계산

경우에 따라 팩트 데이터는 시간별 스냅샷으로 저장됩니다. 일반적인 예로는 재고 수준 또는 계정 잔액이 있습니다. 값의 스냅샷은 정기적으로 테이블에 로드됩니다.

재고 수준 등의 스냅샷 값을 요약하는 경우 날짜를 제외하고 모든 차원에서 값을 요약할 수 있습니다. 제품 범주 간에 재고 수준을 더하면 의미 있는 요약이 생성되지만 날짜 간에 재고 수준을 더하는 경우에는 그렇지 않습니다. 어제 재고 수준을 오늘 재고 수준에 더하는 작업은 유용한 작업이 아닙니다(해당 결과를 평균하지 않을 경우).

스냅샷 테이블을 요약하는 경우 측정값 수식은 DAX 시간 인텔리전스 함수만 사용하여 단일 날짜 필터를 적용할 수 있습니다.

다음 예제에서는 Adventure Works 사의 시나리오를 살펴봅니다. 모델 뷰로 전환하고 Inventory 모델 다이어그램을 선택합니다.

이미지는 다음 세 개의 테이블로 구성된 모델 다이어그램을 보여 줍니다. Product, Date 및 Inventory. Product 및 Date 테이블은 각각 Inventory 테이블과 일대다 관계가 있습니다.

다이어그램에는 다음 세 개의 테이블이 표시되어 있습니다. Product, DateInventory. Inventory 테이블에는 각 날짜 및 제품에 대한 단위 잔액의 스냅샷이 저장됩니다. 중요한 점은 테이블에 누락된 날짜가 없고 동일한 날짜에 어떤 제품도 중복 항목이 없는 것입니다. 또한 마지막 스냅샷 레코드는 2020년 6월 15일이 저장됩니다.

이제 보고서 뷰로 전환하고 보고서의 Page 2를 선택합니다. Inventory 테이블의 UnitsBalance 열을 행렬 시각적 개체에 추가합니다. 기본 요약은 값을 합계하도록 설정되어 있습니다.

이미지는 FY2020 Mountain-200 Bike Stock이라는 제목의 행렬 시각적 개체를 보여 줍니다. 여기에는 행에 Product가 그룹화되고 열에 Month가 그룹화되어 있습니다. 각 제품 및 월에서 높은 값이 표시되어 있습니다.

이 시각적 구성은 스냅샷 값을 요약하지 않는 방법의 예입니다. 일별 스냅샷 잔액을 함께 더해도 의미 있는 결과가 생성되지 않습니다. 따라서 행렬 시각적 개체에서 UnitsBalance 필드를 제거합니다.

이제 단일 날짜에 대해 UnitsBalance 값을 합계하는 측정값을 Inventory 테이블에 추가합니다. 이 날짜는 각 기간의 마지막 날짜입니다. LASTDATE 함수를 사용하면 이 날짜를 얻을 수 있습니다. 측정값의 서식을 천 단위 구분 기호를 사용하는 정수로 지정합니다.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTDATE('Date'[Date])
)

참고

측정값 수식에서는 SUM 함수를 사용하고 있습니다. 집계 함수를 사용해야 하지만(측정값은 열에 대한 직접 참조를 허용하지 않음), 각 날짜의 각 제품에 하나의 행만 존재하므로 SUM 함수가 단일 행에 대해서만 작동합니다.

행렬 시각적 개체에 Stock on Hand 측정값을 추가합니다. 각 제품의 값은 이제 각 월에 마지막으로 기록된 단위 잔액을 기준으로 합니다.

이미지는 FY2020 Mountain-200 Bike Stock이라는 제목의 행렬 시각적 개체를 보여 줍니다. 여기에는 행에 Product가 그룹화되고 열에 Month가 그룹화되어 있습니다. 각 제품 및 월에서 낮은 값이 표시됩니다. June 2020 및 Total은 BLANK입니다.

6월의 마지막 날짜에 대한 레코드가 없으므로 측정값은 June 2020에 BLANK를 반환합니다. 데이터에 따르면 아직 발생하지 않은 것입니다.

필터 컨텍스트의 마지막 날짜를 기준으로 필터링하는 데 다음과 같이 내재된 문제가 있습니다. 아직 발생하지 않았거나 주말에는 재고 잔액이 기록되지 않기 때문에 기록된 날짜가 존재하지 않을 수 있습니다.

다음 단계는 결과가 BLANK가 아닌 마지막 날짜를 확인한 다음 해당 날짜를 기준으로 필터링하도록 측정값 수식을 조정하는 것입니다. 이 작업은 LASTNONBLANK DAX 함수를 사용하여 수행할 수 있습니다.

다음 측정값 정의를 사용하여 Stock on Hand 측정값을 수정합니다.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTNONBLANK(
        'Date'[Date],
        CALCULATE(SUM(Inventory[UnitsBalance]))
    )
)

행렬 시각적 개체에서 June 2020 및 Total(전체 연도를 나타냄)의 값을 확인하세요.

이미지는 이제 행렬 시각적 개체에 June 2020 및 Total에 값이 표시되는 것을 보여 줍니다.

LASTNONBLANK 함수는 반복기 함수입니다. BLANK가 아닌 결과를 생성하는 마지막 날짜를 반환합니다. 이 함수는 필터 컨텍스트의 모든 날짜를 내림차순으로 반복하여 이 결과를 얻습니다. (반대로 FIRSTNONBLANK 오름차순으로 반복합니다.) 각 날짜에 대해 전달된 식을 평가합니다. BLANK가 아닌 결과가 나타나면 함수는 날짜를 반환합니다. 그런 다음 이 날짜가 CALCULATE 함수를 필터링하는 데 사용됩니다.

참고

LASTNONBLANK 함수는 행 컨텍스트에서 해당 식을 평가합니다. CALCULATE 함수를 사용하여 식을 올바르게 평가하기 위해 행 컨텍스트를 필터 컨텍스트로 전환해야 합니다.

이제 Inventory 테이블 UnitsBalance 열을 숨겨야 합니다. 그러면 보고서 작성자가 스냅샷 단위 잔액을 부적절하게 요약하는 것이 방지됩니다.