O Notion Formula 2.0 introduziu as funções Map() e Filter(), que permitem transformar e filtrar arrays diretamente em uma fórmula. Antes do Formula 2.0, era necessário usar rollups ou ferramentas externas para processar listas de valores. Este artigo explica como Map() e Filter() funcionam, mostra exemplos práticos que você pode copiar e adaptar, e aborda erros comuns que quebram essas fórmulas.
Principais conclusões: Map() e Filter() no Notion Formula 2.0
- Map( array, expressão ): Aplica uma expressão a cada elemento de um array e retorna um novo array do mesmo tamanho.
- Filter( array, condição ): Retorna um novo array contendo apenas os elementos que satisfazem uma condição.
- Combine com current.value: Dentro de Map e Filter, use
current.valuepara se referir a cada elemento individual do array de entrada.
Como Map e Filter funcionam no Notion Formula 2.0
Map() e Filter() são funções de array. Um array é uma lista de valores, como [1,2,3] ou [“a”,”b”,”c”]. Em bancos de dados do Notion, arrays geralmente vêm de propriedades de rollup, propriedades de seleção múltipla ou propriedades de fórmula que retornam listas.
Map() recebe dois argumentos: um array e uma expressão. A expressão é avaliada uma vez para cada elemento no array. Dentro da expressão, a variável current.value representa o elemento atual. O resultado de Map() é um novo array onde cada elemento é o resultado da expressão aplicada ao elemento original. Por exemplo, Map([1,2,3], current.value + 1) retorna [2,3,4].
Filter() também recebe dois argumentos: um array e uma condição. A condição é uma expressão booleana. Para cada elemento onde a condição é avaliada como verdadeira, esse elemento é incluído no array de saída. Por exemplo, Filter([1,2,3,4], current.value > 2) retorna [3,4].
Ambas as funções estão disponíveis apenas no Notion Formula 2.0. Se seu banco de dados foi criado antes desta atualização, você deve ativar o Formula 2.0 no editor de fórmulas clicando no ícone de engrenagem e selecionando “Usar Formula 2.0”.
Exemplos práticos de Map() e Filter()
Exemplo 1: Dobrar cada número em um rollup
Suponha que você tenha uma propriedade de rollup chamada “Pontuações” que retorna uma lista de números, como [10, 20, 30]. Você quer uma fórmula que dobre cada pontuação.
- Crie uma nova propriedade de fórmula
Adicione uma propriedade de fórmula ao seu banco de dados e nomeie-a como “Pontuações Dobradas”. - Ative o Formula 2.0
Clique no ícone de engrenagem do editor de fórmulas e selecione “Usar Formula 2.0”. - Insira a expressão Map
Digite:Map(prop("Pontuações"), current.value 2)
Isso retornará [20, 40, 60].
Exemplo 2: Filtrar produtos acima de um limite de preço
Imagine um rollup “Produtos” que retorna uma lista de preços, como [5.99, 12.50, 3.25, 20.00]. Você quer apenas preços acima de R$ 10.
- Crie uma propriedade de fórmula
Nomeie-a como “Itens Caros”. - Escreva a expressão Filter
Digite:Filter(prop("Produtos"), current.value > 10)
Resultado: [12.50, 20.00].
Exemplo 3: Combinar Map e Filter para transformar resultados filtrados
Você quer dobrar apenas as pontuações acima de 15 do rollup “Pontuações”.
- Use Filter dentro de Map
Digite:Map(Filter(prop("Pontuações"), current.value > 15), current.value 2)
Se “Pontuações” for [10, 20, 30], o resultado é [40, 60].
Exemplo 4: Extrair nomes de uma propriedade de seleção múltipla
Uma propriedade de seleção múltipla chamada “Tags” pode conter vários valores como “Urgente”, “Design”, “Bug”. Você quer uma fórmula que retorne apenas tags que começam com “D”.
- Use Filter com uma condição de string
Digite:Filter(prop("Tags"), startsWith(current.value, "D"))
Resultado: [“Design”].
Exemplo 5: Converter strings para maiúsculas
Você tem um rollup que retorna uma lista de nomes de produtos, como [“maçã”, “banana”, “cereja”] e quer todos em maiúsculas.
- Use Map com a função upper
Digite:Map(prop("Nomes dos Produtos"), upper(current.value))
Resultado: [“MAÇÔ, “BANANA”, “CEREJA”].
Erros comuns e limitações
Esquecer de ativar o Formula 2.0
Se você digitar Map() ou Filter() e o editor de fórmulas não reconhecê-los, abra o ícone de engrenagem e mude para Formula 2.0. Sem essa etapa, as funções não existirão.
Passar um não-array para Map ou Filter
Map e Filter funcionam apenas com arrays. Se você passar um único número ou uma string de texto, a fórmula retornará um erro. Verifique se a propriedade de origem é um rollup, seleção múltipla ou outra fórmula que retorna um array.
Usar current.value fora da expressão
A variável current.value é definida apenas dentro da expressão Map ou Filter. Se você tentar usá-la fora, a fórmula quebrará. Sempre aninhe sua lógica dentro da chamada da função.
Aninhar muitas funções
Você pode aninhar Map e Filter, mas cada nível adiciona complexidade. Para legibilidade, quebre transformações complexas em propriedades de fórmula separadas quando possível.
Limitações na exibição do resultado
A saída de Map e Filter é um array. Em um banco de dados do Notion, um array é exibido como uma lista separada por vírgulas dentro da célula da fórmula. Se o array for muito longo, o Notion pode truncar a exibição. Os dados subjacentes permanecem completos, mas podem não estar totalmente visíveis.
Map e Filter vs abordagens alternativas
| Recurso | Map / Filter | Rollup com agregação | Cálculo manual |
|---|---|---|---|
| Transforma cada elemento | Sim, por elemento | Não, apenas agrega (soma, média) | Não é possível |
| Filtra elementos | Sim | Não | Não é possível |
| Requer Formula 2.0 | Sim | Não | Não |
| Funciona com seleção múltipla | Sim | Não | Não |
| Tipo de saída | Array | Valor único | Valor único |
Map e Filter oferecem controle sobre cada elemento em um array. Rollups fornecem apenas um resumo. Se você precisa modificar ou selecionar itens específicos de uma lista, Map e Filter são as ferramentas corretas.
Agora você pode usar Map() para transformar arrays e Filter() para extrair subconjuntos de dados dentro de fórmulas do Notion. Experimente os exemplos acima com suas próprias propriedades de banco de dados. Para uso avançado, aninhe um Filter dentro de um Map para aplicar uma transformação apenas a elementos que atendem a uma condição. Lembre-se de que current.value é sua chave para acessar cada elemento.