как написать простой подсчет, если - PullRequest
2 голосов
/ 26 сентября 2019

Я пытался найти это, но я не мог найти ответ на другие вопросы, которые были опубликованы.У меня есть два условия, которые используются для сортировки данных.Месяцы года и, если он имеет рейтинг 1, 2 или 3.

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

Я надеюсь, что все это имеет смысл, я попытался объяснить как можно лучше, я действительно поражен этим и не имею никакого опыта программирования / написания сценариев.Спасибо за любую помощь!

Я использовал приведенные ниже коды для возврата дат и рангов данных, а также для извлечения месяца.Затем он использует эти месяцы в if-заявлениях, чтобы разместить их на сводной странице.То, что я не знаю, как это сделать, - это вставить сюда формулу счета.Как и в этом коде, я хочу, чтобы он был похож на формулу, если = месяц = ​​1, а ярусы (ранги) = 1, то считать (нельзя добавить, потому что, если он добавится, то при обновлении страницы он добавится к уже подсчитанным числам).)

    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;

    switch (true){
      case((month==1)): //if it is january
         if(tiers==1)  // if it is rank 1
           jan1.setValue(); 
         if(tiers==2)
           jan2.setValue();

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вместо setValue в цикле, вы должны рассмотреть возможность подсчета в переменной / с и только 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}} после цикла.

Затем вы можете установить значение в желаемом столбце для окончательного подсчета.

1 голос
/ 26 сентября 2019

Вы можете определить функцию

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...