Guide
In this document, you'll find all the functions, operators, and syntax available in Fibery, from basic math like Round and Power, to logic like If and IsEmpty, to working with dates, text, collections, and location. Each function lists what it does and a working example.
Syntax marks
With these five marks you can write any formula.
Mark | Name | What it does | Example |
|---|
. | dot | go inside the thing on the left | Tasks.Count() |
( ) | round brackets | hold a function's input | Tasks.Filter(State.Name != "Done") |
[ ] | square brackets | wrap a field name that has a space in it | Tasks.Min([Due date]) |
" " | quotes | literal text, matched exactly as typed | Priority.Name = "High" |
, | comma | separate a function's inputs | Join(Name, ", ") |
Operators
Operator | What it does | Example |
|---|
+ - * / | arithmetic | (Effort * Risk) / Complexity.Value |
= != | equal / not equal | State.Name != "Done" |
< > <= >= | compare size or date | [Due date] < Today() |
and or not | combine conditions | (State.Name != "Done") and ([Due date] < Today()) |
Math
Round()
Rounds a number to the specified number of decimal places.
Round(1.154, 1) → 1.2
RoundUp() and RoundDown()
Rounds up or down to the specified number of decimal places. For negative numbers this can look backwards: RoundUp(-10.5) gives -10, and RoundDown(-10.5) gives -11. That's because Round Up always moves toward positive infinity and Round Down always moves toward negative infinity — not away from zero. If you want rounding away from zero instead, you'll need to write that yourself; Fibery doesn't have a built-in function for it.
RoundUp(12.001, 1) → 12.1
RoundDown(9.999, 2) → 9.99
Power()
Raises a number to a power. Decimal powers work too.
Power(10, 2) → 100
Power(4, 0.5) → 2
AbsoluteValue()
Drops the minus sign.
AbsoluteValue(-14) → 14
Log()
Logarithm of a number for a given base.
Log(128, 2) → 7
Entities
Working with a set or stack of the same record — Features linked to a Product, Tasks linked to an Attraction, and so on.
Count()
How many records are in the collection.
Features.Count()
Sum()
Adds a number field across the records.
Features.Sum(Estimate)
Avg()
Averages a number field across the records.
Features.Avg(Estimate)
Min() and Max()
Smallest or largest value in the collection — works on number or date fields. Use this to pull dates up from a child collection to a parent. For example, get a Feature's start and end date from the Sprints its Stories are planned in:
Feature.[Start Date] = Stories.Min(Sprint.[Start Date])
Feature.[End Date] = Stories.Max(Sprint.[End Date])
CountUnique()
Counts the number of unique values in a collection.
Stories.CountUnique(Team.PublicId)
Filter()
Keeps only the records that pass a test. Combine with and / or for compound conditions.
Features.Filter(State.Final != true).Sum(Effort)
Features.Filter(Effort = 0 and Complexity.Name = "High").Count()
Sort()
Reorders a collection by a field (rank, by default). Usually paired with First() or Last().
Sprints.Sort([Start Date])
First() and Last()
Pulls one record out of a sorted collection.
Sprints.Sort([Start Date]).Last()
Sprints.Sort([Start Date]).Last().Progress
Join()
Combines text values from a collection into a single string.
Assignees.Join(Name, ', ') → "Michael, Teddy, Jerry"
Logic
If()
Returns one of two results based on a condition. Nest If in the else slot for more than two branches.
If([Planned Dates].End > Today(), ToDays(Today() - [Planned Dates].Start), ToDays([Planned Dates].End - [Planned Dates].Start))
If([RICE Score] >= 15, "Cool", If([RICE Score] >= 10, "OK", "Bad"))
IsEmpty()
True when the value is blank.
IsEmpty([Due date])
IfEmpty()
Returns the first non-empty value in the list — a fallback chain.
IfEmpty(Interview.Weight, Chat.Weight, Topic.Weight, Conversation.Weight, 1.0)
Greatest() and Least()
The largest (or smallest) number, or the latest (or earliest) date, across several values.
Greatest(Appointments.Max([Creation Date]), Comments.Max([Creation Date]))
.Value
The hidden number behind a select option — the field needs numeric value turned on.
Ease.Value * Confidence.Value * Impact.Value
Text
Use + to combine or join strings.
Name + " " + [Public Id]
Project.Abbreviation + "-" + [Public Id]
Length()
Number of characters in the text.
Length("This phrase has 29 characters")
Lower() and Upper()
Converts the text to lower or upper case.
Upper(Name) + " " + Upper(Abbreviation)
Left() and Right()
Pulls a set number of characters from the start or end of the text.
Left("Fibery rules", 6) → "Fibery"
Right("Fibery rules", 5) → "rules"
Middle()
Pulls a set number of characters from the middle of the text.
Middle("Umbrella", 5, 4) → "ella"
Trim()
Removes starting and ending spaces from the text.
Trim(LastName)
StartsWith() and EndsWith()
Checks whether text starts or ends with a given string.
StartsWith("Fibery rules", "Fibery")
EndsWith("Fibery rules", "rules")
MatchRegex()
Checks if text matches a regular expression.
MatchRegex("Fibery", "F.b")
Replace()
Substitutes a matching part of the text.
Replace("Fibery is slow", "slow", "fast")
ReplaceRegex()
Substitutes regular expression matches in the text.
ReplaceRegex("It costs $2000", "(\d+)", "1000")
Find()
Finds the position of the first occurrence of a string in the text.
Find("Where's Waldo?", "Waldo") → 9
ToText()
Converts a number or date into text. There's no pattern formatting, so build a custom date string manually if you need one:
ToText(1067)
ToText(Day([Creation Date])) + " " + MonthName([Creation Date]) + " " + ToText(Year([Creation Date])) → 21 July 2020
Dates & time
You can subtract dates like numbers. The result is a Duration object, in the form Duration(days, hours, minutes, seconds) — apply ToDays, ToHours, ToMinutes, or ToSeconds to turn it into a plain number.
Date(2022, 1, 13) + Days(ToDays(Today() - Date(2022, 6, 24)))
Today() and Now()
Today() returns the current date. Now() returns the current date-time, but only inside Automation formulas — it isn't available in Formula fields.
ToDays(Today() - Planned.Start())
Today() - Days(1) → yesterday
Year(), Month(), and Day()
Pulls a date part out as a number.
Year(Today())
IsoWeekday()
Day of the week as a number, 1 (Monday) through 7 (Sunday).
IsoWeekday(Today()) → 4
IsoWeekNum()
ISO week number of the year for a given date.
IsoWeekNum([Creation Date]) → 23
Date() and DateTime()
Builds a date or a datetime value from parts.
Date(1999, 12, 31)
DateTime(1999, 12, 31, 23, 59, 50)
MonthName() and WeekDayName()
Extracts the full or short month or weekday name from a date. Supported formats: MONTH, Month, month, MON, Mon, mon for months; DAY, Day, day, DY, Dy, dy for weekdays.
MonthName([Creation Date], "Mon") → "Dec"
WeekdayName([Creation Date])
Duration()
Creates a time duration directly.
Duration(10, 0, 0, 0) → exactly 10 days
ToDays(), ToHours(), ToMinutes(), and ToSeconds()
Converts a Duration object into a plain number.
ToDays(Planned.End(false) - Planned.Start())
Days(), Months(), Hours(), Minutes(), and Seconds()
Returns a Duration you can add to or subtract from a date. Note: adding Months directly to a date doesn't work yet — it's planned for Q1 2025. Until then, do the same thing with Days and ToDays instead.
[Due Date] - Days(2)
[Due Date] - Months(1)
DateRange() and DateTimeRange()
Returns a date range or datetime range between two values.
DateRange(Today(), Today() + Days(2))
DateTimeRange(DateTime(1999, 12, 31, 23, 59, 50), DateTime(2000, 1, 1, 0, 0, 0))
Location
FullAddress()
Extracts the full address from a location field.
[Client Address].FullAddress()
Latitude() and Longitude()
Extracts the latitude or longitude coordinate from a location field.
[Client Address].Latitude()
[Client Address].Longitude()
AddressPart()
Extracts one specific part of an address. Available options: country, region, post code, district, place, locality, neighborhood, address, points of interest.
[Client Address].AddressPart("country")
Rich Text (snippets)
Snippets are a plain-text version of a rich text field. You can use a snippet anywhere a formula needs the rich text field — for example, to generate an entity's Name from its rich text content. Snippets update a moment after the rich text field changes, not instantly, and they only store the first 3000 characters of the source field.