Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Creating a Gantt chart based on multiple conditions

I have a source data Excel that looks like this. Call it ProjectData.xlsx

 

ProjectStartFinish
A9/1/20219/5/2021
B8/25/20219/20/2021
C9/10/20219/20/2021
D8/5/20218/31/2021
E9/25/202110/31/2021
F9/5/202111/21/2021

 

It's a project start and end date table, which I get from a different department in our company. We get this every week, and using this, we calculate an Excel gantt chart of sorts, based on several conditions. Finished Excel looks like this:

 

 

Notes:

  • Cell D1 is the today's date.
  • Cells E1, F1 etc are advanced by one day. Here I set the time period for 2 weeks, but in reality, it would go on for a year. Essentially, D1 + 365 days.
  • The "Long", "Short", and "-" is decided using the following criteria:
    • If the date in the column (D1, E1 etc.) is between [ Start ] and [ End ],
      • If the project duration is <= 10 days, cell content is "Short"
      • If the project duration is > 10 days, cell content is "Long"
    • Else
      • Cell content is "-"

 

For example, the formula for D2 would look like this:

 

 

=IF(AND(D$1 >= $B2, D$1 <= $C2), IF($C2 - $B2 <=10, "Short", "Long"), "-")

 

 

 

Now, only using the ProjectData.xlsx which I get from the aforementioned other department, I would like to recreate this in PowerBI. I know that to simply show project durations, I could use a Gantt chart controls, but I don't think I can accomplish something like this that has multiple conditions.

 

So, what's the best way to go about creating this (presumably using a Matrix visual?) in PowerBI?

  • The approach used here is very similar to the one suggested by amitchandak.  But it is more specific to your post.  You can make a matrix visual with your data, a Date table that goes from Today to Today() + 365, no relationship between the two tables, and these two measures - one for the value and one for the conditional formatting.

     

    GanttLabel = var thisdate = SELECTEDVALUE(Date2[Date])
    var startdate = MIN(Projects[Start])
    var enddate = MIN(Projects[Finish])
    return IF(thisdate <= enddate && thisdate>=startdate, IF(DATEDIFF(startdate, enddate, DAY)>10, "Long", "Short"), "-")
     
    GanttColor = SWITCH([GanttLabel], "Long", "Yellow", "Short", "Green")
     

    Pat

     

     

4 Replies

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

    The approach used here is very similar to the one suggested by amitchandak.  But it is more specific to your post.  You can make a matrix visual with your data, a Date table that goes from Today to Today() + 365, no relationship between the two tables, and these two measures - one for the value and one for the conditional formatting.

     

    GanttLabel = var thisdate = SELECTEDVALUE(Date2[Date])
    var startdate = MIN(Projects[Start])
    var enddate = MIN(Projects[Finish])
    return IF(thisdate <= enddate && thisdate>=startdate, IF(DATEDIFF(startdate, enddate, DAY)>10, "Long", "Short"), "-")
     
    GanttColor = SWITCH([GanttLabel], "Long", "Yellow", "Short", "Green")
     

    Pat

     

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      This worked perfectly, thanks!

    • Anonymous's avatar
      Anonymous
      Not applicable

      Thank you for the response, but this doesnt seem like what I'm looking for.