The last main table is better.
The only issue is that you have entered data for courses and skill levels that haven't been taken yet, and you shouldn't do that. A number of reasons:
That person may never take that course.
We can query who hasn't taken a course.
We only want to query actual results for your report.
Another golden rule of databases - not having any data for a record can sometimes be as important as the data that is there.
You could add a field to the main table to account for course to be taken:
EnrolementDate
CompletionDate
Then you can still see who is due to take a course, and how long it took for them to compete it, but still ignoring anyone who isn't ever going to take a specific course.