Forum Discussion

leodm's avatar
leodm
Frequent Visitor
3 years ago
Solved

Difference between dates on different rows and same column AFTER filtering

Database sample

 

Data de início realSquadArt
03/01/2022 17:30:00Squad1Art1
03/01/2022 22:00:43Squad2Art1
03/01/2022 22:30:00Squad3Art2
04/01/2022 09:00:00Squad4#N/A
04/01/2022 15:00:00Squad1Art1
04/01/2022 22:00:00Squad5Art2
05/01/2022 16:00:00Squad6Art3
05/01/2022 16:00:00Squad1Art1
05/01/2022 22:00:01Squad5Art2
05/01/2022 22:24:24Squad2Art1
05/01/2022 22:30:00Squad5Art2
05/01/2022 23:00:00Squad3Art2
05/01/2022 23:00:13Squad3Art2
06/01/2022 17:00:00Squad7Art3
06/01/2022 17:05:00Squad7Art3
06/01/2022 20:00:00Squad5Art2
06/01/2022 23:12:51Squad2Art1
07/01/2022 03:21:06Squad2Art1
07/01/2022 03:24:56Squad2Art1

 

 

Filter example (by selecting Squad1)

Data de início realSquadArtExpected Result
03/01/2022 17:30:00Squad1Art1 
04/01/2022 15:00:00Squad1Art121:30:00
05/01/2022 16:00:00Squad1Art125:00:00

 

 

Another filter example (by selecting Art1)

Data de início realSquadArtExpected Result
03/01/2022 17:30:00Squad1Art1 
03/01/2022 22:00:43Squad2Art14:30:43
04/01/2022 15:00:00Squad1Art116:59:17
05/01/2022 16:00:00Squad1Art125:00:00
05/01/2022 22:24:24Squad2Art16:24:24
06/01/2022 23:12:51Squad2Art124:48:27
07/01/2022 03:21:06Squad2Art14:08:15
07/01/2022 03:24:56Squad2Art10:03:50

 

I need to get each difference between the date rows like the "Expected Result" column and show them on visuals.

 

I believe this can only be achieved with a Measure, since a Calculated Column will show wrong results after filtering.

  • hi leodm 

    try to add plot all the columns with a measure like:

    Result = 
    VAR _date = MAX(TableName[Date])
    VAR _datepre =
    MAXX(
        FILTER(
            ALLSELECTED(TableName),
            TableName[Date]<_date
        ),
         TableName[Date]
    )
    VAR _Difference= _date - _datepre
    VAR _Days = INT(_Difference)
    VAR _Hours = HOUR(_Difference)
    VAR _Minutes = MINUTE(_Difference)
    VAR _Seconds = SECOND(_Difference)
    VAR _DaysToHours = _Days * 24
    VAR _TotalHours = _DaysToHours + _Hours
    RETURN
    IF(
        _datepre<>BLANK(),
        FORMAT(_TotalHours, "00") & ":" & FORMAT(_Minutes, "00") & ":" & FORMAT(_Seconds,"00"),
        " "
    )

     

    it worked like:

     

6 Replies

  • hi leodm 

    try to add plot all the columns with a measure like:

    Result = 
    VAR _date = MAX(TableName[Date])
    VAR _datepre =
    MAXX(
        FILTER(
            ALLSELECTED(TableName),
            TableName[Date]<_date
        ),
         TableName[Date]
    )
    VAR _Difference= _date - _datepre
    VAR _Days = INT(_Difference)
    VAR _Hours = HOUR(_Difference)
    VAR _Minutes = MINUTE(_Difference)
    VAR _Seconds = SECOND(_Difference)
    VAR _DaysToHours = _Days * 24
    VAR _TotalHours = _DaysToHours + _Hours
    RETURN
    IF(
        _datepre<>BLANK(),
        FORMAT(_TotalHours, "00") & ":" & FORMAT(_Minutes, "00") & ":" & FORMAT(_Seconds,"00"),
        " "
    )

     

    it worked like:

     

    • leodm's avatar
      leodm
      Frequent Visitor

      Hi FreemanZ thanks for you answer,

      I was able to get correct results with your provided Measure, awesome!


      The only thing I couldn't do is show it in a graph. Is it because graphs can't display time like that? How could I use these results to show days & hours in graphs? Thank you.

      • FreemanZ's avatar
        FreemanZ
        Super User

        hi leodm 

        because the result of the measure is text, to plot graphically, try to return _Difference directly.

  • leodm Hi!

     

    Yes, you are correct. In order to calculate the time difference dynamically based on the filters, you will need to use a measure instead of a calculated column. Here's an example of how you can create a measure to calculate the time difference:

    1. Open the Power BI desktop and select the table that contains the date and time values you want to calculate the time difference for.

    2. Click on the "New measure" button in the "Modeling" tab.

    3. In the formula bar, enter the following DAX formula:

    Time Difference =
    IF (
    SELECTEDVALUE ( 'Table'[Squad] ) = BLANK () ||
    SELECTEDVALUE ( 'Table'[Art] ) = BLANK (),
    BLANK (),
    CALCULATE (
    SUM ( 'Table'[Data de início real] ) - MIN ( 'Table'[Data de início real] ),
    ALLEXCEPT ( 'Table', 'Table'[Squad], 'Table'[Art] )
    )
    )

     

    1. Add the measure to a visual to see the time difference between the selected Squad and Art values dynamically update based on the filters applied.

    BBF

    • leodm's avatar
      leodm
      Frequent Visitor

      Hi BeaBF , thanks for your answer,

       

      Unfortunately I wasn't able to get the proper values with this Measure.