Análise de dados

Planilha de OKRs: roteamento de cenários no Google Sheets

Marc Sean18 de abril de 202611 min de leitura

Uma planilha de OKRs bem estruturada usa uma única célula de confiança - Pessimista, Base ou Otimista - e uma fórmula CHOOSE para carregar automaticamente as premissas correspondentes em todos os cálculos dependentes. Sem troca manual de células quando o forecast muda, sem referências quebradas quando alguém atualiza a aba de metas. A arquitetura é simples, mas o problema real está na aparência dos seus dados de origem numa segunda-feira de manhã.

A maioria dos tutoriais de OKR mostra 4 linhas de números limpos, digitados à mão. Não é assim que a sua planilha chega. Este artigo cobre o padrão completo: roteamento de cenários com CHOOSE e MATCH, progresso ajustado pela baseline, o que acontece quando a coluna "Atual" importa com strings cheias de espaços não separáveis - e por que exatamente o mesmo mecanismo funciona em modelos financeiros de DCF e WACC, não apenas em trackers de metas de vendas.

A Estrutura de Abas que Faz a Planilha de OKRs Funcionar

Uma planilha de OKRs mínima vive em 3 abas: uma para acompanhamento, uma para premissas e uma para o seletor de cenário.

OKR_Tracker - a aba que você consulta todos os dias:

ColCabeçalhoExemplo
AObjetivoCrescer receita de PME
BKey ResultNovo ARR
CResponsávelVendas
DBaselineR$ 650.000
EMetaR$ 1.400.000
FAtualR$ 1.087.000
GConfiançaBase
HProgresso%=fórmula

Premissas_Receita - 3 colunas de cenário, uma linha por driver:

DriverPessimistaBaseOtimista
Taxa de conversão de novos clientes18%24%31%
Valor médio de contratoR$ 140 milR$ 170 milR$ 205 mil
Ciclo de vendas (dias)725844
Taxa de churn6,2%4,1%2,8%

Cenário - uma única célula, B1, com validação de dados restrita a Pessimista,Base,Otimista.

A fórmula CHOOSE em qualquer célula calculada lê esse dropdown e roteia para a coluna correta:

=CHOOSE(MATCH(Cenário!$B$1,{"Pessimista","Base","Otimista"},0),
  Premissas_Receita!B2,
  Premissas_Receita!C2,
  Premissas_Receita!D2)

Quando o seu CFO, COO ou head de operações pede "roda o cenário pessimista", ele altera uma célula. Todas as projeções dependentes atualizam em cascata. É esse o mecanismo inteiro - e leva cerca de 20 minutos para montar assim que a aba de premissas estiver estruturada.

O Progresso Ajustado pela Baseline que Sua Planilha de OKRs Realmente Precisa

A fórmula ingênua de progresso é =F2/E2 - Atual dividido por Meta. Ela produz um número, mas mente.

Se a sua baseline foi R$ 650.000 e a meta é R$ 1.400.000, e o valor atual é R$ 1.087.000, a fórmula ingênua diz que você está em 77,6% da meta. Mas você começou em R$ 650.000, não do zero. Na prática, você fechou 58,3% do delta que precisa fechar: =(F2-D2)/(E2-D2) = (1.087.000 - 650.000) / (1.400.000 - 650.000) = 58,3%.

A diferença não é cosmética. Usando o progresso ingênuo contra uma meta de ARR de R$ 5 milhões em que a baseline era R$ 4,35 milhões, um headline de 77% vira um progresso real de 52%. De acordo com a pesquisa CFO Pulse 2024 da PwC, 67% dos líderes financeiros apontam métricas de progresso enganosas como um dos principais fatores de surpresas no planejamento em estágios avançados. Construir o denominador correto custa 4 caracteres.

Coloque isso em H2 do OKR_Tracker:

=IFERROR((F2-D2)/(E2-D2), "-")

O IFERROR importa. Quando E2 e D2 são idênticos - alguém definiu meta igual à baseline, o que acontece em objetivos novos antes de os alvos serem finalizados - você leva um erro de divisão por zero. Sem o wrapper, a célula vai para vermelho e a coluna de progresso parece quebrada. Com ele, você tem um traço limpo.

O Mesmo Padrão em Modelos Financeiros: DCF e WACC com Múltiplos Cenários

O padrão CHOOSE com MATCH não é exclusivo de trackers de metas. É o mesmo mecanismo que deveria estar na sua aba de FCFF ou no seu modelo de WACC - e provavelmente já está, só não de forma organizada.

Considere um modelo de valuation para uma empresa de médio porte com receita de R$ 80 milhões. As premissas macro variam por cenário: taxa Selic impacta o custo de capital, perspectiva de crescimento do PIB impacta a projeção de receita, e a aversão ao risco do mercado muda o prêmio de risco. Uma aba Premissas_Macro estruturada assim:

DriverPessimistaBaseOtimista
Crescimento de receita (a.a.)8%14%22%
Margem EBITDA12%16%21%
WACC16,5%13,2%11,8%
Múltiplo de saída (EV/EBITDA)6,0x7,5x9,2x

Com o dropdown de cenário em Config!$B$1, a célula de WACC no seu modelo de DCF vira:

=IFERROR(
  CHOOSE(MATCH(Config!$B$1,{"Pessimista","Base","Otimista"},0),
    Premissas_Macro!B4,
    Premissas_Macro!C4,
    Premissas_Macro!D4),
  Premissas_Macro!C4
)

Troca o cenário, e a taxa de desconto, o crescimento de receita projetado e o múltiplo de saída atualizam simultaneamente em toda a aba de FCFF. A diferença de valuation entre o cenário pessimista e o otimista com esses parâmetros pode facilmente representar 40-60% na avaliação final - exatamente o intervalo que você quer comunicar numa apresentação para investidores sem manter três arquivos separados. O padrão é idêntico ao do tracker de OKR; só a aba de premissas muda.

O mesmo vale para modelos com múltiplos: se você mantém uma tabela de comps setoriais com faixas de múltiplos por cenário de mercado, o CHOOSE roteia para a coluna correta da mesma forma. Para equipes de FP&A que revisam premissas mensalmente, vale criar um histórico na aba de premissas adicionando colunas Pessimista_Mar, Base_Mar, Otimista_Mar e manter o dropdown sempre apontando para o mês vigente - o CHOOSE lida com isso sem alteração na fórmula.

O que Acontece Quando os Dados São Realmente Bagunçados

A coluna Atual (F) é onde a planilha de OKRs quebra na prática. Se os valores reais são digitados à mão, tudo funciona. Se eles são importados de um CRM, ERP ou qualquer sistema que exporta CSV, você vai se deparar com isso regularmente:

A célula exibe 1087000, e =F2-D2 retorna #VALUE!.

A célula é uma string de texto. Parece um número, mas não é. Uma verificação rápida: =ISNUMBER(F2) retorna FALSE. Normalmente você consegue corrigir uma coluna inteira com:

=VALUE(TRIM(SUBSTITUTE(F2, CHAR(160), " ")))

O SUBSTITUTE é a parte que a maioria dos guias de limpeza de dados ignora. CHAR(160) é um espaço não separável - visualmente idêntico a um espaço comum dentro da célula, e o TRIM sozinho não o remove. De acordo com a documentação do Google Sheets, TRIM remove apenas espaços ASCII padrão (código 32). Espaços não separáveis (código 160) passam direto. Se os seus dados reais são importados de um CRM, ERP ou qualquer sistema que gera saída Unicode, provavelmente isso já está acontecendo com você - inclusive nas colunas de valores de receita que alimentam modelos financeiros.

Para o caso completo - formatos mistos, linhas em branco, texto que lê "108 %" com espaço antes do sinal de porcentagem - envolva tudo assim:

=IFERROR(
  VALUE(
    TRIM(
      SUBSTITUTE(
        SUBSTITUTE(F2, CHAR(160), ""),
        "%", ""
      )
    )
  ) / IF(SEARCH("%", F2&""), 100, 1),
  ""
)

Isso trata: strings de porcentagem com espaços, espaços não separáveis, células em branco e valores puramente numéricos. Coloque em uma coluna auxiliar (chame de Atual_Limpo) e aponte suas fórmulas de progresso para ela em vez de apontar diretamente para a coluna de importação.

Para linhas em que a classificação de confiança ainda não foi definida - objetivos novos sem valor em G2 - o roteamento CHOOSE vai gerar erro. Envolva assim:

=IFERROR(
  CHOOSE(
    MATCH(G2, {"Pessimista","Base","Otimista"}, 0),
    Premissas_Receita!B2,
    Premissas_Receita!C2,
    Premissas_Receita!D2
  ),
  Premissas_Receita!C2
)

Sem confiança definida, o padrão cai para Base. É um fallback razoável, e garante que um tracker preenchido pela metade não quebre todas as linhas abaixo da lacuna.

As Fórmulas que Degradam Graciosamente

Juntando tudo, uma linha de produção no OKR_Tracker fica assim:

H2 - Progresso ajustado pela baseline:

=IFERROR((Atual_Limpo-D2)/(E2-D2), "-")

Meta roteada por cenário (quando as metas variam por cenário):

=IFERROR(
  CHOOSE(MATCH(G2,{"Pessimista","Base","Otimista"},0),
    Metas!B2, Metas!C2, Metas!D2),
  Metas!C2
)

Gap para a meta em reais:

=IFERROR(E2 - Atual_Limpo, "-")

Os wrappers IFERROR não são teatro de programação defensiva - eles são a diferença entre um tracker que falha silenciosamente (mostra traços) e um que falha de forma barulhenta (propaga erros por 40 linhas e torna a planilha inutilizável antes de uma apresentação para o board).

Em abril de 2026, o padrão CHOOSE com MATCH é a forma mais limpa de fazer roteamento de cenários no Google Sheets sem recorrer a Apps Script ou named ranges que quebram quando as abas são renomeadas. Um único dropdown de confiança conectado a 3 colunas de premissas vai dar conta de todos os cenários de OKR - e de modelagem financeira - que a sua liderança solicitar.

Como Automatizar a Manutenção do Tracker

As fórmulas acima levam cerca de uma hora para construir. A manutenção contínua - atualizar os valores reais, verificar se a coluna Atual_Limpo ainda está interpretando corretamente após um novo formato de CSV, adicionar linhas quando os objetivos mudam no meio do trimestre, ou revisar premissas macro depois de uma reunião do Copom - é o que consome as próximas 5 horas por trimestre.

Se o seu tracker vive no Google Sheets, o ModelMonkey consegue ler as abas OKR_Tracker e Premissas_Receita, atualizar os valores reais, adicionar novos objetivos ou reescrever a fórmula de Atual_Limpo se o formato de importação mudar - basta digitar "atualizar os reais do Q2 com esta tabela" e colar o export. Ele inspeciona as fórmulas existentes sem precisar que você descreva a estrutura da planilha do zero a cada vez.

Perguntas Frequentes

Qual a diferença entre usar CHOOSE e IFs aninhados para roteamento de cenários?

CHOOSE com MATCH escala melhor. Com 3 cenários, o IF aninhado fica legível: =IF(A1="Base", x, IF(A1="Otimista", y, z)). Com 5 ou mais cenários - algo comum em modelos de stress test ou simulações de sensibilidade - o IF aninhado vira ilegível e difícil de auditar. CHOOSE aceita até 254 valores e mantém a lógica em uma estrutura linear. Para planilhas compartilhadas com múltiplos usuários, a legibilidade do CHOOSE também reduz erros de edição.

O padrão CHOOSE funciona da mesma forma para modelos de WACC e DCF?

Sim, de forma idêntica. A aba de premissas muda (drivers financeiros em vez de drivers de OKR), mas a fórmula é a mesma. A célula de WACC no seu modelo lê o dropdown de cenário e roteia para a coluna correspondente da tabela de premissas macro. Troca o cenário, e toda a cadeia de cálculo - FCFF projetado, valor presente, valuation final - atualiza em cascata sem tocar em nenhuma outra célula.

Por que o TRIM não resolve strings com espaços não separáveis vindas do ERP?

Porque TRIM remove apenas o caractere de espaço ASCII padrão (código 32). Espaços não separáveis têm código 160 e são visualmente indistinguíveis dentro da célula. Sistemas que exportam relatórios em Unicode - incluindo a maioria dos ERPs brasileiros e ferramentas de BI - frequentemente geram esse caractere em colunas de valores monetários. A solução é SUBSTITUTE(célula, CHAR(160), "") antes do TRIM.

Como evitar que o roteamento quebre quando alguém renomeia uma aba do Sheets?

Referências diretas como Premissas_Receita!B2 quebram se a aba for renomeada. Uma alternativa é usar INDIRECT com o nome da aba armazenado em uma célula de configuração: =INDIRECT("'"&Config!B5&"'!B2"), onde Config!B5 contém o nome atual da aba. Isso transfere o ponto de manutenção para uma única célula. A desvantagem é que INDIRECT é volátil e recalcula a cada mudança na planilha, o que pode tornar arquivos grandes mais lentos - avalie o trade-off conforme o tamanho do modelo.

Quantos cenários o CHOOSE suporta nativamente no Google Sheets?

Até 254 valores. Na prática, modelos com mais de 5 ou 6 cenários são difíceis de comunicar para stakeholders não técnicos. O limite operacional costuma ser o número de colunas que a sua aba de premissas consegue manter de forma legível - tipicamente entre 3 e 7. Para análises de sensibilidade com dezenas de combinações de parâmetros, a abordagem correta é uma tabela de dados com duas variáveis, não CHOOSE.