Forum Discussion

DreDre's avatar
DreDre
Icon for Helper II rankHelper II
6 years ago
Solved

Line chart counting duration based on a start/End time

Long story short, I have start/end times in different rows and I am trying to create a line chart that gives a total number of people that fall between these two points so that I know how many people are working.

 

For example:

PersonStartEnd

1

08:0016:30
208:0516:35
312:0020:30
414:3022:00
515:0023:30
616:0000:30

If I were to look at 12:00, I should have 3 people working, then at 15:00 I would have 5 and finally at 18:00 I should have 4. My goal is to be able to look at every minute of the day and see how many people are working based on the Start/End columns in a table. Any help or guidance would be very helpful!

  • DreDre 

     

    Is this what you are going for:

     

     

     

     

     

    For this I would create a calculated table giving me each minute of the day:

     

    TimeTable =
    VAR HourTable =
        SELECTCOLUMNS ( GENERATESERIES ( ( 0 ), ( 23 ) ), "Hour", [Value] )
    VAR MinuteTable =
        SELECTCOLUMNS ( GENERATESERIES ( ( 0 ), ( 59 ) ), "Minute", [Value] )
    RETURN
        ADDCOLUMNS (
            CROSSJOIN ( HourTable, MinuteTable ),
            "Time", TIME ( [Hour], [Minute], 0 )
        )

     

    (modified from here: https://kohera.be/blog/power-bi/how-to-create-a-time-table-in-power-bi-in-a-few-simple-steps/ )

     

    That would be the x-axis and I wouldn't create a relationship to this table!

     

    I would then create a measure to count how many people are working at each time, like this:

     

    Active Workers =
    CALCULATE (
        DISTINCTCOUNT ( Hours[Person] ),
        FILTER (
            Hours,
            Hours[Start] <= MIN ( TimeTable[Time] )
                && Hours[End] > MAX ( TimeTable[Time] )
        )
    )

     

     

    and then put it on the line chart.

     

    Edit: Also make sure all the time fields are in the "Time" datetype.

5 Replies

    • DreDre's avatar
      DreDre
      Icon for Helper II rankHelper II

      This is not quite what I was trying to accomplish as I am trying to do time throughout a day vs dates.

  • DataZoe's avatar
    DataZoe
    Icon for Microsoft Employee rankMicrosoft Employee

    DreDre 

     

    Is this what you are going for:

     

     

     

     

     

    For this I would create a calculated table giving me each minute of the day:

     

    TimeTable =
    VAR HourTable =
        SELECTCOLUMNS ( GENERATESERIES ( ( 0 ), ( 23 ) ), "Hour", [Value] )
    VAR MinuteTable =
        SELECTCOLUMNS ( GENERATESERIES ( ( 0 ), ( 59 ) ), "Minute", [Value] )
    RETURN
        ADDCOLUMNS (
            CROSSJOIN ( HourTable, MinuteTable ),
            "Time", TIME ( [Hour], [Minute], 0 )
        )

     

    (modified from here: https://kohera.be/blog/power-bi/how-to-create-a-time-table-in-power-bi-in-a-few-simple-steps/ )

     

    That would be the x-axis and I wouldn't create a relationship to this table!

     

    I would then create a measure to count how many people are working at each time, like this:

     

    Active Workers =
    CALCULATE (
        DISTINCTCOUNT ( Hours[Person] ),
        FILTER (
            Hours,
            Hours[Start] <= MIN ( TimeTable[Time] )
                && Hours[End] > MAX ( TimeTable[Time] )
        )
    )

     

     

    and then put it on the line chart.

     

    Edit: Also make sure all the time fields are in the "Time" datetype.