Forum Discussion
Available time for each worker
- 6 years ago
Hi Anonymous
I have taken a look at your case, and I think it is doable.
1. Open power query, and sort the table by Worker ID, Deadline, Task ID and Days, in that order. It should look like this(notice the small numbers next to the sort symbol):
2. add an index column in power query, rename it to e.g. index, close and apply your changes
3. Create your [New Start day]-column like this:
new start day = VAR _worker = [Worker ID] VAR _endDay = [endDay] VAR _startDay = [startDay] VAR _task = data[Task ID] VAR _index = data[Index] VAR _overlappingTasks = CALCULATETABLE ( ADDCOLUMNS ( SUMMARIZE ( data, [Task ID], data[startDay], data[endDay], data[Index] ), "numberOfOverlappingDays", DATEDIFF ( data[startDay], _endDay, DAY ) ), FILTER ( ALL ( 'data' ), [Worker ID] = _worker && [startDay] < _endDay && _task <> [Task ID] && _index < data[Index] ) ) VAR _numberOfOverlappingDays = SUMX ( _overlappingTasks, [numberOfOverlappingDays] ) RETURN data[startDay] - _numberOfOverlappingDays4. In order to display which workers who are available for a new task, first create a table of dates like this
Dates = CALENDAR(DATE(2019,1,1),DATE(YEAR(TODAY())+1,6,30))5. Then create a table with the number of days a duration can last(rename the column from [value] to [duration]):
Duration = GENERATESERIES(1,15)
6. Create a measure like this:Available workers = VAR _start = CALCULATE ( MAX ( Dates[Date] ) ) VAR _duration = CALCULATE ( MAX ( 'Duration'[Task duration] ) ) VAR _end = _start + _duration VAR _worker = CALCULATE ( SELECTEDVALUE ( data[Worker ID] ) ) RETURN COUNTROWS ( FILTER ( data, ( _start <= data[new start day] && _end > data[new start day] ) || ( _start < data[new end day] && _end >= data[new end day] ) || ( _start <= data[new start day] && _end >= data[new end day] ) ) ) + 06. Create a table in the report with the worker ids, and use [Available workers] as a filter for this table(in the filter pane of the visual). If [Available workers] returns 0 then the worker is available
7. Add slicers to the report page for the Date and Duration(using the columns from the tables created in step 4 and 5.
I have attached the updated report
Cheers,
Sturla
If this post helps, then please consider Accepting it as the solution. Kudos are nice too.
Anonymous
I have a stripped down version of the excel document which we use now (I have removed most parts because the contain critical data, so the macros doesn't work anymore) - Also sorry for any leftover Danish in the document.
I have taken a screenshot of the current Excel document so you don't have to download it:
As you can see we have a list of task, with a deadline, how long it takes to perform the task, a start day, and end day, a buffer (this particular worker is way behind schedule) and remaining days from today to deadline.
This document does not use the algorithm is proposed above.
I hope this helps visualizing what I'm trying to achieve.
By the way, I can't download files due to my company's policy.
- Anonymous6 years agoNot applicable
I'm not entirely sure what you are asking for. The screenshot in the previous post is what we use today, and is what I'm trying to achieve in Power BI.
The raw data is Worker ID, Task No., Deadline, and duration.
The output columns in the Excel-file, which we use today, is Start, End, and Buffer.
It's fairly simple, I'm just not sure how well Power BI can compare rows and perform a similar task.
- Anonymous6 years agoNot applicableSorry, I don't get it. Normally, you'd present data you start with and data you want to end up with and a good description of what the transformation is. From what you've pasted I can't even quickly figure out what the two stages are. Sorry. Maybe someone else will be able to help you.
- Anonymous6 years agoNot applicable
Thank you for trying Anonymous