Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
8 years ago
Solved

Reform table

I have a data that records the member upgrade assessment of our member as below:   customer   date              prev_member_level    current_member_level John          1Jan2017       Classic      ...
  • Phil_Seamark's avatar
    8 years ago

    HI Anonymous

     

    This calculated table is getting close.  There is a bit going on, but I think it addresses most of the quirks.

     

    I have attached a PBIX file as well

     

    New Table = 
    VAR RetVal = 
            ADDCOLUMNS(
                'Table',
                "Next Date",
                MINX(
                    FILTER(
                        'Table',
                        'Table'[Customer] = EARLIER('Table'[Customer]) && 
                        'Table'[Date] > EARLIER('Table'[Date]) && 
                        [pre_member_level]<> [current_member_level]
                        ),
                        [Date]-1)
                        )
    VAR cleanTable = FILTER(RetVal,[current_member_level]<>[pre_member_level])
    
    VAR Step2 =  
        SELECTCOLUMNS(
            cleanTable ,
            "Customer" , [Customer] ,
            "Start_date" , [Date] ,
            "end_date" , if( 
                                ISBLANK([Next Date]),
                                TODAY(),
                                [Next Date]) ,
            "member_level" , [current_member_level]
    
        )
        
        
    VAR FirstLines =
        SELECTCOLUMNS( 
            GENERATE(SELECTCOLUMNS(SUMMARIZECOLUMNS('Table'[Customer],"end_date" , MIN('Table'[Date])),"C",[Customer],"D",[end_date]),filter('Table','Table'[Customer]=[C] && 'Table'[Date]=[D])),
            "Customer",[Customer] ,
            "Start_date",DATE(2016,1,1) ,
            "End_date",[Date]-1,
            "member_level",[pre_member_level]
        )
            
    RETURN    UNION( FirstLines,Step2)