I would like to generate a project progress report which consists in pretty much checking the % of completed milestones within a given timeframe.
(e.g: Company A had 10 due milestones by today, but marked only 8 as completed, therefore they are progressing 20% slower than planned.)
This part easy and it is working great, however before generating it, I have a determine if a project plan is approved or not. An approved project plan is the one with milestones 1 and 2 = 100.
Below you can see the table structure I have to work with.
ID Company Project Milestone Date Completion
170825240 Company A Project 1 Milestone 1 29.10.12 100
170825311 Company A Project 1 Milestone 2 29.10.12 0
170825242 Company A Project 1 Milestone 3 05.11.12 100
170825173 Company A Project 1 Milestone 4 17.12.12 0
170825104 Company B Project 1 Milestone 1 29.10.12 100
170825035 Company B Project 1 Milestone 2 29.10.12 100
170824966 Company B Project 1 Milestone 3 05.11.12 100
170824897 Company B Project 1 Milestone 4 17.12.12 0
170824828 Company C Project 1 Milestone 1 29.10.12 100
170824759 Company C Project 1 Milestone 2 29.10.12 100
170824690 Company C Project 1 Milestone 3 05.11.12 0
170824621 Company C Project 1 Milestone 4 17.12.12 0
In this snapshot, project 1 is approved for the companies B and C.
The issue I am facing is how to combine in a single query progress filtering the approved plans only. I would hate to write the exceptions manually, since we are talking about 1600 combinations for company and projects.
Anyone has an idea how to do it?
Thanks!!!!
UPDATED
SELECT S1.[Company], COUNT(S1.[Milestone]) AS ShouldBeMilestones
FROM Sheet1 AS S1
INNER JOIN Sheet1 S2
ON S2.[Company] = S1.[Company]
AND S2.[Project] = S1.[Project]
AND S2.[Milestone] = 'Milestone 1'
AND S2.[%compl#] = 100
INNER JOIN Sheet1 S3
ON S3.[Company] = S1.[Company]
AND S3.[Project] = S1.[Project]
AND S3.[Milestone] = 'Milestone 2'
AND S3.[%compl#] = 100
WHERE ((S1.[Task class] <> 'A') AND (S1.[Task class] <> 'B') AND (S1.[Task class] <> ''))
AND S1.[Milestone] NOT LIKE '0.*' AND S1.[Milestone] NOT LIKE '1.*'
AND S1.[Start] <= Now()
GROUP BY S1.[Company];
this is also possible with joins borrowing from the previous answer 😉
edit should adress some ms access issues but cant test it on access honestly i don’t see the benefit of the () around the first join