Forum Discussion

ziyabikram96's avatar
ziyabikram96
Helper V
5 years ago
Solved

Time Difference between consecutive rows

I am getting error when ever consective c/in or C/out occure in calaculating time difference but whenever consecutive occure I want to pick maximum from the C/out and minimum from C/In for further cl...
  • v-angzheng-msft's avatar
    v-angzheng-msft
    5 years ago

    Hi, ziyabikram96 

     

    To create a calculated column like this:

    isIN_is0 =
    VAR _previouIn =
        CALCULATE (
            MIN ( [Index] ),
            FILTER (
                ALL ( 'Table' ),
                [State] = "C/In"
                    && [Index]
                        = EARLIER ( [Index] ) - 1
            )
        )
    VAR _if =
        IF ( 'Table'[State] = "C/In", IF ( [Index] - _previouIn = 1, 1 ) )
    RETURN
        _if
    

    then the test3 would be like this:

    test_3 = 
    VAR _CurrentIndex =
        FIRSTNONBLANK ('Table'[Index], 1 )
    VAR _CurrentStatus =
        FIRSTNONBLANK ( 'Table'[State], 1 )
    VAR _IndexOfPreviousCheckIN =
        CALCULATE (
            MAX ( 'Table'[Index] ),
            FILTER (
                ALL ( 'Table' ),
                AND ( 'Table'[Index] < _CurrentIndex, 'Table'[State] = "C/In" )
            ) //,OR('InOutData(PAK)'[Index] < CurrentIndex,
            // 'InOutData(PAK)'[State] = "C/Out")
        )
    //*****************************************************************************************
    var _lastOut=
            CALCULATE(
            LASTNONBLANK('Table'[Index],MAX('Table'[State])="C/Out"),
            FILTER(ALL('Table'),AND ( 'Table'[Index] < _CurrentIndex, 'Table'[State] = "C/Out" ))
        )
    //*****************************************************************************************
    //*****************************************************************************************
    var _firstIn=
        IF(MAX('Table'[State])="C/In",_lastOut+1)
    //*****************************************************************************************
    VAR _IndexOfFollowingCheckOut =
        IF ( 
            ISBLANK ( _IndexOfPreviousCheckIN ), 
            0, 
            // _IndexOfPreviousCheckIN+1
    //*****************************************************************************************
            _lastOut
    //*****************************************************************************************
        )
    var _result=
            IF (
            OR(
    //*****************************************************************************************
                OR ( _CurrentIndex = 0, _CurrentStatus = "C/Out" ),MAX('Table'[isIN_is0])=1),
    //*****************************************************************************************
            0,
            DATEDIFF (
                CALCULATE (
                    FIRSTNONBLANK ( 'Table'[Date & Time State], 0 ),
                    FILTER (
                        ALL ( 'Table' ),
                        'Table'[Index] = _IndexOfFollowingCheckOut
                    )
                ),
                // FIRSTNONBLANK ( 'Table'[Date & Time State], 1 ),
    //*****************************************************************************************
                CALCULATE(
                    MAX('Table'[Date & Time State]),
                    FILTER(
                        ALL('Table'),
                        'Table'[Index]=_firstIn
                    )
                ),
    //*****************************************************************************************
                MINUTE
            )
        )
    RETURN _result
    

    result:

    Please refer to the attachment below for details

     

     

    Hope this helps.

     

    Best Regards,
    Community Support Team _ Zeon Zheng
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.