Creates a Utilization Report
Appending to an array

The global iteration variable is used as the index to set objects in the global userArray. This implementation practically appends items to the array:


userArray[iteration] = new Object(),
userArray[iteration].id = info.users[x].id,
userArray[iteration].name = info.users[x].first_name + ' ' + info.users[x].last_name
userArray[iteration].billableHours = 0;
userArray[iteration].totalHours = 0;
iteration++;



A simpler alternative is to use the push method of arrays instead of the iteration variable.
Also, instead of setting the fields one by one,
it will be shorter to use an object literal:

userArray.push({
  id: info.users[x].id,
  name: info.users[x].first_name + ' ' + info.users[x].last_name,
  billableHours: 0,
  totalHours: 0
});


Data structures

In callback2,
for each time entry,
you loop over userArray until you find a user with the matching id.
You could avoid this nested loop by using a mapping of user ids to users.
If you don't need to preserve the ordering of users,
then you can drop userArray in favor of the map.
If you need to preserve the ordering, you can keep both.

Punctuation

The punctuation here is messy and potentially buggy:


userArray[iteration] = new Object(),
userArray[iteration].id = info.users[x].id,
userArray[iteration].name = info.users[x].first_name + ' ' + info.users[x].last_name
userArray[iteration].billableHours = 0;
userArray[iteration].totalHours = 0;
iteration++;



Each line should have ended with a ;, instead of , or nothing.

Don't repeat yourself

The options and options2 variables are almost identical.
Try to avoid copy-pasting,
use helper methods or benefit from JavaScript's prototypal inheritance instead.

Naming

Instead of numbering in names such as options1, callback1, and others,
it would be better to use more meaningful names.