Рассчитать многоуровневую скидку

Уровень владения программированием : начинающий
Продолжительность : 10 минут
Тип проекта : Пользовательская функция

Цели

  • Поймите, для чего предназначено это решение.
  • Разберитесь, что делают службы Apps Script в рамках данного решения.
  • Настройте скрипт.
  • Запустите скрипт.

Об этом решении

Если вы предлагаете своим клиентам многоуровневую систему ценообразования, эта настраиваемая функция упростит расчет скидок для ваших цен.

Хотя для расчета многоуровневой цены можно использовать встроенную функцию SUMPRODUCT , SUMPRODUCT применение сложнее и менее гибко, чем использование пользовательской функции данного решения.

Скриншот примера ценообразования по уровням.

Как это работает

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

Например, представьте, что у вас есть два уровня цен: один от 0 до 500 долларов со скидкой 10%, а другой от 501 до 1000 долларов со скидкой 20%. Если общая цена, для которой нужно рассчитать скидку, составляет 700 долларов, скрипт умножает первые 500 долларов на 10%, а оставшиеся 200 долларов — на 20%, в результате чего общая скидка составит 90 долларов.

Для заданной общей цены скрипт перебирает указанные уровни в таблице ценообразования. Для каждой части общей цены, попадающей в определенный уровень, эта часть умножается на соответствующее процентное значение уровня. Результатом является сумма вычислений для каждого уровня.

Сервисы Apps Script

Данное решение использует следующую службу:

  • Сервис электронных таблиц — берет заданное значение и вычисляет, какую часть этого значения нужно умножить на процент скидки для каждого уровня.

Предварительные требования

Для использования этого примера необходимы следующие условия:

  • Для работы потребуется учетная запись Google (для учетных записей Google Workspace может потребоваться подтверждение администратора).
  • Веб-браузер с доступом в интернет.

Настройте скрипт

Нажмите кнопку ниже, чтобы создать копию электронной таблицы с пользовательской функцией ценообразования по уровням . Проект Apps Script для этого решения прикреплен к электронной таблице.
Сделать копию

Запустите скрипт

  1. В скопированной вами электронной таблице в строке 16 показан пример расчета цены для продукта «Программное обеспечение как услуга» (SaaS).
  2. Для расчета суммы скидки в ячейке C20 введите =tierPrice(C19,$B$3:$D$6) . Итоговая цена обновится в ячейке C21 . Если вы используете десятичные запятые, возможно, вам потребуется ввести =tierPrice(C19;$B$3:$D$6) .

Просмотрите код

Чтобы просмотреть код Apps Script для этого решения, нажмите «Просмотреть исходный код» ниже:

Просмотреть исходный код

Code.gs

solutions/custom-functions/tier-pricing/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/custom-functions/tier-pricing

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/**
 * Calculates the tiered pricing discount.
 *
 * You must provide a value to calculate its discount. The value can be a string or a reference
 * to a cell that contains a string.
 * You must provide a data table range, for example, $B$4:$D$7, that includes the
 * tier start, end, and percent columns. If your table has headers, don't include
 * the headers in the range.
 *
 * @param {string} value The value to calculate the discount for, which can be a string or a
 * reference to a cell that contains a string.
 * @param {string} table The tier table data range using A1 notation.
 * @return number The total discount amount for the value.
 * @customfunction
 *
 */
function tierPrice(value, table) {
  let total = 0;
  // Creates an array for each row of the table and loops through each array.
  for (const [start, end, percent] of table) {
    // Checks if the value is less than the starting value of the tier. If it is less, the loop stops.
    if (value < start) {
      break;
    }
    // Calculates the portion of the value to be multiplied by the tier's percent value.
    const amount = Math.min(value, end) - start;
    // Multiplies the amount by the tier's percent value and adds the product to the total.
    total += amount * percent;
  }
  return total;
}

Модификации

Вы можете редактировать пользовательскую функцию по своему усмотрению в соответствии со своими потребностями. Ниже представлено дополнительное средство для ручного обновления результатов работы пользовательской функции.

Обновить кэшированные результаты

В отличие от встроенных функций, Google кэширует пользовательские функции для оптимизации производительности. Поэтому, если вы измените что-либо в своей пользовательской функции, например, вычисляемое значение, обновление может произойти не сразу. Чтобы обновить результат функции вручную, выполните следующие действия:

  1. Чтобы добавить флажок в пустую ячейку, нажмите «Вставка» > «Флажок» .
  2. Добавьте ячейку с флажком в качестве дополнительного параметра пользовательской функции. Например, если вы добавите флажок в ячейку D20 , обновите функцию tierPrice() в ячейке C20 на =tierPrice(C19,$B$3:$D$6,D20) .
  3. Установите или снимите флажок, чтобы обновить результаты работы пользовательской функции.

Авторы

Данный пример поддерживается компанией Google при содействии экспертов-разработчиков Google.

Следующие шаги