Forum Discussion

luckygirl's avatar
luckygirl
Icon for Helper I rankHelper I
1 year ago
Solved

DAX function to get previous row value grouped by another column

Hi,

 

I have a table like below.

 

ClientCodeCompletedDateProductDetail
11/01/2018A
11/04/2019B
123/05/2021C
26/05/2022D
29/02/2018A
35/05/2019C

I want to get the previous value of the "ProductDetail" column ordered by the "CompletedDate" and grouped by "Code". So the expected output is below.

 

ClientCodeCompletedDateProductDetailPreviousProductDetail
11/01/2018ANo
11/04/2019BA
123/05/2021CB
29/02/2018ANo
26/05/2022DA
35/05/2019CNo

 

I am a beginner to dax and can't figure out the method. Thanks for the support.

  • luckygirl Try this:

    Previous Product Detail Column =
      VAR __Code = [ClientCode]
      VAR __Date = [CompletedDate]
      VAR __Table = FILTER( ALL( 'Table' ), [ClientCode] = __Code && [CompletedDate] < __Date )
      VAR __PrevDate = MAXX( __Table, [CompletedDate] )
      VAR __Result = MAXX( FILTER( __Table, [CompletedDate] = __PrevDate ), [ProductDetail] )
    RETURN
      __Result
    
    
    
    or
    
    Previous Product Detail Measure =
      VAR __Code = MAX( 'Table'[ClientCode] )
      VAR __Date = MAX( 'Table'[CompletedDate] )
      VAR __Table = FILTER( ALL( 'Table' ), [ClientCode] = __Code && [CompletedDate] < __Date )
      VAR __PrevDate = MAXX( __Table, [CompletedDate] )
      VAR __Result = MAXX( FILTER( __Table, [CompletedDate] = __PrevDate ), [ProductDetail] )
    RETURN
      __Result

     

    See my article on Mean Time Between Failure (MTBF) which uses EARLIER: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/339586.
    The basic pattern is:
    Column = 
      VAR __Current = [Value]
      VAR __PreviousDate = MAXX(FILTER('Table','Table'[Date] < EARLIER('Table'[Date])),[Date])

      VAR __Previous = MAXX(FILTER('Table',[Date]=__PreviousDate),[Value])
    RETURN
     ( __Current - __Previous ) * 1.

2 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Icon for Community Champion rankCommunity Champion

    luckygirl Try this:

    Previous Product Detail Column =
      VAR __Code = [ClientCode]
      VAR __Date = [CompletedDate]
      VAR __Table = FILTER( ALL( 'Table' ), [ClientCode] = __Code && [CompletedDate] < __Date )
      VAR __PrevDate = MAXX( __Table, [CompletedDate] )
      VAR __Result = MAXX( FILTER( __Table, [CompletedDate] = __PrevDate ), [ProductDetail] )
    RETURN
      __Result
    
    
    
    or
    
    Previous Product Detail Measure =
      VAR __Code = MAX( 'Table'[ClientCode] )
      VAR __Date = MAX( 'Table'[CompletedDate] )
      VAR __Table = FILTER( ALL( 'Table' ), [ClientCode] = __Code && [CompletedDate] < __Date )
      VAR __PrevDate = MAXX( __Table, [CompletedDate] )
      VAR __Result = MAXX( FILTER( __Table, [CompletedDate] = __PrevDate ), [ProductDetail] )
    RETURN
      __Result

     

    See my article on Mean Time Between Failure (MTBF) which uses EARLIER: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/339586.
    The basic pattern is:
    Column = 
      VAR __Current = [Value]
      VAR __PreviousDate = MAXX(FILTER('Table','Table'[Date] < EARLIER('Table'[Date])),[Date])

      VAR __Previous = MAXX(FILTER('Table',[Date]=__PreviousDate),[Value])
    RETURN
     ( __Current - __Previous ) * 1.