Google sheets google sheets中的销售计划仪表板

Google sheets google sheets中的销售计划仪表板,google-sheets,google-sheets-formula,google-sheets-api,Google Sheets,Google Sheets Formula,Google Sheets Api,测试表: 目标: 我正在尝试为我的一个客户创建一个自动计划表。工作表的目的是: 在单元格B1 按广告平台细分的退货成本、销售线索和销售额 当前工作表设置: 单元格B1是工作表中唯一的手动输入。对于A4:G10之间的表格,以绿色突出显示的列是固定值。成本列B4:B10和销售列G4:G10是计算字段。目标是计算leads列的值,以便单元格G10中sales列的总数等于单元格B1中的sales target 计算每个渠道潜在客户的限制条件: 每个广告平台可以产生的潜在客户的最大数量如列E4:E1

测试表:

目标:

我正在尝试为我的一个客户创建一个自动计划表。工作表的目的是:

  • 在单元格
    B1
  • 按广告平台细分的退货成本、销售线索和销售额
当前工作表设置:

单元格
B1
是工作表中唯一的手动输入。对于
A4:G10
之间的表格,以绿色突出显示的列是固定值。成本列
B4:B10
和销售列
G4:G10
是计算字段。目标是计算leads列的值,以便单元格
G10
中sales列的总数等于单元格
B1
中的sales target

计算每个渠道潜在客户的限制条件:

每个广告平台可以产生的潜在客户的最大数量如列
E4:E10
所示。因此,在这个测试表中,Facebook和Bing能够产生的最大潜在客户数量分别是500和1000,以此类推

广告平台按每潜在客户成本增加的顺序列出,如列
C4:C10
所示。因此,顶部的频道最便宜,而底部的频道最贵。目标是首先从最便宜的渠道获得最大的潜在客户,然后再转移到下一个渠道,直到实现销售目标。在测试表中,我们需要先从Facebook获得500条线索,然后从谷歌广告获得500条线索,然后从Bing获得1000条线索,依此类推,直到cell
G10
中的销售总额等于cell
B1
中的销售目标


我有点迷路了,如果你能和我分享任何帮助,我将不胜感激

据我所知,阅读您的问题时,您只需要帮助了解如何计算潜在客户,即D5:D9列。您希望总销售额等于单元格B1中的值。如果我误解了你的问题,我道歉

如果我答对了你的问题,你可以试试看-

salesLimit=int(输入())
#这些是E列中的值
leadLimit=[50010001000]
对于范围(0,len(leadLimit))内的x:
#乘以3/100,因为这是F列中的转换率

如果(leadLimit[x]*3/100)据我所知,阅读您的问题时,您只需要帮助了解如何计算Lead,即D5:D9列。您希望总销售额等于单元格B1中的值。如果我误解了你的问题,我道歉

如果我答对了你的问题,你可以试试看-

salesLimit=int(输入())
#这些是E列中的值
leadLimit=[50010001000]
对于范围(0,len(leadLimit))内的x:
#乘以3/100,因为这是F列中的转换率

如果(leadLimit[x]*3/100)我找到了我需要的方法。我添加了一个按钮,可以触发脚本函数
calculate()
进行计算。这是一个非常基本的脚本,我将发布另一个问题,看看它是否可以优化-我的实际工作表有动态数量的广告平台,我仍然需要脚本来适应这一点

脚本:

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)
  }    
}
函数计算(){
//拿到计划表
var spreadsheet=SpreadsheetApp.getActiveSpreadsheet()
var sheet=电子表格。getSheetByName('Planner'))
//获取合同目标作为输入
var target=sheet.getRange('B1').getValue()
//清除pin卡列表
sheet.getRange('D11:D15').clearContent()
//设置第一个通道的值
firstChannelValue(表、目标)
//设置第二个通道的值
第二通道值(表、目标)
//设置第三个通道的值
第三通道值(表、目标)
//设置第四个通道的值
第四通道值(表,目标)
//设置第五个通道的值
第五通道值(表,目标)
}
函数值(表、目标){
//pin卡的最大数量
var pcLimit=sheet.getRange('E11').getValue()
//转化率
var convRate=sheet.getRange('F11').getValue()
//需要填充的单元格
var pinCard=sheet.getRange('D11')
//最大可能值
var maxValue=pcLimit*convRate
//单元格的设定值

if(maxValue我知道了如何做我需要的事情。我添加了一个按钮,可以触发脚本函数
calculate()
进行计算。这是一个非常基本的脚本,我将发布另一个问题,以确定它是否可以优化-我的实际工作表有动态数量的广告平台,我仍然需要脚本来适应

脚本:

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)
  }    
}
函数计算(){
//拿到计划表
var spreadsheet=SpreadsheetApp.getActiveSpreadsheet()
var sheet=电子表格。getSheetByName('Planner'))
//获取合同目标作为输入
var target=sheet.getRange('B1').getValue()
//清除pin卡列表
sheet.getRange('D11:D15').clearContent()
//设置第一个通道的值
firstChannelValue(表、目标)
//设置第二个通道的值
第二通道值(表、目标)
//设置第三个通道的值
第三通道值(表、目标)
//设置第四个通道的值
第四通道值(表,目标)
//设置第五个通道的值
第五通道值(表,目标)
}
函数值(表、目标){
//pin卡的最大数量
var pcLimit=sheet.getRange('E11').getValue()
//转化率
var convRate=sheet.getRange('F11').getValue()
//需要填充的单元格
var pinCard=sheet.getRange('D11')
//最大可能值
var maxValue=pcLimit*convRate
//单元格的设定值
如果(最大值
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)
  }    
}