Survey quotas measure how many surveys are to be completed by survey respondents. If a certain quota for a type of
respondent has already been met, the survey respondent can be "quota outed", which may send them to a
terminate page and end the survey.
Sometimes you need to have your survey react in very specific ways to quotas so that different
pathways can
be taken based on how many quotas have been filled.
Scripting can be used to review survey quotas and then select choices or undertake other actions. Selecting
choices might allow
additional quotas to be calculated or
Flow Control to operate based on current quota
calculations.
The WSC scripting object offers a variety of useful scripting
methods for dealing with quota management in
Javascript:
- wscScripting.getQuotaByCode(code)
- wscScripting.getQuotaByIdentity(identity)
- wscScripting.isQuotaFull(quota)
- wscScripting.sortQuotasByLeastFilled(quotas)
- wscScripting.sortQuotasByMostFilled(quotas)
The starting point for getting quota data in scripting is by using the
getQuotaByCode() WSC scripting
method. EG:
var oMyQuota = wscScripting.getQuotaByCode('PUT-QUOTA-CODE-HERE');
Let's look at a basic step-by-step example of allocating quotas based on a least filled principle using Javascript.
The goal will be to assign respondents to one of four quota groups. In this example, male respondents will
be allocated to a quota group 1 or 2 based on the least filled quota during their response. Female
respondents will follow the same process for groups 3 and 4:
- 1. Navigate to Design --> Content and add the survey questions. This example will require choice
questions to determine the respondent gender and quota group allocation.
- 2. Quotas will need to be created for the Groups question. Navigate to Design --> Survey Quotas.
Use the Generate Quotas from Questions button to create some new quota limits.
- 3. Before quota data can be accessed with Javascript - the quota data must be loaded. Add a new
Javascript script to the same survey page as the Groups quota question. Set the script to the "Execute
Javascript when Survey Quota Data has been Loaded" scripting event. No Javascript code needs to be added
to this script, it will just need to exist on the page so that the survey quota data can be accessed.
- 4. Add another script to the survey page set to the "On Next/Submit" scripting event. The following script
will identify which choice is selected at the Gender question, get and sort the quotas based on
least filled and then select a group choice in the Groups question. Before the quotas are sorted in
Javascript - the array of quotas is randomised to reduce bias.
///Get the survey questions
var oGender = wscScripting.getQuestionByDataPipingCode('GENDER');
var oGroups = wscScripting.getQuestionByDataPipingCode('GROUPS');
///Create an array to hold the survey quotas
var aQuotas = new Array();
///Identify which choice has been selected in the gender question
if (wscScripting.isChoiceSelectedByValue(oGender, 1)) {
///If Male is selected, push quota groups 1 and 2 into the quotas array
aQuotas.push(wscScripting.getQuotaByCode('GROUP1'));
aQuotas.push(wscScripting.getQuotaByCode('GROUP2'));
} else {
///If Female is selected, push quota groups 3 and 4 into the quotas array
aQuotas.push(wscScripting.getQuotaByCode('GROUP3'));
aQuotas.push(wscScripting.getQuotaByCode('GROUP4'));
};
///Randomise the array the quotas first
wscScripting.randomizeArray(aQuotas);
///Sort the quota array based on least filled quotas
wscScripting.sortQuotasByLeastFilled(aQuotas);
///The least filled quota will be moved to the first position in the array
///Save the quota to a variable
var oQuota = aQuotas[0];
///Use the quota code to select it's matching group
if (oQuota.code == 'GROUP1') {
wscScripting.selectChoiceByValue(oGroups, 1);
}
else if (oQuota.code == 'GROUP2') {
wscScripting.selectChoiceByValue(oGroups, 2);
}
else if (oQuota.code == 'GROUP3') {
wscScripting.selectChoiceByValue(oGroups, 3);
}
else if (oQuota.code == 'GROUP4') {
wscScripting.selectChoiceByValue(oGroups, 4);
}
args.isValid = true;