FLOATTO
FLOATTO(task)
How far each task can slip before the task you name moves. It is total float measured to that task instead of to the project's end: FLOATTO(Task("MS_SUB")) is how much room each task has before the MS_SUB milestone slips.
The answer is exact. Any slip smaller than the float leaves the task you named where it is, and any larger slip moves it, with every calendar, lag, link type, constraint and bit of progress taken into account. A task that can't move it at all is blank, with the reason: it has no path to it, it is finished, it is a level-of-effort or WBS summary task, or a mandatory date stands in the way.
Before a task starts, a slip means the whole task starting later. Once it has started, a slip means it finishing later.
Arguments
| Argument | What to give it |
|---|---|
| task | One task, such as Task("MS_SUB"). It is the same task for every row. |
Examples
Formula column Float to MS_SUBFloat to MS_SUB = FLOATTO(Task("MS_SUB"))
How far each task can slip before MS_SUB moves. As a column, you can sort, filter and colour the Gantt by it; tasks with no path to MS_SUB are blank.
Formula=FLOATTO(Task("MS_SUB")) <= 0d
The tasks driving MS_SUB: any slip of theirs moves it. This is the path into MS_SUB, as the critical path is the path into the project's end.
Formula=FLOATTO(Task("MS_SUB")) < 5d
The tasks within a week of moving MS_SUB. As a guardrail, it lists them.
Formula=[Total float] - FLOATTO(Task("MS_SUB"))
How much of each task's float the milestone takes away: the room it has before the project's end moves, less the room before MS_SUB does.
Measure (on the project)=COUNT(FILTER(Tasks, Tasks[Float to MS_SUB] < 5d))
As a measure, from the column above: how many tasks are within a week of moving MS_SUB. FLOATTO itself goes in a task column; other tables read that column.
Reach for something else when
| You want | Use |
|---|---|
| How far a task can slip before the project's end moves | The [Total float] field |
| Float to a task if something changed: a longer duration, a new data date | FLOATTO read in a WHATIF with IN, below |
| Every task with any path to a task, whatever its float | INCLUDES(Downstream, Task("MS_SUB")) |
| Which path into the task each task is on: path 1 drives it | FLOATPATH |
Common questions
How is it different from total float?
[Total float] measures to the end of the project, or to its must-finish-by date. FLOATTO measures to the task you name. A task can have plenty of total float and none to an interim milestone, which is what FLOATTO is for.
Can each row measure float to a task of its own?
No: "FLOATTO measures float to one task for every row; this differs between tasks, so float would be measured again for every row. Name one task: FLOATTO(Task("MS_SUB"))". Make a column for each task you want to measure to.
The editor refuses this=FLOATTO([Task])
Can I measure it in a what-if, or in the baseline?
Yes. Read it inside IN, and it is measured on that schedule:
Formula=IN(WHATIF(Task("BDC_001"), [Duration], [Duration] + 5d), FLOATTO(Task("MS_SUB")))
Each task's float to MS_SUB if BDC_001 took five more working days.
Formula=FLOATTO(Task("MS_SUB")) - IN(BASELINE(), FLOATTO(Task("MS_SUB")))
How much float to MS_SUB each task has gained since the baseline: negative where it has lost some.
The one place it can't be read is a what-if made for each row: "FLOATTO can't be read in a what-if made for each row: float would be measured again for every row. Read it in a what-if shared by every row, or outside IN".
The editor refuses this=IN(WHATIF([Task], [Duration], [Duration] + 1d), FLOATTO(Task("MS_SUB")))
Why does the column fail on some schedules?
Two kinds of task don't respond to a delay by moving, so float to a task can't be measured exactly when they are there, and the column says so rather than guessing: tasks with an expected finish, and tasks scheduled as late as possible.
