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

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

Цели

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

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

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

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

Снимок экрана с образцом уровня ценообразования

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

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

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

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

Службы сценариев приложений

В этом решении используется следующий сервис:

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

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

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

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

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

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

Запустите сценарий

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

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

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

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

Код.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.

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