Forum Discussion

led10's avatar
led10
New Member
4 years ago
Solved

Need help with finding previous row value with categories

Hi, I would like some help with finding the previous row's value.  My real dataset has thousands of rows, and several columns that give qualitative data.  Here is an example of the data I am working with:

NameDateSeats_remaining
Jill10/11/2021100
Jill10/4/2021400
Jill9/27/2021580
Jill9/20/2021600
Jill9/13/2021600
Jack10/11/202157
Jack10/4/202163
Jack9/27/202168
Jack9/20/202164
Jack9/13/202170

 

I would like to calculate the difference in Seats_remaining between the current and previous week, for each person.  The oldest week would ideally have a value of null.  This is what I ideally would like my data to look like:

NameDateSeats_remainingprevious row valuedifference_between_current_and_previous
Jill10/11/2021100400300
Jill10/4/2021400580180
Jill9/27/202158060020
Jill9/20/20216006000
Jill9/13/2021600nullnull
Jack10/11/202157636
Jack10/4/202163685
Jack9/27/20216863-5
Jack9/20/202164706
Jack9/13/202170nullnull

I've been working on this for longer than I would like to admit, and I have watched a bunch of videos, and looked at a bunch of community posts.  I would like help finding the previous row's value, once I have that I can easily find the difference_between_current_and_previous, but if there is an easier way to go right to the difference_between_current_and_previous I am open to that.  Thanks!

  • led10,

     

    You can achieve this with either a measure or a calculated column.

     

    Measure:

     

    Difference Between Current and Previous (Measure) = 
    VAR vDate =
        MAX ( Table1[Date] )
    VAR vSeats =
        MAX ( Table1[Seats_remaining] )
    VAR vFirstDate =
        CALCULATE ( MIN ( Table1[Date] ), ALLEXCEPT ( Table1, Table1[Name] ) )
    VAR vPreviousDate =
        CALCULATE (
            MAX ( Table1[Date] ),
            Table1[Date] < vDate,
            ALLEXCEPT ( Table1, Table1[Name] )
        )
    VAR vPreviousSeats =
        CALCULATE (
            MAX ( Table1[Seats_remaining] ),
            ALLEXCEPT ( Table1, Table1[Name] ),
            Table1[Date] = vPreviousDate
        )
    VAR vResult =
        IF ( vDate <> vFirstDate, vPreviousSeats - vSeats )
    RETURN
        vResult

     

    Calculated column:

     

    Difference Between Current and Previous (Column) = 
    VAR vDate = Table1[Date]
    VAR vSeats = Table1[Seats_remaining]
    VAR vFirstDate =
        CALCULATE ( MIN ( Table1[Date] ), ALLEXCEPT ( Table1, Table1[Name] ) )
    VAR vPreviousDate =
        CALCULATE (
            MAX ( Table1[Date] ),
            Table1[Date] < vDate,
            ALLEXCEPT ( Table1, Table1[Name] )
        )
    VAR vPreviousSeats =
        CALCULATE (
            MAX ( Table1[Seats_remaining] ),
            ALLEXCEPT ( Table1, Table1[Name] ),
            Table1[Date] = vPreviousDate
        )
    VAR vResult =
        IF ( vDate <> vFirstDate, vPreviousSeats - vSeats )
    RETURN
        vResult

     

    Result:

     

     

1 Reply

  • led10,

     

    You can achieve this with either a measure or a calculated column.

     

    Measure:

     

    Difference Between Current and Previous (Measure) = 
    VAR vDate =
        MAX ( Table1[Date] )
    VAR vSeats =
        MAX ( Table1[Seats_remaining] )
    VAR vFirstDate =
        CALCULATE ( MIN ( Table1[Date] ), ALLEXCEPT ( Table1, Table1[Name] ) )
    VAR vPreviousDate =
        CALCULATE (
            MAX ( Table1[Date] ),
            Table1[Date] < vDate,
            ALLEXCEPT ( Table1, Table1[Name] )
        )
    VAR vPreviousSeats =
        CALCULATE (
            MAX ( Table1[Seats_remaining] ),
            ALLEXCEPT ( Table1, Table1[Name] ),
            Table1[Date] = vPreviousDate
        )
    VAR vResult =
        IF ( vDate <> vFirstDate, vPreviousSeats - vSeats )
    RETURN
        vResult

     

    Calculated column:

     

    Difference Between Current and Previous (Column) = 
    VAR vDate = Table1[Date]
    VAR vSeats = Table1[Seats_remaining]
    VAR vFirstDate =
        CALCULATE ( MIN ( Table1[Date] ), ALLEXCEPT ( Table1, Table1[Name] ) )
    VAR vPreviousDate =
        CALCULATE (
            MAX ( Table1[Date] ),
            Table1[Date] < vDate,
            ALLEXCEPT ( Table1, Table1[Name] )
        )
    VAR vPreviousSeats =
        CALCULATE (
            MAX ( Table1[Seats_remaining] ),
            ALLEXCEPT ( Table1, Table1[Name] ),
            Table1[Date] = vPreviousDate
        )
    VAR vResult =
        IF ( vDate <> vFirstDate, vPreviousSeats - vSeats )
    RETURN
        vResult

     

    Result: