| Key | Value |
|---|---|
| Table | DS05 Schedule Logic |
| Severity | MAJOR |
| Unique ID | 1050234 |
| Summary | Does this SS or FF relationship exist alongside an FS or SF relationship? (Note: This DIQ is not indicative of a definitive issue with the schedule; rather, it is designed to raise awareness about the SS and FF relationships that it flags and indicates that further investigation may be needed into how they relate to the Critical Path, Hammocks, and/or apportionment.) |
| Error message | Predecessor has at least one SS or FF relationship (type = SS or FF) and one non-SS or non-FF relationship tied to it (type = SF or FS). |
This DIQ check identifies predecessors that have both lag-type relationships (SS/FF) and traditional relationships (FS/SF) to their successors. This pattern warrants review as it may create unintended scheduling constraints.
The check triggers when a single predecessor task has:
This is perfectly valid in scheduling tools, but can indicate:
Common scenarios that trigger this check:
Important: This check is for awareness only. Mixed relationship types are often legitimate and necessary. Review flagged items to ensure the logic accurately reflects work requirements and doesn't create circular dependencies or unintended float consumption.
This test raises awareness about complex schedule logic that may impact critical path analysis and schedule behavior.
Why mixed relationships warrant review:
These patterns often appear legitimately in:
As a MAJOR check, this helps schedulers identify areas needing closer review. The goal is not to eliminate mixed relationships but to ensure they're intentional and properly understood by the project team.
CREATE FUNCTION [dbo].[fnDIQ_DS05_Logic_IsSSorFFRelTypeImproperlyLinked] (
@upload_id int = 0
)
RETURNS TABLE
AS RETURN
(
with Flags as (
SELECT schedule_type, predecessor_task_ID, ISNULL(predecessor_subproject_ID,'') PSubP, STRING_AGG(type, ',') WITHIN GROUP (ORDER BY type) Type
FROM DS05_schedule_logic
WHERE upload_ID = @upload_ID
GROUP BY schedule_type, predecessor_task_ID, ISNULL(predecessor_subproject_ID,'')
)
SELECT L.*
FROM DS05_schedule_logic L INNER JOIN Flags F ON L.schedule_type = F.schedule_type
AND L.predecessor_task_ID = F.predecessor_task_ID
AND ISNULL(L.predecessor_subproject_ID,'') = F.PSubP
WHERE upload_ID = @upload_ID
AND (
F.[Type] LIKE '%SS%FS%'
OR F.[Type] LIKE '%FS%SS%'
OR F.[Type] LIKE '%SS%SF%'
OR F.[Type] LIKE '%SF%SS%'
OR F.[Type] LIKE '%FF%FS%'
OR F.[Type] LIKE '%FS%FF%'
OR F.[Type] LIKE '%FF%SF%'
OR F.[Type] LIKE '%SF%FF%'
)
)
| Date | Description of Changes |
|---|---|
| 2024-04-30 | Logic adjusted to account for the addition of the predecessor_subproject_ID field. |
| 2024-08-08 | Summary updated to include note. |