Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Calculate difference between two values per ID

Hello everyone I currently have this type of data set and was wondering if there is a way to calculate the difference month over month, with January being the first month, per employee. 

Employee IDAmountDate
11001/1/2022
12002/1/2022
13003/1/2022
25001/1/2022
26002/1/2022
27003/1/2022
31501/1/2022
33002/1/2022
34503/1/2022

So that information would look something like this.

Employee IDAmountDifferenceDate
110001/1/2022
12001002/1/2022
13001003/1/2022
250001/1/2022
26001002/1/2022
27001003/1/2022
315001/1/2022
33001502/1/2022
34501503/1/2022
  • Anonymous Whoops, was troubleshooting. Yes, that can be done:

    Column = 
        VAR __Employee = [Employee ID]
        VAR __Date = [Date]
        VAR __Amount = [Amount]
        VAR __PrevDate = MAXX(FILTER(ALL('Table'),[Date]<__Date),[Date])
        VAR __PrevAmount = MAXX(FILTER(ALL('Table'),[Employee ID] = __Employee && [Date] = __PrevDate),[Amount])
        VAR __Diff = __Amount - __PrevAmount
        VAR __Result = IF(__PrevAmount = BLANK(), BLANK(), __Diff)
    RETURN
        __Result

3 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Community Champion

    Anonymous Try:

    Column = 
        VAR __Employee = [Employee ID]
        VAR __Date = [Date]
        VAR __Amount = [Amount]
        VAR __PrevDate = MAXX(FILTER(ALL('Table'),[Date]<__Date),[Date])
        VAR __PrevAmount = MAXX(FILTER(ALL('Table'),[Employee ID] = __Employee && [Date] = __PrevDate),[Amount])
        VAR __Result = __Amount - __PrevAmount
    RETURN
        __PrevAmount

    Basically MTBF pattern. 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

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hello Greg_Deckler,

       

      The formula has worked! I just had to switch the last part as that was just returning the previous amount as opposed to the result. I did have a question though. Is there a way to have it ignore the January value as it will have no comparison? Right now in the data it is showing the chart below, instead of a zero. Thanks for all the help!

       

      Employee IDAmountDifferenceDate
      11001001/1/2022
      12001002/1/2022
      13001003/1/2022
      • Greg_Deckler's avatar
        Greg_Deckler
        Community Champion

        Anonymous Whoops, was troubleshooting. Yes, that can be done:

        Column = 
            VAR __Employee = [Employee ID]
            VAR __Date = [Date]
            VAR __Amount = [Amount]
            VAR __PrevDate = MAXX(FILTER(ALL('Table'),[Date]<__Date),[Date])
            VAR __PrevAmount = MAXX(FILTER(ALL('Table'),[Employee ID] = __Employee && [Date] = __PrevDate),[Amount])
            VAR __Diff = __Amount - __PrevAmount
            VAR __Result = IF(__PrevAmount = BLANK(), BLANK(), __Diff)
        RETURN
            __Result