Corrigir Fórmula do Notion: Propriedade de Relação Dentro de Lambda
🔍 WiseChecker

Corrigir Fórmula do Notion: Propriedade de Relação Dentro de Lambda

As fórmulas do Notion são poderosas, mas têm limites rígidos. Um problema comum ocorre quando você escreve uma fórmula dentro de uma função lambda, como map() ou filter(), e tenta referenciar uma propriedade de relação diretamente. A fórmula retorna um erro ou resultados inesperados. Isso acontece porque funções lambda em fórmulas do Notion não podem acessar propriedades de relação do contexto da linha pai — apenas propriedades do item atual na iteração estão disponíveis. Este artigo explica por que essa limitação existe e fornece uma solução confiável para fazer sua fórmula funcionar.

Principais Conclusões: Corrigindo Acesso a Propriedade de Relação Dentro de Lambda

  • Use uma propriedade de rollup em vez de uma relação direta: Um rollup pré-computa o valor necessário, tornando-o acessível dentro de uma lambda sem erros de escopo.
  • Crie uma propriedade de fórmula no banco de dados relacionado: Mova a lógica de cálculo para o banco de dados filho e depois faça o rollup do resultado para o pai.
  • Aplique a lambda no valor do rollup, não na relação: Uma vez que o valor é consolidado, map() e filter() funcionam normalmente porque os dados agora são um array ou número simples.

ADVERTISEMENT

Por que as Fórmulas do Notion Não Conseguem Acessar Propriedades de Relação Dentro de uma Lambda

As fórmulas do Notion executam em um ambiente restrito. Quando você usa uma função lambda como map(), filter() ou reduce(), o mecanismo de fórmula muda o contexto de execução. Dentro da lambda, a variável current se refere a cada elemento do array que está sendo iterado, não à linha que contém a fórmula. Propriedades de relação como prop("Tarefas Relacionadas") pertencem à linha, não à variável de iteração. Portanto, o mecanismo de fórmula não consegue resolvê-las dentro da lambda, produzindo um erro ou retornando undefined.

Por exemplo, suponha que você tenha um banco de dados de Projetos com uma relação para um banco de dados de Tarefas. Você quer somar a propriedade Horas de todas as tarefas relacionadas. Escrever prop("Tarefas Relacionadas").map(current.prop("Horas")) falha porque prop("Horas") não é acessível diretamente nos elementos do array de relação — esses elementos são IDs de página, não linhas completas. O mecanismo de fórmula não permite a busca implícita de propriedades de linhas relacionadas dentro de lambdas.

A causa raiz é o modelo de escopo de fórmula do Notion. Funções lambda só veem os dados passados para elas, que são uma lista de IDs de página ou valores. Para acessar uma propriedade de uma página relacionada, você deve primeiro consolidar (roll up) essa propriedade para o banco de dados pai. Uma propriedade de rollup pré-busca os valores necessários, tornando-os disponíveis como um array simples, número ou texto que a lambda pode processar.

Passos para Corrigir o Acesso a Propriedade de Relação Dentro de uma Lambda

A solução envolve duas etapas: criar uma fórmula no banco de dados filho (se necessário) e depois criar um rollup no banco de dados pai. Finalmente, use o rollup dentro da sua fórmula lambda.

Passo 1: Garanta que a Propriedade Alvo Exista no Banco de Dados Relacionado

  1. Abra o banco de dados relacionado
    Navegue até o banco de dados que está vinculado pela relação. Por exemplo, se seu banco de dados pai é Projetos e a relação aponta para Tarefas, abra o banco de dados Tarefas.
  2. Adicione ou confirme a propriedade necessária
    Certifique-se de que a propriedade que você deseja usar (ex.: Horas, Status, Data de Vencimento) existe como uma coluna no banco de dados Tarefas. Se precisar de um valor calculado, crie uma propriedade de fórmula no banco de dados Tarefas que faça o cálculo. Por exemplo, se você precisa de Horas multiplicado por uma taxa, adicione uma fórmula prop("Horas") * 50 e nomeie como Custo.
  3. Salve o banco de dados
    As alterações são salvas automaticamente no Notion. Você pode fechar a visualização do banco de dados.

Passo 2: Crie uma Propriedade de Rollup no Banco de Dados Pai

  1. Abra o banco de dados pai
    Vá para o banco de dados que contém a propriedade de relação (ex.: Projetos).
  2. Adicione uma nova propriedade de rollup
    Clique no + no cabeçalho da última coluna. Selecione Rollup na lista de tipos de propriedade.
  3. Configure o rollup
    No painel de configuração do rollup:
    Relação: Escolha a propriedade de relação (ex.: Tarefas Relacionadas).
    Propriedade: Selecione a propriedade do banco de dados relacionado (ex.: Horas ou Custo).
    Calcular: Escolha Mostrar original para obter uma lista de todos os valores. Isso é necessário se você planeja usar map() ou filter() dentro de uma lambda.
  4. Nomeie a propriedade de rollup
    Dê um nome claro como Horas Consolidadas ou Todos os Custos.

Passo 3: Escreva a Fórmula Lambda Usando o Rollup

  1. Adicione uma propriedade de fórmula
    No banco de dados pai, adicione uma nova propriedade de fórmula. Nomeie algo como Total de Horas ou Custos Filtrados.
  2. Use a propriedade de rollup dentro da lambda
    Agora você pode escrever uma lambda que opera nos valores do rollup. Por exemplo, para somar todas as horas:
    prop("Horas Consolidadas").map(current).sum()
    Ou para filtrar custos maiores que 100:
    prop("Todos os Custos").filter(current > 100)
    O ponto chave é que prop("Horas Consolidadas") retorna um array de números (ou texto), não IDs de página. A lambda pode iterar sobre esse array sem precisar acessar propriedades de relação.
  3. Teste a fórmula
    Adicione alguns itens relacionados com valores diferentes. Verifique se a fórmula retorna o resultado esperado. Se retornar um erro, verifique novamente se o cálculo do rollup está definido como Mostrar original e não como Mostrar únicos ou uma agregação.

ADVERTISEMENT

Se a Fórmula Ainda Tiver Problemas Após a Correção Principal

Rollup Retorna um Único Valor em Vez de um Array

Se você definir o cálculo do rollup como Soma, Média, Contagem ou qualquer agregação, o rollup retorna um único número, não uma lista. Lambdas exigem uma lista. Altere o cálculo para Mostrar original para obter um array de todos os valores. Em seguida, aplique sua agregação dentro da fórmula lambda.

Fórmula Mostra Undefined ou NaN

Isso geralmente significa que a propriedade de rollup está vazia ou o banco de dados relacionado não tem linhas. Verifique se a relação realmente vincula páginas. Também verifique se a propriedade selecionada no rollup existe nessas páginas e contém dados válidos. Se a propriedade for uma fórmula, certifique-se de que ela retorna um número ou texto, não um erro.

Função Lambda Retorna um Erro Sobre Current

As fórmulas do Notion diferenciam maiúsculas de minúsculas. Certifique-se de escrever current em minúsculas. Confirme também que você está usando o nome do método correto: map(), filter() ou reduce(). Se você usar forEach(), o Notion retornará um erro porque forEach() não é suportado em fórmulas.

Acesso Direto à Relação vs Solução com Rollup: Comparação

Item Relação Direta Dentro de Lambda Solução com Rollup
Escopo Apenas IDs de página — não consegue acessar propriedades filhas Valores pré-buscados do banco de dados relacionado
Sintaxe da fórmula prop("Relação").map(prop("Propriedade Filha")) — falha prop("Rollup").map(current) — funciona
Etapas de configuração Nenhuma — falha imediatamente Requer uma propriedade de rollup no banco de dados pai
Desempenho Sem sobrecarga Rollup atualiza automaticamente, mas pode adicionar leve atraso em bancos de dados grandes
Flexibilidade Não é possível filtrar ou mapear com base em propriedades filhas Pode usar filter(), map() e reduce() no array consolidado

A solução com rollup é o único método confiável para usar dados de relação dentro de uma lambda. Ela adiciona uma propriedade extra ao banco de dados pai, mas libera todo o poder das funções de array do Notion.

Agora você pode escrever fórmulas que somam, filtram ou transformam dados de bancos de dados relacionados usando funções lambda. Comece criando uma propriedade de rollup com Mostrar original como cálculo. Se precisar realizar cálculos nos dados filhos primeiro, adicione uma propriedade de fórmula ao banco de dados filho e consolide esse resultado. Como dica avançada, você pode encadear múltiplos rollups: consolide uma fórmula do filho e depois aplique uma lambda no pai para calcular médias ponderadas ou contagens condicionais.

ADVERTISEMENT