Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM. Register now.

Reply
AndyKing
New Member

Calculate elapsed time in aggregation

Hi,

I have a timeseries data imported to PowerBI Desktop. The data is in table format and it is composed of processes, sub process, sub process StartTime and subprocess EndTime. Each process has multiple sub processes. Each sub process is scheduled to run everyday. Sub processes run concurrently and independently. For a process to be completed, all of its sub processes should be completed.

Below is a sample data for illustration purposes. I need to calculate the elapsed time for each distinct process for each day. To calculate the elapsed time for a process, we need to find the sub process with the earliest time and we also need to find the sub process with the latest finish time and then we need to take the time difference between the finish time and start time (in minutes) to calculate the elapsed time for each process.
Table1: Processes and SubProcesses
Process SubProcess     StartTime           EndTime            ElapsedTime (min)
P1         P1_Sub1         1/01/2022 9:00  1/01/2022 9:10  10
P1         P1_Sub2         1/01/2022 9:02  1/01/2022 9:15  13
P1         P1_Sub3         1/01/2022 9:10  1/01/2022 9:30  20
P2         P2_Sub1         1/01/2022 9:15   1/01/2022 9:20  5
P2         P2_Sub2         1/01/2022 9:20  1/01/2022 9:30  10
P2         P2_Sub3         1/01/2022 9:20  1/01/2022 9:40  20
P2         P2_Sub4         1/01/2022 9:30  1/01/2022 9:45  15
P1         P1_Sub1         2/01/2022 9:00  2/01/2022 9:12  12
P1         P1_Sub2         2/01/2022 9:05 2/01/2022 9:14    9
P1         P1_Sub3         2/01/2022 9:10 2/01/2022 9:35    25
P2         P2_Sub1         2/01/2022 9:15 2/01/2022 9:20     5
P2         P2_Sub2         2/01/2022 9:20 2/01/2022 9:35    15
P2         P2_Sub3         2/01/2022 9:20 2/01/2022 9:35    15
P2         P2_Sub4         2/01/2022 9:30 2/01/2022 9:43    13


For example, in Table1, process P1 has 3 sub processes and among all 3 sub processes, the one that starts the earliest is P1_Sub (which has a start time of "1/01/2022 9:00") and the sub process that finishes the latest is P1_Sub3 (which has a finish time of "1/01/2022 9:30"). So the elapsed time for the process P1 on the day 1/01/2022 was 9:30-9:00=30 minutes.
I need a measure to calculate "the elapsed time for each process for each day" similar to Table2 below.
Table2: Process Elapsed Time
Process StartTime            EndTime              ElapsedTime (min)
P1         1/01/2022 9:00    1/01/2022 9:30   30
P2         1/01/2022 9:15    1/01/2022 9:45   30
P1         2/01/2022 9:00    2/01/2022 9:35   35
P2         2/01/2022 9:15    2/01/2022 9:43   28


Can you please help me with the DAX formula?
Thanks
Andy

1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hi  @AndyKing ,

 

Here are the steps you can follow:

1. In Power query. Add Column – Index Column – From 1.

vyangliumsft_0-1667809217401.png

2. Create calculated column.

IF =
var _1=
VALUE(RIGHT('Table'[SubProcess],1))
return
IF(_1=1,1,0)
Group =
SUMX(FILTER(ALL('Table'),'Table'[Index]<=EARLIER('Table'[Index])),[IF])

3. Create measure.

StartTime_Measure =
MINX(FILTER(ALL('Table'),
'Table'[Process]=MAX('Table'[Process])&&YEAR('Table'[StartTime])=YEAR(MAX('Table'[StartTime]))
&&MONTH('Table'[StartTime])=MONTH(MAX('Table'[StartTime]))&&DAY('Table'[StartTime])=DAY(MAX('Table'[StartTime]))),[StartTime])
EndTime_Measure =
MAXX(FILTER(ALL('Table'),
'Table'[Process]=MAX('Table'[Process])&&YEAR('Table'[EndTIme])=YEAR(MAX('Table'[EndTIme]))
&&MONTH('Table'[EndTIme])=MONTH(MAX('Table'[EndTIme]))&&DAY('Table'[EndTIme])=DAY(MAX('Table'[EndTIme]))),[EndTIme])
ElapsedTime (min) =
DATEDIFF(
    [StartTime_Measure],[EndTime_Measure],MINUTE)

4. Result:

vyangliumsft_1-1667809217404.png

 

Best Regards,

Liu Yang

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly

View solution in original post

4 REPLIES 4
Anonymous
Not applicable

Hi  @AndyKing ,

 

Here are the steps you can follow:

1. In Power query. Add Column – Index Column – From 1.

vyangliumsft_0-1667809217401.png

2. Create calculated column.

IF =
var _1=
VALUE(RIGHT('Table'[SubProcess],1))
return
IF(_1=1,1,0)
Group =
SUMX(FILTER(ALL('Table'),'Table'[Index]<=EARLIER('Table'[Index])),[IF])

3. Create measure.

StartTime_Measure =
MINX(FILTER(ALL('Table'),
'Table'[Process]=MAX('Table'[Process])&&YEAR('Table'[StartTime])=YEAR(MAX('Table'[StartTime]))
&&MONTH('Table'[StartTime])=MONTH(MAX('Table'[StartTime]))&&DAY('Table'[StartTime])=DAY(MAX('Table'[StartTime]))),[StartTime])
EndTime_Measure =
MAXX(FILTER(ALL('Table'),
'Table'[Process]=MAX('Table'[Process])&&YEAR('Table'[EndTIme])=YEAR(MAX('Table'[EndTIme]))
&&MONTH('Table'[EndTIme])=MONTH(MAX('Table'[EndTIme]))&&DAY('Table'[EndTIme])=DAY(MAX('Table'[EndTIme]))),[EndTIme])
ElapsedTime (min) =
DATEDIFF(
    [StartTime_Measure],[EndTime_Measure],MINUTE)

4. Result:

vyangliumsft_1-1667809217404.png

 

Best Regards,

Liu Yang

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly

AndyKing
New Member

Hi @Greg_Deckler,
Thank you very much for the prompt response.
Shouldn't there be a loop to calculate the elapsed time for each process?
In the example above, MIN (StartTime) and MAX(EndTime) should be calculated within each process for each day, so we need to get 4 different elapsed times, two for each day because there are two processes.   
Hope that helps.

@AndyKing Well, you would need something to differentiate the rows in your table visual. You could add a Day column to your table as a calculated column for example. Something like: DATE(YEAR([StartTime],MONTH([StartTime],DAY([StartTime])) and add that to your visual but don't summarize.



Follow on LinkedIn
@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
DAX For Humans

DAX is easy, CALCULATE makes DAX hard...
Greg_Deckler
Community Champion
Community Champion

@AndyKing Try:

ElapsedTime (min) Measure =
  VAR __Start = MIN('Table'[StartTime])
  VAR __End = MAX('Table'[EndTime])
  VAR __Result = DATEDIFF(__Start, __End, MINUTE)
RETURN
  __Result


Follow on LinkedIn
@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
DAX For Humans

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
FabCon Global Hackathon Carousel

FabCon Global Hackathon

Join the Fabric FabCon Global Hackathon—running virtually through Nov 3. Open to all skill levels. $10,000 in prizes!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.

Top Solution Authors