>source

마지막 구매 후 1 년 이내에 신규 구매를 한 고객의 비율을 일정 기간 동안 제공 할 수단이 필요합니다.

정상적으로는 매년 각 고객의 마지막 구매 날짜를 캡처 한 계산 열을 만든 다음 주어진 연도의 각 고객이 마지막 날짜로부터 1 년 이내에 구매 한 적이 있는지 확인한 다음 요약하면 큐브에 실시간 연결을 사용하고 있으며 계산 열을 만들 수 없습니다.

내가 찾고있는 의사 코드는 다음과 같습니다.

One Year Return =
VAR Cohort =
SUMMARIZECOLUMNS (
    Customer[ID],
    FILTER (
        VALUES ( Sales[Sales Date] ),
        YEAR ( Sales[Sales Date] )
            < ( YEAR ( TODAY () ) - 1 )
    )
)
VAR Returners =
SUMMARIZECOLUMNS (
    Customer[ID],
    FILTER (
        VALUES ( Sales[Sales Date] ),
        Sales[Sales Date] > Sales[Old Sales Date]  //<--Need help here 
    ),
    FILTER (
        VALUES ( Customer[ID] ),
        Customer[ID] IN Cohort
    )
)
VAR Rate =
CALCULATE ( DISTINCTCOUNT ( Customer[ID] ), Customer[ID] IN Returners ) /
CALCULATE ( DISTINCTCOUNT ( Customer[ID] ), Customer[ID] IN Cohort )
RETURN
    Rate

주된 어려움은 고객마다 다른 시간대가 필요하지만 계산 열을 만들 수 없다는 것입니다. EARLIER 또는 DATESBETWEEN 또는 PARALLELPERIOD를 사용하려고했지만 지금까지 작동하지 못했습니다.


  • 답변 # 1

    먼저 이걸 찾고 있다고 생각합니다

    VAR last_year = DATE ( YEAR ( TODAY () ) - 1; MONTH ( TODAY () ); DAY ( TODAY () ) )
    
    
    두 번째. 이를 수행하는 가장 좋은 방법은 약간의 데이터 모델링이 필요합니다. 시간 정보를 작동시키는 유일한 방법은 날짜 테이블을 갖는 것입니다. 이 테이블에는 누락 된 요일이없는 행이 있어야합니다. 온라인으로 검색하거나 블로그를 확인하는 방법을 여기에서 확인할 수 있습니다. 이 테이블이 팩트 테이블과 함께 모델에 관련되면 선택한 날짜에 해당 측정 값을 작성할 수 있습니다. 선택한 값은 다른 값이며 작년에는 선택한 값이됩니다.

  • 답변 # 2

    중요한 부분은 계산 된 열없이 각 고객에 대해 비교해야한다는 사실입니다. COUNTX 또는 SUMX와 같은 반복자를 사용하여 가능합니다. 이를 통해 코호트 서브 테이블에서 고객을 순환하고 현재 반복에서 고객 ID를 사용하여 판매 테이블을 선택하여 EARLIER를 사용하여 판매 테이블을 필터링 할 수 있습니다. 코호트에있는 각 고객에 대해 마지막 구매 날짜와 그 이전 날짜를 선택하고 두 날짜를 비교하여 1 년 내에했는지 확인하십시오.

    DAX에서는 약간 복잡해 보이지만 더 쉽게 만들 수 있도록 공간을 넓히려 고했습니다. 또한 현재 반복에서 고객 ID에 액세스 할 수 없으므로 _cohort 변수를 단순히 반복 할 수 없다는 사실에 대한 약간의 해결 방법이 포함되어 있습니다

    One year return = 
        var _now = TODAY()
        var _cohort = 
            SUMMARIZECOLUMNS (
                Sales[CustomerID] ;
                FILTER ( 
                    Sales ; 
                    DATEDIFF( Sales[SalesDate] ; _now ; YEAR ) <= 1 
                )
            )
        var _countCohort = COUNTROWS( _cohort )
        var _countReturns =
            SUMX (
                SUMMARIZECOLUMNS (
                    Sales[CustomerID] ; FILTER ( Sales ; Sales[CustomerID] IN _cohort )
                ) ; 
                var _lastPurchase = 
                    CALCULATE ( 
                        MAX ( Sales[SalesDate] ) ;
                        ALLSELECTED ( Sales ) ;
                        Sales[CustomerID] = EARLIER( Sales[CustomerID] )
                    )
                var _preLastPurchase = 
                    CALCULATE ( 
                        MAX ( Sales[SalesDate] ) ;
                        ALLSELECTED ( Sales ) ;
                        Sales[SalesDate] < _lastPurchase ;
                        Sales[CustomerID] = EARLIER( Sales[CustomerID] )
                    )
                RETURN
                    IF ( DATEDIFF( _preLastPurchase ; _lastPurchase ; YEAR ) <= 1 ; 1 ; 0 )
            )
    
    RETURN
        _countReturns / _countCohort
    
    

  • 답변 # 3

    큐브에서 데이터 세트를 가져오고 계산 열을 만들어 결국에는 거기에 도달했습니다. @ jelle-hoekstra의 답변은 내가 한 일과 거의 비슷해 보이지만 측정을 실행하는 방법을 알 수 없었습니다.

    3 개의 계산 된 열을 만들었고 ReturnCustomerID 열을 구분하여 마지막 구매 후 1 년 이내에 돌아온 고객 수를 계산했습니다.

    Last Purchase Date = 
    MINX (
        FILTER (
            Sales,
            Sales[Sales Year]+1 = EARLIER ( Sales[Sales Year] ) &&  Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
        ), 
        MAXX (
            FILTER (
                Sales,
                Sales[Sales Year] = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
            ),
            Sales[Sales Date]
        )
    )
    
    One Year Date = 
    MINX (
        FILTER (
            Sales,
            Sales[Sales Year]+1 = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
        ), 
        MAXX (
            FILTER (
                Sales,
                Sales[Sales Year] = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
            ), 
            EDATE (Sales[Sales Date], 12 )
        )
    )
    
    ReturnCustomerID = 
    IF (
        Sales[Sales Date] > Sales[Last Purchase Date] && Sales[Sales Date] < Sales[One Year Date], Sales[CustomerID], BLANK()
    )
    
    

관련 자료

  • 이전 python - N-d numpy 배열에서 문자열 바꾸기
  • 다음 IntelliJ IDEA는 macOS Catalina에서 프로젝트를 열거 나 SDK를 추가 할 수 없습니다