Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Only at Qlik Connect! Guest keynote Jesse Cole shares his secrets for daring to be different. Learn More!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

How to evenly distribute random values to agents

I have for example 20 agents and 10,000+ accounts I want them to be working on.  The accounts very in the type.  I am trying to randomly assign and even amount to each person. 

Also, the number of agents can change per day.

I feel like Tresesco's idea might get me close.  Pick() random order

Possibly replace RecNo() As DoorNo with the Account# and DoorPrize with the Agents but how to get an even spread of accounts per agent.

Tab1:
Load

     RecNo() As DoorNo,
     Pick(RecNo(),'Car','Goat','Goat') as DoorPrize
     AutoGenerate 3;

Tab2:
Load
       Concat(DoorNo, ';', Rand()) as DoorNo2               // This one is the trick
Resident Tab1;

Let vDoors=Peek('DoorNo2');


Tab3:
Load
SubField('$(vDoors)', ';', RecNo()) & '|' & DoorPrize as Door
Resident  Tab1;

Drop Tables Tab1, Tab2;

Thanks for your help.

1 Solution

Accepted Solutions
Not applicable
Author

Hi Darrin

I've not looked at tresecco's idea but this is how I would do it

- Start by adding random numbers to the accounts

Accounts: Load rowno() as AccNo, rand() as RandNo AutoGenerate(12345);

- Add a "Random" integer from 1 to the total number of rows by sorting by the random number, and adding the rownumber:

Accounts_Sorted:

Load AccNo,  Rowno() as Rank resident Accounts order by RandNo;

- Work out how many Accounts each agent needs, put this in a variable:

let vNumAgents = 20;

let vNumAccounts = NoOfRows('Accounts');

let vFactor= $(vNumAccounts)/$(vNumAgents);

- Divide the random "Rank" integer in the accounts table by this figure and round up to get the number for the Agent.

Accounts_Allocated:

Load AccNo, ceil(Rank/$(vFactor),1) as AgentNo resident Accounts_Sorted;

You will now have 20 agents allocated randomly to 12345 accounts, this can change each day!

Is this what you need?

Regards,

Erica

View solution in original post

3 Replies
Not applicable
Author

Hi Darrin

I've not looked at tresecco's idea but this is how I would do it

- Start by adding random numbers to the accounts

Accounts: Load rowno() as AccNo, rand() as RandNo AutoGenerate(12345);

- Add a "Random" integer from 1 to the total number of rows by sorting by the random number, and adding the rownumber:

Accounts_Sorted:

Load AccNo,  Rowno() as Rank resident Accounts order by RandNo;

- Work out how many Accounts each agent needs, put this in a variable:

let vNumAgents = 20;

let vNumAccounts = NoOfRows('Accounts');

let vFactor= $(vNumAccounts)/$(vNumAgents);

- Divide the random "Rank" integer in the accounts table by this figure and round up to get the number for the Agent.

Accounts_Allocated:

Load AccNo, ceil(Rank/$(vFactor),1) as AgentNo resident Accounts_Sorted;

You will now have 20 agents allocated randomly to 12345 accounts, this can change each day!

Is this what you need?

Regards,

Erica

Anonymous
Not applicable
Author

Erica,

Of course I was making this much harder than it needed to be. 

Thank you very much.

Not applicable
Author

No worries!


Another way could be to use a random number * 20 (or number of staff) for each row of accounts. This would be quicker to load, but would of course not guarantee an equal number of accounts per staff. Situation dependent I guess.


Erica