Guide
Formulas are read-only Fields where the value is automatically calculated.
Use Formulas to calculate metrics that are important for you. In Fibery, you can also use 💫 AI to come up with Formulas.
Also, you can do all the same things with Formula Field as with all other Fields. For example, you can display a Formula Field on entity card (see Board View), filter on a Formula Field, sort by Formula Field, use it inside, etc.
https://youtu.be/9Ozqwkk85xs
Create a Formula
To create a Formula, navigate to any Database and click + Add Field or Relation, then select Formula.
Please, note that to save a formula, you need to have at least Read access to all the databases, which participate in this formula.
You will see Formula Field creation form. In this form specify the Field Name and the Formula itself. The returned data type will be inferred automatically, but in some cases you can 'fine-tune' it.
For example, for Number you may select the number of decimal places, and choose number, money or percent. For text results, you may select text, phone, email or URL, and for dates, you can choose date or datetime.
If you're not sure how your Formula should look, click Generate using AI button, and let the AI magic do the work.
Once a Formula Field has been created, its data type cannot be changed. This means that some updates to the Formula will not be permitted, e.g. if you have created a formula that gives a Number result, but decide to change it to give a Text result.
Formula basics
The most basic Formula just uses Fields from the same database. For example, you can create a Progress Formula for Feature that uses Completed Effort and Total Effort Fields.
[Completed Effort] / [Total Effort] * 100
You can use Fields from related Databases to build Formulas as well. For example, if a Feature has a collection of Tasks and Task has Effort Field, then you can calculate total effort of a Feature:
Tasks.Sum(Effort)
If Feature has a relation to Product and Product has Risk Level field, you can access it from the Feature like that:
Product.[Risk Level] * Effort
Some formulas examples
Inside Product we want to calculate effort of all completed Features. We create Completed Effort Formula Field:
Features.Filter(State.Final = true).Sum(Estimate)
🔜 We can also use Product Fields when filtering Features. For example, let's calculate the number of Features that were created by someone besides the Product leader:
Features.Filter([Created By] != [This Product].Leader).Count()
Text Field that indicates Importance:
If((Confidence > 10) and (Reach > 10),"Important","So-so")
Cycle Time Formula Field that calculates Feature's duration in days:
If([Planned Dates].End > Today(), ToDays(Today() - [Planned Dates].Start), ToDays([Planned Dates].End - [Planned Dates].Start))
FAQ
Why brackets are different for different Relation names?
If Field name contains spaces, then its name is in brackets.
If Field name contains no spaces, then its name is without brackets.
How to create a formula that abbreviates Entity name?
Here is the one:
Upper(Replace(ReplaceRegex(Name, "(?<=([^ ]))([^ ]+)", ""), " ", ""))
How to copy the first 50 characters of a text without cutting a word in half?
This code is designed to truncate a text description and add an ellipsis ("...") if it exceeds a certain length, specifically 50 characters.
If(
Length([Description (Snippet)]) < 50,
[Description (Snippet)],
ReplaceRegex([Description (Snippet)], "(^.{0,50})\s(.*)", "\1…") )
Here's how it works:
If(...): This is a conditional statement. It checks if the condition inside the parentheses is true.
Length([Description (Snippet)]) < 50: This part checks if the length of the text within the Description (Snippet) field is less than 50 characters.
[Description (Snippet)]: If the condition (Length(...) < 50) is true, the code simply returns the original text in the Description (Snippet) field without modifications.
,: This represents the "else" part of the condition. It executes if the length is 50 or more characters.
ReplaceRegex([Description (Snippet)], "(^.{0,50})\s(.*)", "\1 …"): This section uses a regular expression to replace the text for truncation:
ReplaceRegex(...): A function that replaces text based on a regular expression pattern.
"(^.{0,50})\s(.*)": The regular expression pattern has three parts:
(^.{0,50}) Matches the first 50 characters at the beginning of the text.
\s Matches a single whitespace character.
(.*) Matches any remaining characters after the whitespace.
"\1 …": The replacement string. The \1 refers to the first group captured by the regular expression (the first 50 characters) and appends a space and an ellipsis (" ...").
I can't access the modification date Field in Formulas. Why?
The modification date records when changes have been made to the Entity. It is not accessible in Formulas and Rules because there are very high risks of loops occurring.
If a Formula depends on the modification date, it will update when the modification date changes. This would cause the modification date to change again, leading to the formula updating, and so on.
Note that such functions as Now() or Today() will recalculate the entity value, changing its Modification Date, but these changes will not appear in the Activity log.
How can I achieve formula granularity on the Hours() and Minutes() levels?
Unfortunately, natively we don't support that with our formula syntax.
However, it's possible via script.
Or via a series of IF statements in the formula.
The example below rounds NOW() to an hour, not half an hour. But it can be modified to round to half an hour in a similar manner.
If(Minute(Now()) > 30,DateTime(Year(Now()),Month(Now()),Day(Now()),Hour(Now()) + 1,0,0),DateTime(Year(Now()),Month(Now()),Day(Now()),Hour(Now()),0,0))
Why did my formula create a huge queue (e.g., 20k tasks)?
When you create or modify a formula in a large database, Fibery must:
Recalculate the formula for every existing entity.
Recalculate all dependent formulas.
Update references and relations.
If the database contains thousands of entities, a single formula change can generate a large queue. This is expected behavior, although sometimes the recalculation may be slower than usual.
Can I see which formula is slowing everything down?
Not directly in the UI. At the moment, only the infrastructure team can identify the specific formula via logs. This is why support sometimes needs to “take a look” internally.
The queue decreases very slowly (e.g., 100–200 items per 10 minutes). Is this normal?
Yes — if the database is large and the formula is complex, recalculation may take time. The system will eventually catch up, and the queue will drain on its own.
If I delete the field with the slow formula, will the queue immediately disappear?
Not instantly.
Here’s how it works:
If you delete the field during recalculation, the system will finish the currently running tasks,
then stop scheduling any new ones for that formula,
and the queue will gradually clear.
Recommendation:
If possible, wait a bit before deleting the field — it prevents partial recalculation and avoids extra load.