Calcular um desconto de preço em níveis

Nível de codificação: iniciante
Duração: 10 minutos
Tipo de projeto: função personalizada

Objetivos

  • Entenda o que a solução faz.
  • Entenda o que os serviços do Apps Script fazem na solução.
  • Configure o script.
  • Execute o script.

Sobre esta solução

Se você oferece um sistema de preços em camadas para seus clientes, essa função personalizada facilita o cálculo dos valores de desconto dos preços.

Embora seja possível usar a função integrada SUMPRODUCT para fazer um cálculo de preços em níveis, o uso de SUMPRODUCT é mais complexo e menos flexível do que a função personalizada dessa solução.

Captura de tela do exemplo de preços por nível

Como funciona

Um modelo de preços em camadas significa que o custo de produtos ou serviços diminui com base na quantidade comprada.

Por exemplo, imagine que você tenha dois níveis, um que varia de US $0 a US$ 500 e tem desconto de 10% e outro que varia de US $501 a US$ 1.000 e tem desconto de 20%. Se o preço total para o qual você precisa calcular um desconto for R $700, o script multiplicará os primeiros R $500 por 10% e os R $200 restantes por 20%, para um desconto total de R$ 90.

Para um determinado preço total, o script percorre os níveis especificados na tabela de preços de níveis. Para cada parte do preço total que se enquadra em um nível, essa parte é multiplicada pelo valor percentual associado do nível. O resultado é a soma do cálculo de cada nível.

Serviços do Apps Script

Essa solução usa o seguinte serviço:

  • Serviço de planilha: recebe o valor e calcula qual parte do valor será multiplicada pelo desconto percentual de cada nível.

Pré-requisitos

Para usar este exemplo, você precisa dos seguintes pré-requisitos:

  • Uma Conta do Google (as contas do Google Workspace podem exigir a aprovação do administrador).
  • Um navegador da Web com acesso à Internet.

Configurar o script

Clique no botão abaixo para fazer uma cópia da planilha Função personalizada de preços de níveis. O projeto do Apps Script para esta solução está anexado à planilha.
Fazer uma cópia

Executar o script

  1. Na planilha copiada, a tabela na linha 16 mostra um exemplo de cálculo de preço para um produto de software como serviço (SaaS).
  2. Para calcular o valor do desconto, na célula C20, insira =tierPrice(C19,$B$3:$D$6). O preço final é atualizado na célula C21. Se você estiver em um local que usa vírgulas decimais, talvez seja necessário inserir =tierPrice(C19;$B$3:$D$6).

Revisar o código

Para revisar o código do Apps Script para essa solução, clique em Mostrar código-fonte abaixo:

Acessar o código-fonte

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 (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;
}

Modificações

Você pode editar a função personalizada quantas vezes quiser para atender às suas necessidades. Confira abaixo uma adição opcional para atualizar manualmente os resultados da função personalizada.

Atualizar resultados em cache

Ao contrário das funções integradas, o Google armazena em cache as funções personalizadas para otimizar o desempenho. Portanto, se você mudar algo na sua função personalizada, como um valor que está sendo calculado, talvez ela não force uma atualização imediatamente. Para atualizar o resultado da função manualmente, siga estas etapas:

  1. Para adicionar uma caixa de seleção a uma célula vazia, clique em Inserir > Caixa de seleção.
  2. Adicione a célula que tem a caixa de seleção como um parâmetro extra da função personalizada. Por exemplo, se você adicionar uma caixa de seleção à célula D20, atualize a função tierPrice() na célula C20 para =tierPrice(C19,$B$3:$D$6,D20).
  3. Marque ou desmarque a caixa de seleção para atualizar os resultados da função personalizada.

Colaboradores

Esse exemplo é mantido pelo Google com a ajuda de especialistas em desenvolvimento do Google.

Próximas etapas