DAX 그룹화 평가

Aug 16 2020

이 측정에서는 고객 ID별로 그룹화하고 각 고객의 최소 order_date 연도를 반환하는 임시 테이블을 만듭니다. 그런 다음 특정 연도에 표시되는 고객 수 (기본적으로 행 수)를 계산하고 싶습니다.

내가 이해하기 힘든 것은이 공식이 그 SUMMARIZE안의 표 를 보지 않는 것 같다는 것 입니다. 연도와이 측정 값을 행렬에 넣으면 SUMMARIZE수식에서 만든 그룹화 된 버전이 아닌 원시 테이블을 기준으로 계산됩니다 . 왜 이런 식으로 평가하는지 아이디어가 있습니까?

COUNTROWS(
SUMMARIZE(
    Orders,
    Orders[Customer ID],
    "min_order_date_year",
    MIN(Orders[Order Date].[Year])))

답변

1 mkRabbani Aug 16 2020 at 14:14

수식은 제공 한 논리에 따라 괜찮습니다. 당신은 당신의 요구 사항과 당신의 코드에서 무엇을 작성하고 있는지 모두 명확히해야합니다. 당신의 공식은 당신이 지시하는 것을 정확하게 반환합니다.

내가 정확하다고 이해하면 최소 연도에 대한 고객 수만 있으면됩니다. 예를 들어 2019 년에 6 명의 고유 고객이 있고 2020 년에 11 명의 고유 고객이있는 경우 여기에서 측정 값으로 반환 할 값 6을 찾고 있습니다.

이제 요약 테이블이 실제로 반환하는 것은 무엇입니까? 아래와 같이 요약 코드에 대한 별도의 사용자 정의 테이블을 만들면 테이블이 실제로 모든 고객 이름 / ID를 첫 번째 열에 보관하고 두 번째 열에는 해당 고객이 사용할 수있는 MIN 연도를 표시합니다.

orders_summarize = 
SUMMARIZE(
    Orders,
    Orders[customer id],
    "min_order_date_year",MIN(Orders[Order Date].[Year])
)

따라서 기본적으로 요약 테이블에 모든 고객 목록이 있습니다. 이제 실제로 총 고유 고객 수를 반환하는 요약 테이블의 행을 계산하고 있습니다.

마지막으로 특정 연도 (예 : MIN 연도)에 대한 고객 수를 원하는 경우 다음 단계를 따르세요.

1 단계 : 다음과 같이 사용자 정의 요약 테이블을 만듭니다.

store_summarized_table = 
SUMMARIZE(
    store,
    store[Customer ID],
    "mindate",MIN(store[Order Date])
)

2 단계 : 측정 값 만들기

count_cust_id = COUNT('store_summarized_table'[Customer ID])

3 단계 : 이제 아래 이미지와 같이 Matrix 비주얼을 구성합니다. 이미지에서 출력을 얻을 수도 있습니다.

물리적 테이블을 피하려면 아래에서 수행 할 수 있습니다.

1 단계 : 아래와 같이 사용자 지정 열 만들기 -

is_min_year = 

// -- keep current row's customer id to a variable
VAR current_cust_id = store[Customer ID]
// -- keep current row's YEAR value to a variable
VAR current_year = store[Order Date].[Year]

// -- find the MIN YEAR from order date for the current row customer id
VAR min_year_current_custommer_id =  
CALCULATE(
    MIN(store[Order Date].[Year]),
    FILTER(
        store,
        store[Customer ID] = current_cust_id
    )
)

// -- check the current row's year is the MIN year of order date for the customer as well or not.
RETURN IF(current_year = min_year_current_custommer_id, 1,0)

또는 측정 값을 다음과 같이 만듭니다.

is_min_year_measure = 

VAR min_order_year_for_current_customer = 
CALCULATE(
    MIN(store[Order Date].[Year]),
    FILTER(
        ALL(store),
        store[Customer ID] = MIN(store[Customer ID])
    )
)

RETURN
IF ( MIN(store[Order Date].[Year]) = min_order_year_for_current_customer, 1,0)

2 단계 : 다음과 같이 측정 값 생성 -

생성 된 사용자 정의 열

count_cust_for_min_year = 
CALCULATE(
    DISTINCTCOUNT(store[Customer ID]),
    FILTER(
        store,
        store[is_min_year] = 1
    )
)

생성 된 측정 용

count_cust_for_min_year = 
CALCULATE(
    DISTINCTCOUNT(store[Customer ID]),
    FILTER(
        store,
        [is_min_year_measure] = 1
    )
)

이제 "Order Date"를 추가하고 "count_cust_for_min_year"를 매트릭스에 측정합니다. 출력은 아래와 같습니다.