Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Calculate/Substract values based on snapshot data from the same column

Hi there community,

 

I am trying to create a report in which the user is able to compare the difference in the values between a from and two dates. This meant that I had to historize data on a daily basis. I managed to settle that part by having daily snapshots of the data. The next step would be to have substraction done between the values of the dates 'from' and 'to'.

 

My current data looks like this:

 

DateDateorderContractValue
06-08-20213P00110
06-08-20213P00212
07-08-20212P00111
07-08-20212P00212
08-08-20211P00112
08-08-20211P00213

 

I would like to be able to see the differences of the 'Value' column. The difference needs to be calculated based on a 'from' and 'to' filtering (For Example 'From' filter value '06-08-2021' and 'To' value '07-08-2021').

 

I am stuck in how to ensure that I can compare the value columns based on filtering with a from and to dates. Does anyone know a way to solve this?

 

Thanks!

 

Bunyamin 

  • Hi, Anonymous ;

    Please try it.

    Difference = 
    VAR _MAX =MAXX ( ALLSELECTED ( 'Table' ), [Date] )
    VAR _MIN =MINX ( ALLSELECTED ( 'Table' ), [Date] )
    VAR _summax =
        CALCULATE ( SUM ( [Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MAX ) )
    VAR _summin=
        CALCULATE ( SUM ( [Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MIN ) )
    VAR _sum=
        CALCULATE (SUM ( [Value] ),FILTER ( ALLSELECTED ( 'Table' ),[Contract] = MAX ( [Contract] )&& [Date] = _MAX))
    VAR _total =
        IF (ISINSCOPE ( 'Table'[Contract] ),_sum- SUM ( [Value] ),_summax- SUM ( [Value] ))
    RETURN IF ( HASONEVALUE ( 'Table'[Date] ), _total, _summax-_summin)

    The final output is shown below:

    Best Regards,
    Community Support Team_ Yalan Wu
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

  • Hi, Anonymous ;

    Sorry for the late reply, if you want show 0 , it should be create a new table.

    1.create a new table.

    Table 2 = VALUES('Table'[Date])

    2.create two measures

    value = 
    var _reault=CALCULATE(SUM('Table'[Value]),FILTER(ALLSELECTED('Table'), [Contract] in VALUES('Table'[Contract])&& [Date] in VALUES('Table 2'[Date])))
    return IF(_reault<>BLANK(),_reault,0)
    Difference2 = 
    VAR _MAX =MAXX ( ALLSELECTED ( 'Table 2' ), [Date] )
    VAR _MIN =MINX ( ALLSELECTED ( 'Table 2' ), [Date] )
    VAR _summax =
        CALCULATE ([value], FILTER ( ALLSELECTED ( 'Table 2' ), [Date] = _MAX ) )
    VAR _summax1 =
        CALCULATE ( SUM ( 'Table'[Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MAX ) )
    VAR _summin=
        CALCULATE ( SUM ( 'Table'[Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MIN ) )
    RETURN IF ( HASONEVALUE ( 'Table 2'[Date] ), _summax- [value], _summax1-_summin)

    The final output is shown below:

    Best Regards,
    Community Support Team_ Yalan Wu
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

12 Replies

  • v-yalanwu-msft's avatar
    v-yalanwu-msft
    Community Support

    Hi, Anonymous ;

    You could create a measure.

    Difference = 
    var _max=MAX([Date])
    var _min=MIN([Date])
    return CALCULATE(SUM([Value]),FILTER(ALLSELECTED('Table'),[Date]=_max))-CALCULATE(SUM([Value]),FILTER(ALLSELECTED('Table'),[Date]=_min))

    The final output is shown below:

    Best Regards,
    Community Support Team_ Yalan Wu
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Wauw this is great! This is exactly what I want. Is there a way to show the difference inside the table?

       

      • v-yalanwu-msft's avatar
        v-yalanwu-msft
        Community Support

        Hi, Anonymous ;

        Please try modify the measure like below:

        Difference = 
        var _MAX=MAXX(ALLSELECTED('Table'),[Date])
        var _MIN=MINX(ALLSELECTED('Table'),[Date])
        return 
        CALCULATE(SUM([Value]),FILTER(ALLSELECTED('Table'),[Date]=_MAX))-CALCULATE(SUM([Value]),FILTER(ALLSELECTED('Table'),[Date]=_MIN))

        The final output is shown below:

        Best Regards,
        Community Support Team_ Yalan Wu
        If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

  • v-yalanwu-msft's avatar
    v-yalanwu-msft
    Community Support

    Hi, Anonymous ;

    Please try it.

    Difference = 
    VAR _MAX =MAXX ( ALLSELECTED ( 'Table' ), [Date] )
    VAR _MIN =MINX ( ALLSELECTED ( 'Table' ), [Date] )
    VAR _summax =
        CALCULATE ( SUM ( [Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MAX ) )
    VAR _summin=
        CALCULATE ( SUM ( [Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MIN ) )
    VAR _sum=
        CALCULATE (SUM ( [Value] ),FILTER ( ALLSELECTED ( 'Table' ),[Contract] = MAX ( [Contract] )&& [Date] = _MAX))
    VAR _total =
        IF (ISINSCOPE ( 'Table'[Contract] ),_sum- SUM ( [Value] ),_summax- SUM ( [Value] ))
    RETURN IF ( HASONEVALUE ( 'Table'[Date] ), _total, _summax-_summin)

    The final output is shown below:

    Best Regards,
    Community Support Team_ Yalan Wu
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Yalan,

       

      This helps me a lot thank you!

      I only seem to stumble when a new contract is made in a later date.

      Example table:

      DateDateorderContractValue
      06-08-20213P00110
      06-08-20213P00212
      07-08-20212P00111
      07-08-20212P00212
      08-08-20211P00112
      08-08-20211P00213
      08-08-20211P00312

       

      P003 wasn't there earlier so naturally it tries to compare with nothing:

      A fix for this would be to have the value which is empty to be filled by 0 but I can't figure it out where to modify the measure to do this.

       

      Do you have suggestions? Thanks in advance!

  • v-yalanwu-msft's avatar
    v-yalanwu-msft
    Community Support

    Hi, Anonymous ;

    Sorry for the late reply, if you want show 0 , it should be create a new table.

    1.create a new table.

    Table 2 = VALUES('Table'[Date])

    2.create two measures

    value = 
    var _reault=CALCULATE(SUM('Table'[Value]),FILTER(ALLSELECTED('Table'), [Contract] in VALUES('Table'[Contract])&& [Date] in VALUES('Table 2'[Date])))
    return IF(_reault<>BLANK(),_reault,0)
    Difference2 = 
    VAR _MAX =MAXX ( ALLSELECTED ( 'Table 2' ), [Date] )
    VAR _MIN =MINX ( ALLSELECTED ( 'Table 2' ), [Date] )
    VAR _summax =
        CALCULATE ([value], FILTER ( ALLSELECTED ( 'Table 2' ), [Date] = _MAX ) )
    VAR _summax1 =
        CALCULATE ( SUM ( 'Table'[Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MAX ) )
    VAR _summin=
        CALCULATE ( SUM ( 'Table'[Value] ), FILTER ( ALLSELECTED ( 'Table' ), [Date] = _MIN ) )
    RETURN IF ( HASONEVALUE ( 'Table 2'[Date] ), _summax- [value], _summax1-_summin)

    The final output is shown below:

    Best Regards,
    Community Support Team_ Yalan Wu
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Thank you very much! This solves my issue.

  • Anonymous , Try a measure like

     

    New column =
    var _max = maxx(filter(Table, [Date] <earlier([Date]) && [Contract] = earlier([Contract])),[Value])
    return
    [Value] -maxx(filter(Table, [Date] = _max && [Contract] = earlier([Contract])),[Value])

  • Hi,

    Based on the data that you have shared, please show the expected result.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Ashish,

       

      Basically I want it to look like this:

      It needs to show the differences of the contracts in row level for two snapshot dates 'From' and 'To'.

       

      This way I can see in details where the differences in my dataset happens when comparing snapshot dates.