O Notion Formula 2.0 introduziu a capacidade de trabalhar com propriedades de relação diretamente dentro de fórmulas usando expressões lambda. Antes dessa atualização, você só podia referenciar uma propriedade de relação para contar ou verificar existência, mas não podia filtrar, mapear ou reduzir os itens vinculados. Este artigo explica como escrever expressões lambda que operam em valores de relação no Formula 2.0. Você aprenderá a sintaxe para padrões de map, filter e reduce, e verá exemplos reais que agregam dados de um banco de dados vinculado.
Principais Conclusões: Usar Relação na Fórmula 2.0 com Lambda
- Função map(): Transforma cada item vinculado em um novo valor, como extrair uma propriedade de cada página relacionada.
- Função filter(): Retorna apenas os itens vinculados que atendem a uma condição definida dentro da lambda.
- Função reduce(): Agrega todos os itens vinculados em um único valor, como somar uma propriedade numérica em linhas relacionadas.
Como o Notion Formula 2.0 Lida com Propriedades de Relação
No Notion Formula 2.0, uma propriedade de relação é tratada como uma lista de páginas do banco de dados vinculado. Cada item nessa lista é um objeto de página, e você pode acessar suas propriedades usando notação de ponto dentro de uma expressão lambda. Uma expressão lambda é uma função anônima curta que você passa para funções como map, filter e reduce. A lambda define como cada elemento da lista deve ser processado.
Antes de usar uma relação em uma fórmula, você precisa ter uma propriedade de relação já criada entre dois bancos de dados. A fórmula reside no banco de dados de origem (o lado que contém a propriedade de relação). O banco de dados vinculado deve conter as propriedades que você deseja ler, como um campo numérico chamado “Valor” ou um campo de seleção chamado “Status”.
A sintaxe geral para uma lambda no Notion Formula 2.0 usa o operador pipe com a palavra-chave current ou uma variável nomeada. Por exemplo:
prop("Itens Relacionados").map(current.prop("Valor"))
Esta expressão pega a propriedade de relação chamada “Itens Relacionados”, mapeia cada página vinculada para sua propriedade “Valor” e retorna uma lista de números. Você pode então passar essa lista para sum() ou outras funções de agregação.
Funções que Aceitam Lambdas
Três funções de lista aceitam lambdas no Formula 2.0:
- map() — transforma cada elemento e retorna uma nova lista do mesmo tamanho.
- filter() — retorna apenas os elementos onde a lambda avalia como verdadeiro.
- reduce() — combina todos os elementos em um único valor usando um acumulador.
Todas as três exigem uma lambda como primeiro argumento. A lambda recebe cada elemento como uma variável (por padrão chamada current) e pode acessar propriedades com a função prop() ou notação de ponto se você atribuir um nome de variável.
Escrevendo Expressões Lambda em uma Fórmula do Notion 2.0
Esta seção mostra como escrever uma fórmula que usa uma propriedade de relação com uma lambda. Usaremos um exemplo onde um banco de dados de Faturas tem uma relação com um banco de dados de Itens de Linha. Cada item de linha tem uma propriedade numérica chamada “Preço”. O objetivo é somar todos os preços dos itens de linha relacionados.
- Abra o editor de fórmulas
No banco de dados de origem (Faturas), clique no botão + em uma coluna de propriedade nova ou existente. Selecione Fórmula como o tipo de propriedade. O editor de fórmulas será aberto. - Referencie a propriedade de relação
Digiteprop("Itens de Linha")para obter a lista de páginas vinculadas. Substitua “Itens de Linha” pelo nome exato da sua propriedade de relação. O editor de fórmulas mostrará uma lista de propriedades disponíveis conforme você digita. - Aplique map() para extrair o Preço
Adicione.map(current.prop("Preço"))após a propriedade de relação. Isso cria uma lista de valores de Preço de todos os itens de linha relacionados. A expressão completa é:prop("Itens de Linha").map(current.prop("Preço")) - Use sum() para agregar
Envolva toda a expressão map comsum()para somar todos os preços. A fórmula final é:sum(prop("Itens de Linha").map(current.prop("Preço"))) - Teste a fórmula
Crie pelo menos uma fatura e vincule-a a alguns itens de linha. A fórmula deve exibir o preço total. Se o resultado estiver em branco, verifique se a propriedade Preço existe no banco de dados Itens de Linha e contém números.
Filtrando Itens Relacionados Antes da Agregação
Você pode combinar filter() com map() para trabalhar apenas em um subconjunto de itens relacionados. Por exemplo, somar apenas itens de linha onde a propriedade Status é igual a “Pago”:
sum(prop("Itens de Linha").filter(current.prop("Status") == "Pago").map(current.prop("Preço")))
A função filter() executa primeiro e retorna uma lista de páginas onde Status é “Pago”. Em seguida, map() extrai o Preço de cada página restante, e sum() os soma.
Usando reduce() para Agregação Personalizada
A função reduce() oferece controle total sobre como os valores são combinados. Ela recebe uma lambda com dois argumentos: um acumulador e o elemento atual. A lambda deve retornar o novo valor do acumulador. Por exemplo, para concatenar todos os nomes dos itens de linha em uma única string separada por vírgulas:
prop("Itens de Linha").reduce((acc, current) => acc + ", " + current.prop("Nome"), "")
O segundo argumento de reduce() é o valor inicial do acumulador (string vazia neste caso). A lambda recebe acc e current, os concatena com uma vírgula e retorna o resultado. Observe que o primeiro item terá uma vírgula à esquerda porque a string inicial está vazia. Você pode lidar com isso usando uma expressão ternária dentro da lambda.
Erros Comuns e Limitações
A Fórmula Retorna em Branco ou Lista Vazia
Se sua fórmula retornar em branco, primeiro verifique se a propriedade de relação realmente tem páginas vinculadas. Uma relação com zero itens produzirá uma lista vazia. Funções como sum() retornam 0 para uma lista vazia, mas outras funções como map() podem retornar uma lista vazia que aparece em branco em uma célula de fórmula. Use a função empty() para testar se a lista está vazia: if(empty(prop("Itens de Linha")), 0, sum(...))
Incompatibilidade de Nome de Propriedade
Os nomes das propriedades dentro da lambda devem corresponder exatamente aos nomes das propriedades no banco de dados vinculado. Os nomes de propriedades no Notion diferenciam maiúsculas de minúsculas. Se a propriedade for nomeada “preço” no banco de dados Itens de Linha, escrever current.prop("Preço") retornará nulo. Verifique novamente a ortografia e capitalização no banco de dados vinculado.
Erros de Sintaxe Lambda
O Notion Formula 2.0 exige que a lambda seja escrita de uma maneira específica. A sintaxe de função de seta usa => (sinal de igual seguido por maior que). Não use espaços dentro da seta: (acc, current) => acc + 1 está correto. Além disso, ao usar o nome de variável padrão current, você pode omitir os parênteses: current.prop("Nome") é válido.
Desempenho com Listas de Relação Grandes
O Notion Formula 2.0 processa lambdas de forma síncrona no navegador. Se uma propriedade de relação contiver centenas ou milhares de itens vinculados, a fórmula pode levar vários segundos para calcular. Em casos extremos, a fórmula pode expirar e mostrar um erro. Mantenha as listas de relação abaixo de 500 itens para um desempenho confiável nas fórmulas.
Funções do Notion Formula 2.0 para Listas de Relação
| Função | Propósito | Exemplo com Relação |
|---|---|---|
| map() | Transforma cada item vinculado em um novo valor | prop("Itens").map(current.prop("Preço")) |
| filter() | Mantém apenas itens que atendem a uma condição | prop("Itens").filter(current.prop("Status") == "Ativo") |
| reduce() | Combina todos os itens em um único valor | prop("Itens").reduce((acc, cur) => acc + cur.prop("Contagem"), 0) |
| sum() | Soma valores numéricos de uma lista | sum(prop("Itens").map(current.prop("Valor"))) |
| average() | Calcula a média de valores numéricos | average(prop("Itens").map(current.prop("Pontuação"))) |
A tabela mostra as funções mais comuns usadas com propriedades de relação. Observe que sum() e average() funcionam diretamente em listas retornadas por map(). Você não precisa envolvê-las em reduce() para agregação simples.
Agora você pode escrever fórmulas que leem, filtram e agregam dados de bancos de dados relacionados usando expressões lambda. Comece testando o padrão map() e sum() em um pequeno conjunto de itens vinculados. Depois de confirmar que a sintaxe funciona, experimente filter() para restringir os resultados. Para lógica personalizada complexa, use reduce() com um acumulador. Lembre-se de manter os nomes das propriedades exatos e as listas de relação abaixo de 500 itens para obter o melhor desempenho.