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条线索,依此类推,直到cellG10
中的销售总额等于cellB1
中的销售目标
我有点迷路了,如果你能和我分享任何帮助,我将不胜感激 据我所知,阅读您的问题时,您只需要帮助了解如何计算潜在客户,即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)
}
}