Планирование панели мониторинга продаж в гугл листах - PullRequest
1 голос
/ 28 апреля 2020

Лист для тестирования:

https://docs.google.com/spreadsheets/d/1t_hjD6Yx7iv_a9tcgETf82cZbl2cdV8vd0PuTQXZP6Y/edit?usp=sharing

Объектив:

I ' Я пытаюсь создать лист автоматизированного планирования для одного из моих клиентов. Идея заключается в следующем:

  • Ручной ввод общей цели продаж в ячейке B1
  • Возвратная стоимость, количество потенциальных клиентов и объем продаж с разбивкой по рекламной платформе

Настройка текущего листа:

Ячейка B1 является единственным ручным вводом в листе. Для таблицы между A4:G10 столбцы, выделенные зеленым цветом, являются фиксированными значениями. Столбец затрат B4:B10 и столбец продаж G4:G10 являются вычисляемыми полями. Цель состоит в том, чтобы вычислить значения столбца потенциальных клиентов таким образом, чтобы сумма столбца продаж в ячейке G10 была равна цели продаж в ячейке B1.

Ограничения расчета потенциальных возможностей для каждого канала:

Каждая рекламная платформа имеет максимальное количество потенциальных клиентов, которое может генерировать, показано в столбце E4:E10. Таким образом, в этом тестовом листе максимальное количество потенциальных клиентов, которые могут быть созданы Facebook, составляет 500, а Bing - 1000 и так далее.

Рекламные площадки перечислены в порядке увеличения стоимости за лидерство, показанном в столбце C4:C10. Таким образом, канал сверху самый дешевый, а канал снизу самый дорогой. Цель состоит в том, чтобы максимизировать количество потенциальных клиентов с самого дешевого канала, а затем перейти к следующему каналу, пока не будет достигнута цель продаж. В тестовом листе нам нужно сначала получить 500 потенциальных клиентов из Facebook, затем 500 потенциальных клиентов из Google Ads, затем 1000 потенциальных клиентов из Bing и т. Д., Пока сумма продаж в ячейке G10 не станет равна цели продаж в ячейке B1.

Я немного растерялся, и я был бы признателен за любую помощь, которой вы можете поделиться со мной!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

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

Сценарий:

function calculate() {

  // Get the planning sheet  
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = spreadsheet.getSheetByName('Planner')

  // Get contract target as the input
  var target = sheet.getRange('B1').getValue()

  // Clear the pin cards list
  sheet.getRange('D11:D15').clearContent()

  // Set the value of the first channel
  firstChannelValue(sheet, target)

  // Set the value of the second channel
  secondChannelValue(sheet, target)

  // Set the value of the third channel
  thirdChannelValue(sheet, target)

  // Set the value of the fourth channel
  fourthChannelValue(sheet, target)

  // Set the value of the fifth channel
  fifthChannelValue(sheet, target)

}

function firstChannelValue(sheet, target) {

  // Max number of pin cards
  var pcLimit = sheet.getRange('E11').getValue()

  // Conversion rate
  var convRate = sheet.getRange('F11').getValue()

  // Cell that needs to be filled
  var pinCard = sheet.getRange('D11')

  // Max possible value
  var maxValue = pcLimit*convRate

  // Set value of cell  
  if (maxValue <= target) {  
    pinCard.setValue(pcLimit)    
  }
  else {
    pinCard.setValue(target/convRate)
  }  
}


function secondChannelValue(sheet, target) {

  // Max number of pin cards
  var pcLimit = sheet.getRange('E12').getValue()

  // Conversion rate
  var convRate = sheet.getRange('F12').getValue()

  // Cell that needs to be filled
  var pinCard = sheet.getRange('D12')

  // Max possible value
  var maxValue = (pcLimit*convRate)

  // Value of first channel contracts
  var firstChannel = sheet.getRange('G11').getValue()

  // Revised target
  var revisedTarget = target - firstChannel

  // Set value of cell  
  if (maxValue <= revisedTarget) {  
    pinCard.setValue(pcLimit)    
  }
  else {
    pinCard.setValue(revisedTarget/convRate)
  }    
}


function thirdChannelValue(sheet, target) {

  // Max number of pin cards
  var pcLimit = sheet.getRange('E13').getValue()

  // Conversion rate
  var convRate = sheet.getRange('F13').getValue()

  // Cell that needs to be filled
  var pinCard = sheet.getRange('D13')

  // Max possible value
  var maxValue = (pcLimit*convRate)

  // Value of previous channel contracts
  var firstChannel = sheet.getRange('G11').getValue()
  var secondChannel = sheet.getRange('G12').getValue()

  // Revised target
  var revisedTarget = target - firstChannel - secondChannel

  // Set value of cell  
  if (maxValue <= revisedTarget) {  
    pinCard.setValue(pcLimit)    
  }
  else {
    pinCard.setValue(revisedTarget/convRate)
  }    
}


function fourthChannelValue(sheet, target) {

  // Max number of pin cards
  var pcLimit = sheet.getRange('E14').getValue()

  // Conversion rate
  var convRate = sheet.getRange('F14').getValue()

  // Cell that needs to be filled
  var pinCard = sheet.getRange('D14')

  // Max possible value
  var maxValue = (pcLimit*convRate)

  // Value of previous channel contracts
  var firstChannel = sheet.getRange('G11').getValue()
  var secondChannel = sheet.getRange('G12').getValue()
  var thirdChannel = sheet.getRange('G13').getValue()

  // Revised target
  var revisedTarget = target - firstChannel - secondChannel - thirdChannel

  // Set value of cell  
  if (maxValue <= revisedTarget) {  
    pinCard.setValue(pcLimit)    
  }
  else {
    pinCard.setValue(revisedTarget/convRate)
  }    
}


function fifthChannelValue(sheet, target) {

  // Max number of pin cards
  var pcLimit = sheet.getRange('E15').getValue()

  // Conversion rate
  var convRate = sheet.getRange('F15').getValue()

  // Cell that needs to be filled
  var pinCard = sheet.getRange('D15')

  // Max possible value
  var maxValue = (pcLimit*convRate)

  // Value of previous channel contracts
  var firstChannel = sheet.getRange('G11').getValue()
  var secondChannel = sheet.getRange('G12').getValue()
  var thirdChannel = sheet.getRange('G13').getValue()
  var fourthChannel = sheet.getRange('G14').getValue()

  // Revised target
  var revisedTarget = target - firstChannel - secondChannel - thirdChannel - fourthChannel

  // Set value of cell  
  if (maxValue <= revisedTarget) {  
    pinCard.setValue(pcLimit)    
  }
  else {
    pinCard.setValue(revisedTarget/convRate)
  }    
}
0 голосов
/ 28 апреля 2020

Из того, что я понимаю, прочитав ваш вопрос, вы просто нуждаетесь в помощи по вычислению потенциальных клиентов (столбец D5: D9). И вы хотите, чтобы общий объем продаж был равен значению в ячейке B1. Извиняюсь, если я неправильно понял ваш вопрос.

Вот что вы можете попробовать, если я правильно понял ваш вопрос-

salesLimit = int(input())
#These are the values from the column E
leadLimit = [500,500,1000,1000,1000]
for x in range(0,len(leadLimit)):
    #Multiplying with 3/100 because it's the conv rate found in column F
    if(leadLimit[x]*3/100)<salesLimit:
        salesLimit -= leadLimit[x]*3/100
        print("D"+str(5+x)," = ",leadLimit[x]*3/100)
    else:
        print("D"+str(5+x)," = ",salesLimit)
        salesLimit = 0

Пример ввода для B1:

100

Вывод для заданный ввод:

D5  =  15.0
D6  =  15.0
D7  =  30.0
D8  =  30.0
D9  =  10.0

Так как лидовое ограничение уже отсортировано на вашем листе, вы получите ожидаемый ответ, выполнив это.

...