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

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

Цели

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

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

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

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

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

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

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

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

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

Службы скриптов приложений

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

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

Предпосылки

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

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

Настройте сценарий

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

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

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

Проверьте код

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

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

Код.gs

решения/пользовательские-функции/уровневое-ценообразование/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 (let [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.
    let 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 Developer Experts.

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