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()efilter()funcionam normalmente porque os dados agora são um array ou número simples.
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
- 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. - 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 deHorasmultiplicado por uma taxa, adicione uma fórmulaprop("Horas") * 50e nomeie comoCusto. - 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
- Abra o banco de dados pai
Vá para o banco de dados que contém a propriedade de relação (ex.: Projetos). - Adicione uma nova propriedade de rollup
Clique no + no cabeçalho da última coluna. Selecione Rollup na lista de tipos de propriedade. - 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.:HorasouCusto).
– Calcular: Escolha Mostrar original para obter uma lista de todos os valores. Isso é necessário se você planeja usarmap()oufilter()dentro de uma lambda. - Nomeie a propriedade de rollup
Dê um nome claro comoHoras ConsolidadasouTodos os Custos.
Passo 3: Escreva a Fórmula Lambda Usando o Rollup
- Adicione uma propriedade de fórmula
No banco de dados pai, adicione uma nova propriedade de fórmula. Nomeie algo comoTotal de HorasouCustos Filtrados. - 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 é queprop("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. - 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.
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.