2 回答
TA贡献1785条经验 获得超4个赞
代替循环中的 setValue,您应该考虑在 variable/s 内进行计数,并且只有在循环完成后才 setValue。
一些建议的代码如下:
for(var i =8;i<=j;i++) { //loops through a data table to see dates and ranks
var dates = oppwon.getRange(i,22).getValue();
var tiers = oppwon.getRange(i,14).getValue();
var month = new Date(dates).getMonth()+1;
var countTiers = {}; //count by tiers of months
countTiers[`m${month}`][`t${tiers}`]++;
你最终会在循环之后得到一个像 {m1: {t1: 2, t2: 1}} 这样的对象。
然后您可以在所需的列中 setValue 进行最终计数。
TA贡献1890条经验 获得超9个赞
你可以定义一个函数
function countTiersByMonth ( dataTable, firstline, lastline ) {
var result = [ [0,0,0],[0,0,0],[0,0,0], [0,0,0],[0,0,0],[0,0,0], [0,0,0],[0,0,0],[0,0,0], [0,0,0],[0,0,0],[0,0,0] ];
var dates;
var tiers;
var month;
for(i = firstline; i<=lastline; i++) {
dates = dataTable.getRange(i,22).getValue();
tiers = dataTable.getRange(i,14).getValue();
month = new Date(dates).getMonth();
switch (tiers){ // we filter by tiers because it seems that you only care about
// tiers 1, 2, 3 wheras you care about all the months
case 1:
case 2:
case 3:
result[month][tiers-1]++; //+1 for the respective tier
// of the respective month
break; //other tiers are ignored
};
};
return result;
};
这需要数据表,第一个重要行(在您的示例中为 8)和最后一个相关行(在您的示例中为“j”)并输出一个包含 12 个元素的数组,每个月一个,每个包含 3 个元素,一个用于您想要计算的每一层。如果你愿意,让我们说五月的结果,你打电话
tierlist = countTiersByMonth(oppwon, 8, j) // We do the counting here
print(tierlist[4][0]) // arrays start at 0, so May -> [4], Tier 1 -> [0]
print(tierlist[4][1]) // May, Tier 2
print(tierlist[4][2]) // May, Tier 3
添加回答
举报