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 clarification I am attaching a screenshot please help me in this 

Thank you

Thank you 

  • 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.

     

9 Replies

  • Can you please show how are you calculating the time difference?

     

    • ziyabikram96's avatar
      ziyabikram96
      Helper V

      Here it is

      test =
      VAR CurrentIndex = FIRSTNONBLANK('InOutData(PAK)'[Index],1)
      VAR CurrentStatus = FIRSTNONBLANK('InOutData(PAK)'[State],1)

      VAR IndexOfPreviousCheckIN =
      CALCULATE(
      MAX('InOutData(PAK)'[Index]),
      FILTER(
      ALL('InOutData(PAK)'),
      AND(
      'InOutData(PAK)'[Index] < CurrentIndex ,
      'InOutData(PAK)'[State] = "C/In"
      )
       
       
      )//,OR('InOutData(PAK)'[Index] < CurrentIndex,
      // 'InOutData(PAK)'[State] = "C/Out")
      )
      VAR IndexOfFollowingCheckOut =
      IF(
      ISBLANK(IndexOfPreviousCheckIN),
      0,
      IndexOfPreviousCheckIN +1
      )
      RETURN
      IF(
      OR(CurrentIndex = 0, CurrentStatus = "C/Out" ),
      0,


      DATEDIFF(
      CALCULATE(
      FIRSTNONBLANK('InOutData(PAK)'[Time],0),
      FILTER(
      ALL('InOutData(PAK)'),
      'InOutData(PAK)'[Index] = IndexOfFollowingCheckOut
      )
      ),
      FIRSTNONBLANK('InOutData(PAK)'[Time],1),
      MINUTE
      )
      )
    • ziyabikram96's avatar
      ziyabikram96
      Helper V

      Hi, Didn't get the expected result I tried your method but failed to to get it

  • Hi, ziyabikram96 

     

    I have made some modifications to the above formula:

    test2 = 
    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 _IndexOfFollowingCheckOut =
        IF ( 
            ISBLANK ( _IndexOfPreviousCheckIN ), 
            0, 
            // _IndexOfPreviousCheckIN+1
    //*****************************************************************************************
            _lastOut
    //*****************************************************************************************
        )
    var _result=
            IF (
            OR ( _CurrentIndex = 0, _CurrentStatus = "C/Out" ),
            0,
            DATEDIFF (
                CALCULATE (
                    FIRSTNONBLANK ( 'Table'[Date & Time State], 0 ),
                    FILTER (
                        ALL ( 'Table' ),
                        'Table'[Index] = _IndexOfFollowingCheckOut
                    )
                ),
                FIRSTNONBLANK ( 'Table'[Date & Time State], 1 ),
                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.

     

    • ziyabikram96's avatar
      ziyabikram96
      Helper V

      Thanks for your time and response in C/Out logic is ok as it is highlited in yellow but the problem is occured in C/In as it is marked with black colour , I want minimum C/In and thier respective result and rest of it will return 0 

    • ziyabikram96's avatar
      ziyabikram96
      Helper V

      and for more clarification i want difference between 

      last_Out and First_In

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

        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.