Subtracting row values in DAX ; Power BI

Mariah picture Mariah · Mar 16, 2017 · Viewed 10.3k times · Source

If I have data of this sort: enter image description here

I'd like to calculate the time difference between a value in Bi and Bi+1, in PowerBI. That is, in a new a column, in the Query Editor (so writing in M), I want to have:

C3 = B3-B2

C4 = B4 - B3

and so on.

Do you know how to achieve this in PowerBI?

Answer

alejandro zuleta picture alejandro zuleta · Mar 16, 2017

You can use a calculated column like the below to compare each row against the previous then compute the difference in seconds using the DATEDIFF function:

Difference in Seconds =
DATEDIFF (
    'Table'[Time],
    CALCULATE (
        MIN ( [Time] ),
        FILTER ( ALL ( 'Table' ), [ID] < EARLIER ( 'Table'[ID] ) )
    ),
    SECOND
)

If you want to compare it against the previous ID time value, regardless if the time value is higher you can simply use:

Difference in Seconds =
DATEDIFF (
    'Table'[Time],
    CALCULATE (
        MIN ( [Time] ),
        FILTER ( ALL ( 'Table' ), [ID] = EARLIER ( 'Table'[ID] ) - 1 )
    ),
    SECOND
)

Using LOOKUPVALUE:

Difference in Seconds =
DATEDIFF (
    'Table'[Time],
    LOOKUPVALUE ( 'Table'[Time], 'Table'[ID], [ID] - 1 ),
    SECOND
)

UPDATE: Adding the column from source via M Language.

Use something like this in a custom column:

=Table.AddColumn(#"YourLastStep", "Diff",
 each
    (try DateTime.From(#"YourLastStep"[Time]{[ID]-2})
    otherwise DateTime.From([Time])) - [Time]  
 )

enter image description here

Hope it helps.