Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Gap analysis - how to compare actual with required training

Hi, I would like to ask for some guidance to solve a problem I have.

To put it in simple words (real data model is more complex) I have a list of persons with their job positions and trainings they have taken.

I have also a list of mandatory trainings for each job position.

What I would like to do is create a table (for gap analysis) where I could see (by employee, job position, etc.) what mandatory trainings are missing.

Is that possible to do without changing data model – only by expressions in table?

Thanks & Regards,

Mat

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

Here is the expression that works:

if(index(concat([Training Taken], '|'),[Mandatory Training]&'|'),'Yes','No')

View solution in original post

9 Replies
Anonymous
Not applicable
Author

As I understand, when you select a person and a job position, you get a list of training taken.  And, you want a list of training required but not taken.

I'm sure it is possible with se analysis.  How exactly is hard to tell without your application, but shouldn't be complex.

Gysbert_Wassenaar

Maybe. It might be possible to tell with more certainty if we actually knew your data model, or at least the relevant parts of it. Can you post a qlikview document to demonstrate the problem? This document might help with that: Preparing examples for Upload - Reduction and Data Scrambling


talk is cheap, supply exceeds demand
Not applicable
Author

Hi, I have prepared example with some random data. At the end I need to prepare such table to easily filter what employees are missing their required trainings:

Employee Job Mandatory Training Mandatory training taken?
Alan AltonDriverTraining 5No
Alan AltonDriverTraining 6No
Alan AltonDriverTraining 7Yes
John RobinsonPainterTraining 1No
John RobinsonPainterTraining 2No
John RobinsonPainterTraining 3Yes
John RobinsonPainterTraining 4No
Paul OxleyPainterTraining 1No
Paul OxleyPainterTraining 2Yes
Paul OxleyPainterTraining 3No
Paul OxleyPainterTraining 4Yes
Thomas OwenDriverTraining 5Yes
Thomas OwenDriverTraining 6No
Thomas OwenDriverTraining 7No
Anonymous
Not applicable
Author

Here is the expression that works:

if(index(concat([Training Taken], '|'),[Mandatory Training]&'|'),'Yes','No')

Not applicable
Author

Hi Michael,

It works great and it is very neat solution. Thank you.

To my exemplary file I have also added expiry date and training status (expired or valid). I was able to adjust the formula to take into account the status. However I wonder if it is possible to add to my table also the expiry date for each of the mandatory trainings that was taken (no matter if expired already or valid)? I cannot add additional dimension with date as I will get my rows multiplied. I cannot find a way to filter only matching row.

Obviously you have helped and answered my original question so I will mark your answer "Correct Answer" anyway. I just wonder if it would be difficult to add this date…

Regards,

Mat

Anonymous
Not applicable
Author

You mean that if expiration date is in the future, the training is considered taken.  If correct, here is the expression that should work:

if(index(concat(if([Expiry Date]>ReloadTime(),[Training Taken] &'|'))&'|',[Mandatory Training]&'|'),'Yes','No')

(I prefer to use Reload time() rather than today() on the front end, so the data is correct as of the reload time.  That is, the definition of today = reload time.)

Not applicable
Author

Thanks Michael, but it is not exactly what I would like.

I would like to add additional column to my table with expiry date (for each person's mandatory trainings). Of course expiration date exists only for trainings that have been taken.

The purpose behind that is application user is actually interested in seeing not only if some training was taken or not (and if training is still valid) but also when the valid training will expire (or when it expired if it is no longer valid).

Regards,

Mat

Anonymous
Not applicable
Author

This?

=aggr(if(Index(Concat([Training Taken],'|')&'|',[Mandatory Training]&'|'),[Expiry Date]),Employee, [Mandatory Training], [Training Taken])

Not applicable
Author

Thank you Michael, that works perfectly.

Regards,

Mat