Служба вызывается слишком много раз за короткое время: exec qps.- Google Sheets - PullRequest
0 голосов
/ 25 сентября 2018

Я использовал пользовательские функции, чтобы разбить простую математику на читаемый JavaScript, но получаю следующую ошибку:

Служба вызывается слишком много раз за короткое время: exec qps.Попробуйте Utilities.sleep(1000) между вызовами.(строка 0).

Я пробовал спать в течение случайного времени, но это не помогает.Мои функции выглядят так:

function conversationGrowthRate(clientCount, initialGrowthRate, conversationCount) {  
  //Utilities.sleep(Math.random() * 30000);
  for (var i = clientCount; i > 10; i--) {
    if (initialGrowthRate > 0) {
      conversationCount += initialGrowthRate
      initialGrowthRate -= 0.000003
    }
  }
  return conversationCount;
}

function conversionGrowth(clientCount, conversationCount, initialConversionRate, conversionGrowthRate, maxConversionRate, coversPerBooking, initialConversationGrowthRate, initialConversationCount) {
  //Utilities.sleep(Math.random() * 30000);
  if (clientCount <= 50) {
    return coversPerBooking * conversationCount * initialConversionRate;
  }
  else {
    var firstFiftyClientConversations = conversationGrowthRate(50,initialConversationGrowthRate, initialConversationCount)*30*50; //~30
    var additionalConversionGrowthRate = (clientCount-50) * conversionGrowthRate;
    var totalConversionRate = initialConversionRate + additionalConversionGrowthRate;
    var additionalClientConversations = conversationGrowthRate(clientCount-50, initialConversationGrowthRate, initialConversationCount) * 30 * (clientCount-50);
    if (totalConversionRate < maxConversionRate) {
      return coversPerBooking * ((firstFiftyClientConversations * initialConversionRate) + (additionalClientConversations * totalConversionRate));
    }
    else {
      return coversPerBooking * (conversationCount * maxConversionRate); 
    }
  }
}

function salesProductivity(currentExecs, prevMonthExecs, prevTwoMonthExecs, prevThreeMonthExecs, prevFourMonthExecs, salesPerExecPerMonth) {
  //Utilities.sleep(Math.random() * 30000);
  var firstMonthHires = currentExecs - prevMonthExecs;
  var secondMonthHires = prevMonthExecs - prevTwoMonthExecs;
  var thirdMonthHires = prevTwoMonthExecs - prevThreeMonthExecs;
  var fourthMonthHires = prevThreeMonthExecs - prevFourMonthExecs;
  var longerHires = prevFourMonthExecs;

  return (secondMonthHires * (0.33 * salesPerExecPerMonth)) + (thirdMonthHires * (0.66 * salesPerExecPerMonth)) + (fourthMonthHires * (1 * salesPerExecPerMonth)) + (longerHires * salesPerExecPerMonth);
}

Я ничего не изменил, прежде чем он начал работать.

1 Ответ

0 голосов
/ 12 января 2019

Google Sheets запускает пользовательские функции удаленно через службу под названием exec.Если есть «слишком много» вызовов (согласно некоторой недокументированной квоте или, по крайней мере, я не нашел такой документации) для каких-либо пользовательских функций, эта ошибка будет выдана.

Если вызовыпроисходит потому, что многие ячейки вызывают пользовательские функции, я не понимаю, как Utilities.sleep(milliseconds) может помочь, поскольку exec будет вызываться раньше, чем sleep (действительно, exec будет вызывать sleep прямо или косвенно).

Как уже упоминалось в некоторых комментариях, преобразование функции для приема диапазонов и возвращаемых массивов (и изменение листа для размещения указанной функции) - это путь (пока Google не добавит более разумное регулирование).

...