Создание диаграммы выгорания в гугл листах - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь создать диаграмму выгорания на листах Google.У меня есть функция для суммирования данных (оценки) в те же даты.Проблема в том, что у меня есть несколько историй с одинаковым идентификатором, которые делаются в один день.Моя функция добавляет все числовые значения на эту дату.Мои данные;

StoryID Название Дата Оценить WorkDone
K726 Настройка разработки 19 марта 2015 г. 5 1
K726 Настройка разработки 19 марта 2015 г. 5 2
K726 Настройка разработки 20 марта 2015 г. 5 3
K727 Извлечение данных 19 марта 2015 г. 2 1
K727 Извлечение данных 23 марта 2015 г. 2 1

Когда я использую функцию для 19 марта, в результате я получаю 12.На самом деле это должно быть 7, так как K726 это та же история.Конечно, фактическая (проделанная работа) должна быть 4 на 19 марта. Я думаю, что мне нужна другая функция для оценки, но я не мог понять.Функция, которую я использую sumValid, приведена ниже.

/**
 * Sum data that's valid for a given date or array of dates.
 * @param idates    A date, or array of dates. For each date
 *                  the valid cells of arraz are extracted and
 *                  summed together.
 * @param arraz     The dimension table. It requires a header row
 *                  and it must have a column labelled "Valid from"
 * @param idCol     The name of column in arraz that is the ID of the
 *                  changing state.
 * @param validFromCol  Name of the column in arraz that says when the
 *                      data is valid from.
 * @param dataCol   The column name of the data to sum.
 * @returns  An array of values,
 *           one for each of the dates in idate.
 *           Each value is the sum of all cells in the dataCol that
 *           are valid for that date.
 */
function sumValid(idates, arraz, idCol, validFromCol, dataCol) {

  var validToArray = validTo(idCol, validFromCol, arraz);  
  var arraz2 = extractColumnsAndTransform([validFromCol , dataCol], arraz);

  return sumValidUsingArrays_(idates, arraz2[0], validToArray, arraz2[1]);
}

/**
 * Sum data in a Javascript array for many dates.
 * @param idates   An array of dates. For each date
 *                 the valid columns of arraz are extracted and
 *                 the cells are summed together.
 * @param validFroms  A Javascript array of "Valid from" dates.
 * @param validTos    A Javascript array of corresponding "Valid to" dates.
 * @param arraz    A Javascript array of numbers, each element of which
 *                 is valid from and to the corresponding dates.
 * @returns  An array containing the sum of all the numbers in arraz
 *           valid for each of the idates.
 */
function sumValidUsingArrays_(idates, validFroms, validTos, arraz) {

  if (!isBasicType(idates) && !isColumn(idates)) {
    throw "First parameter (dates) must be a single value or vertical column";
  }
  idates = make2DArray(idates);

  var results = [];
  idates.forEach(function(idate) {
    var result = sumValidOneDate_(new Date(idate), validFroms, validTos, arraz);
    results.push(result);
  });

  return results;
}

/**
 * Sum data in a Javascript array for just a single date.
 * @param idate  The date for which the valid numbers are extracted and summed.
 * @param validFroms  A Javascript array of "Valid from" dates.
 * @param validTos    A Javascript array of corresponding "Valid to" dates.
 * @param arraz    A Javascript array of numbers, each element of which
 *                 is valid from and to the corresponding dates.
 * @returns  The sum of all the numbers in arraz valid for idate.
 */
function sumValidOneDate_(idate, validFroms, validTos, arraz) {
  var sum = 0;
  for (var i = 0; i < validFroms.length; i++) {
    var validFrom = validFroms[i];
    var validTo = validTos[i];
    if (validFrom != "" && isBetween(idate, validFrom, validTo)) {
      var data = arraz[i];
      if (isNumber(data)) {
        sum += data;
      }
    }
  }

  return sum;
}
...